Android: sacar una foto de la cámara frontal hace girar la foto

Estoy creando una aplicación en Android en la que el usuario podrá tomar una foto de la cámara frontal solo en modo retrato. He logrado fijar la vista de la cámara a retrato, pero cuando se toma una foto aparece girada. Lo peor es que la dirección de rotación es diferente en diferentes teléfonos, en un teléfono se gira a la derecha y en otro se gira a la izquierda.

Aquí están mis fragmentos de código

Para asegurarse de que la actividad juegue solo en retrato

 <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" 
             android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Para buscar la camara

   @Override
  public void onResume() {
    super.onResume();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
      Camera.CameraInfo info=new Camera.CameraInfo();

      for (int i=0; i < Camera.getNumberOfCameras(); i++) {
        Camera.getCameraInfo(i, info);

        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
          camera=Camera.open(i);
        }
      }
    }

    if (camera == null) {
      camera=Camera.open();
    }
  }

Para girar la camara

    @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    if(previewing){
        camera.stopPreview();
        previewing = false;
    }

    if (camera != null){
        try {
            camera.setPreviewDisplay(surfaceHolder);
            camera.setDisplayOrientation(90);
            initPreview(width, height);
            startPreview();

            previewing = true;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

Foto tomada

     PictureCallback myPictureCallback_JPG = new PictureCallback(){

    @Override

     public void onPictureTaken(byte[] data, Camera arg1) {
         // new SavePhotoTask().execute(data);
        Intent myIntent = new Intent(MainActivity.this, CropActivity.class);
        Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
        myIntent.putExtra("image", bitmap);
        MainActivity.this.startActivity(myIntent);

     }};

El envío BMP siempre aparece en forma rotada, pero no siempre con 90 grados. Parece que Android 4.0 no solo gira sino que también voltea la imagen. ¿Hay una buena manera de detectar y asegurarse de que siempre obtenga la imagen correcta?