Write orientation to exif when saving jpeg
BUG: 37719035
The test is sensitive to orientation.
Test: run cts -m CtsProviderTestCases -t
android.provider.cts.MediaStoreUiTest#testImageCapture
Change-Id: Ifb2cd3c2a445768e3d5d24840a2720675bb62039
TODO: We still need to pass the correct orientation.
diff --git a/camera/EmulatedCameraFactory.h b/camera/EmulatedCameraFactory.h
index 879f925..923fe7e 100755
--- a/camera/EmulatedCameraFactory.h
+++ b/camera/EmulatedCameraFactory.h
@@ -121,13 +121,13 @@
/* Gets fake camera orientation. */
int getFakeCameraOrientation() {
/* TODO: Have a boot property that controls that. */
- return 90;
+ return 0;
}
/* Gets qemu camera orientation. */
int getQemuCameraOrientation() {
/* TODO: Have a boot property that controls that. */
- return 90;
+ return 0;
}
/* Gets number of emulated cameras.
diff --git a/camera/EmulatedFakeCamera.cpp b/camera/EmulatedFakeCamera.cpp
index 3db1a80..c85285d 100755
--- a/camera/EmulatedFakeCamera.cpp
+++ b/camera/EmulatedFakeCamera.cpp
@@ -60,6 +60,8 @@
mParameters.set(EmulatedCamera::ORIENTATION_KEY,
gEmulatedCameraFactory.getFakeCameraOrientation());
+ mParameters.set(CameraParameters::KEY_ROTATION,
+ gEmulatedCameraFactory.getFakeCameraOrientation());
res = EmulatedCamera::Initialize();
if (res != NO_ERROR) {
diff --git a/camera/EmulatedQemuCamera.cpp b/camera/EmulatedQemuCamera.cpp
index ce47f07..eb2c4be 100755
--- a/camera/EmulatedQemuCamera.cpp
+++ b/camera/EmulatedQemuCamera.cpp
@@ -138,6 +138,8 @@
mParameters.set(EmulatedCamera::FACING_KEY, facing_dir);
mParameters.set(EmulatedCamera::ORIENTATION_KEY,
gEmulatedCameraFactory.getQemuCameraOrientation());
+ mParameters.set(CameraParameters::KEY_ROTATION,
+ gEmulatedCameraFactory.getQemuCameraOrientation());
mParameters.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES,
sizes.c_str());
mParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES,
diff --git a/camera/Exif.cpp b/camera/Exif.cpp
index edf50c6..d444824 100644
--- a/camera/Exif.cpp
+++ b/camera/Exif.cpp
@@ -280,6 +280,7 @@
float triplet[3];
float floatValue = 0.0f;
const char* stringValue;
+ int64_t degrees;
// Datetime, creating and initializing a datetime tag will automatically
// set the current date and time in the tag so just do that.
@@ -298,6 +299,38 @@
createEntry(exifData, EXIF_IFD_EXIF,
EXIF_TAG_PIXEL_Y_DIMENSION, height);
}
+ // Orientation
+ if (getCameraParam(params,
+ CameraParameters::KEY_ROTATION,
+ °rees)) {
+ // Exif orientation values, please refer to
+ // http://www.exif.org/Exif2-2.PDF, Section 4.6.4-A-Orientation
+ // Or these websites:
+ // http://sylvana.net/jpegcrop/exif_orientation.html
+ // http://www.impulseadventure.com/photo/exif-orientation.html
+ enum {
+ EXIF_ROTATE_CAMERA_CW0 = 1,
+ EXIF_ROTATE_CAMERA_CW90 = 6,
+ EXIF_ROTATE_CAMERA_CW180 = 3,
+ EXIF_ROTATE_CAMERA_CW270 = 8,
+ };
+ uint16_t exifOrien = 1;
+ switch (degrees) {
+ case 0:
+ exifOrien = EXIF_ROTATE_CAMERA_CW0;
+ break;
+ case 90:
+ exifOrien = EXIF_ROTATE_CAMERA_CW90;
+ break;
+ case 180:
+ exifOrien = EXIF_ROTATE_CAMERA_CW180;
+ break;
+ case 270:
+ exifOrien = EXIF_ROTATE_CAMERA_CW270;
+ break;
+ }
+ createEntry(exifData, EXIF_IFD_0, EXIF_TAG_ORIENTATION, exifOrien);
+ }
// Focal length
if (getCameraParam(params,
CameraParameters::KEY_FOCAL_LENGTH,