Merge "Camera: Add bandaid for preview orientation on reverse-landscape cameras" into nyc-dev
am: 8c349f5
* commit '8c349f5d3b764d4ab726070dba397a2a292a6858':
Camera: Add bandaid for preview orientation on reverse-landscape cameras
This commit is contained in:
@@ -76,7 +76,7 @@ import static android.system.OsConstants.*;
|
|||||||
* <li>If necessary, modify the returned {@link Camera.Parameters} object and call
|
* <li>If necessary, modify the returned {@link Camera.Parameters} object and call
|
||||||
* {@link #setParameters(Camera.Parameters)}.
|
* {@link #setParameters(Camera.Parameters)}.
|
||||||
*
|
*
|
||||||
* <li>If desired, call {@link #setDisplayOrientation(int)}.
|
* <li>Call {@link #setDisplayOrientation(int)} to ensure correct orientation of preview.
|
||||||
*
|
*
|
||||||
* <li><b>Important</b>: Pass a fully initialized {@link SurfaceHolder} to
|
* <li><b>Important</b>: Pass a fully initialized {@link SurfaceHolder} to
|
||||||
* {@link #setPreviewDisplay(SurfaceHolder)}. Without a surface, the camera
|
* {@link #setPreviewDisplay(SurfaceHolder)}. Without a surface, the camera
|
||||||
@@ -1511,9 +1511,15 @@ public class Camera {
|
|||||||
* <p>Starting from API level 14, this method can be called when preview is
|
* <p>Starting from API level 14, this method can be called when preview is
|
||||||
* active.
|
* active.
|
||||||
*
|
*
|
||||||
|
* <p><b>Note: </b>Before API level 24, the default value for orientation is 0. Starting in
|
||||||
|
* API level 24, the default orientation will be such that applications in forced-landscape mode
|
||||||
|
* will have correct preview orientation, which may be either a default of 0 or
|
||||||
|
* 180. Applications that operate in portrait mode or allow for changing orientation must still
|
||||||
|
* call this method after each orientation change to ensure correct preview display in all
|
||||||
|
* cases.</p>
|
||||||
|
*
|
||||||
* @param degrees the angle that the picture will be rotated clockwise.
|
* @param degrees the angle that the picture will be rotated clockwise.
|
||||||
* Valid values are 0, 90, 180, and 270. The starting
|
* Valid values are 0, 90, 180, and 270.
|
||||||
* position is 0 (landscape).
|
|
||||||
* @see #setPreviewDisplay(SurfaceHolder)
|
* @see #setPreviewDisplay(SurfaceHolder)
|
||||||
*/
|
*/
|
||||||
public native final void setDisplayOrientation(int degrees);
|
public native final void setDisplayOrientation(int degrees);
|
||||||
|
|||||||
@@ -567,6 +567,45 @@ static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz,
|
|||||||
|
|
||||||
// save context in opaque field
|
// save context in opaque field
|
||||||
env->SetLongField(thiz, fields.context, (jlong)context.get());
|
env->SetLongField(thiz, fields.context, (jlong)context.get());
|
||||||
|
|
||||||
|
// Update default display orientation in case the sensor is reverse-landscape
|
||||||
|
CameraInfo cameraInfo;
|
||||||
|
status_t rc = Camera::getCameraInfo(cameraId, &cameraInfo);
|
||||||
|
if (rc != NO_ERROR) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
int defaultOrientation = 0;
|
||||||
|
switch (cameraInfo.orientation) {
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
if (cameraInfo.facing == CAMERA_FACING_FRONT) {
|
||||||
|
defaultOrientation = 180;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 180:
|
||||||
|
defaultOrientation = 180;
|
||||||
|
break;
|
||||||
|
case 270:
|
||||||
|
if (cameraInfo.facing != CAMERA_FACING_FRONT) {
|
||||||
|
defaultOrientation = 180;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ALOGE("Unexpected camera orientation %d!", cameraInfo.orientation);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (defaultOrientation != 0) {
|
||||||
|
ALOGV("Setting default display orientation to %d", defaultOrientation);
|
||||||
|
rc = camera->sendCommand(CAMERA_CMD_SET_DISPLAY_ORIENTATION,
|
||||||
|
defaultOrientation, 0);
|
||||||
|
if (rc != NO_ERROR) {
|
||||||
|
ALOGE("Unable to update default orientation: %s (%d)",
|
||||||
|
strerror(-rc), rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user