网上有很多关于在应用层开发来解决camera预览画面倒置问题,我这里说一下基于源码解决此问题的方法。
1、frameworks/base/core/java/android/hardware/Camera.java
public void setDisplayOrientation(int d) {
int rotation = SystemProperties.getInt("ro.sf.hwrotation",0);
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result = 0;
CameraInfo cameraInfo = new CameraInfo();
getCameraInfo(camera_id, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
result = (cameraInfo.orientation - degrees + 360) % 360; // back-facing
} else if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (cameraInfo.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
}
_setDisplayOrientation(result);
}
public native final void _setDisplayOrientation(int degrees);
2、frameworks/base/core/jni/android_hardware_Camera.cpp
{ "_setDisplayOrientation",
"(I)V",
(void *)android_hardware_Camera_setDisplayOrientation },