2013-05-07 33 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,這就是我如何解決這個問題。