First of all, which preview size are you using? If you are sending 320x240, and this resolution is already supported by your camera (getSupportedPreviewSizes), make sure to select it as preview size, and all previous operations will be cheaper (and some unnecessary)
Also, usually the camera gives the preview frame in landscape mode. Your final image seems also in landscape, so the rotate function seems to do nothing in this case. Worth evaluating if it takes any time, as there can be surprises.
If the above is not enough, there are additional ways to optimize it all, depending on what is causing the bottleneck. You should measure time taken by each step, also the real preview size and jpeg size: this will help to sort if the problem is due to transmission bandwidth or processing delay.--> for instance, you could directly send the JPEG encoded in base64 (if you can re-build the bitmap on the other side based on this information).