2013-05-07 32 views
1

当我在风景,如果它在0degrees,它捕捉一个很好的视频,但如果我打开手机超过180度,它会记录颠倒,我怎么能改变这一点? 当我开始记录我这样做代码:摄像机记录颠倒有时

myMediaRecorder.setPreviewDisplay(mySurfaceHolder.getSurface()); 

     if (rotationInDegreeValue == 90) { 
      LogService.log(TAG, "set orientation hint : " + 0); 
      myMediaRecorder.setOrientationHint(0); 
     } else if (rotationInDegreeValue == 270) { 
      LogService.log(TAG, "set orientation hint : " + 180);// 180 
      myMediaRecorder.setOrientationHint(180); 
     } 

     myMediaRecorder.prepare(); 
     myMediaRecorder.start(); 

然后,我有一个定位监听器:

orientationListener = new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_UI) { 

     @Override 
     public void onOrientationChanged(int orientation) { 
      LogService.log(TAG, "onOrientationChanged"); 

      if ((myCamera == null)) { 
       return; 
      } 
      Log.d(TAG, "orientation changed : " + orientation); 
      if (((orientation < 45) || (orientation > 315) || ((orientation < 225) && (orientation > 135))) && !isRecording) { 
       if (!isAlertShown && !isUserListDisplayed) { 
        // AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity()); 
        // alertDialogBuilder.setTitle("Orientation").setMessage("Return to landscape").setCancelable(false); 
        // orientationAlert = alertDialogBuilder.create(); 
        // orientationAlert.show(); 
        isAlertShown = true; 
       } 

      } else { 
       if (isAlertShown) { 
        // orientationAlert.hide(); 
        // orientationAlert.dismiss(); 
        isAlertShown = false; 
       } 
      } 
      rotateCamera(); 
     } 
    }; 

这是RotateCamera功能:

private void rotateCamera() { 

    LogService.log(TAG, "rotateCamera()"); 

    int cameraId = CameraInfo.CAMERA_FACING_BACK; 

    if (isUsingBackCam) { 
     cameraId = CameraInfo.CAMERA_FACING_FRONT; 
    } 
    android.hardware.Camera.CameraInfo myCameraInfo = new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(cameraId, myCameraInfo); 
    Display display; 
    display = getActivity().getWindow().getWindowManager().getDefaultDisplay(); 

    int rotation = display.getRotation(); 
    int degrees = 0; 

    Point size = new Point(); 
    display.getSize(size); 
    switch (rotation) { 
    case Surface.ROTATION_0: 
     degrees = 0; 
     rotationInDegreeValue = 0; 
     SCREEN_HEIGHT = size.x; 

     break; 
    case Surface.ROTATION_90: 
     degrees = 90; 
     rotationInDegreeValue = 90; 
     SCREEN_HEIGHT = size.y; 
     break; 
    case Surface.ROTATION_180: 
     degrees = 180; 
     rotationInDegreeValue = 180; 
     break; 
    case Surface.ROTATION_270: 
     rotationInDegreeValue = 270; 
     degrees = 270; 
     SCREEN_HEIGHT = size.y; 
     break; 
    } 
    int result; 
    if (myCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
     result = (myCameraInfo.orientation + degrees) % 360; 
     result = (360 - result) % 360; // compensate the mirror 
    } else { // back-facing 
     result = ((myCameraInfo.orientation - degrees) + 360) % 360; 
    } 
    if (!isRecording) { 
     try { 
      myCamera.setDisplayOrientation(result); 
     } catch (Exception e) { 
      LogService.err(TAG, e.getMessage(), e, 1); 
     } 
    } 
} 

我有什么要当我打开手机180度时,请停止相机倒置录制。我试图对方向倾听者发表评论,但仍然没有运气。 另外,我不知道它是否非重要,但是这发生在一个片段中。片段的活动,没有onconfigurationchanged设置。

+0

由于代码是已知的,如果手机翻转180度,当我开始录制时,视频是正常的,而我录制的时候,如果我打开手机到正常(0度),它仍然是正常的。问题是,如果我想观看视频,录制的视频通过颠倒(而不是正常)开始,只有当我将手机调到0度时才会正常转动 – 2013-05-07 08:15:40

回答

1

setOrientationHint函数有效,但我不得不添加更多视频,当发生这种情况时,视频的合成矩阵会丢失。 我已经更改了清单,从SensorLandscape到Landscape,这就是我如何解决这个问题。