diff options
author | Alex Ray <aray@google.com> | 2013-05-10 20:07:33 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-05-10 20:07:33 +0000 |
commit | 6d0cf90b6b28cbb7e3e1b3ae32017aa4b44b6452 (patch) | |
tree | 15bd0dbf17612441b4a6f6d543c862fd0270e780 /services | |
parent | 2703cf1f71f679542f21632a9c1bd88af9578d0f (diff) | |
parent | 4ad015003cbab4ee6889b803225648c76a156193 (diff) | |
download | frameworks_av-6d0cf90b6b28cbb7e3e1b3ae32017aa4b44b6452.zip frameworks_av-6d0cf90b6b28cbb7e3e1b3ae32017aa4b44b6452.tar.gz frameworks_av-6d0cf90b6b28cbb7e3e1b3ae32017aa4b44b6452.tar.bz2 |
Merge "Camera2: FoV quirk crop regions" into jb-mr2-dev
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/camera2/Parameters.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/services/camera/libcameraservice/camera2/Parameters.cpp b/services/camera/libcameraservice/camera2/Parameters.cpp index 910aa19..49fc3d8 100644 --- a/services/camera/libcameraservice/camera2/Parameters.cpp +++ b/services/camera/libcameraservice/camera2/Parameters.cpp @@ -2559,27 +2559,24 @@ status_t Parameters::calculatePictureFovs(float *horizFov, float *vertFov) * stream cropping. */ if (quirks.meteringCropRegion) { - /** - * All streams are the same in height, so narrower aspect ratios will - * get cropped on the sides. First find the largest (widest) aspect - * ratio, then calculate the crop of the still FOV based on that. - */ - float cropAspect = arrayAspect; - float aspects[] = { - stillAspect, - static_cast<float>(previewWidth) / previewHeight, - static_cast<float>(videoWidth) / videoHeight - }; - for (size_t i = 0; i < sizeof(aspects)/sizeof(aspects[0]); i++) { - if (cropAspect < aspects[i]) cropAspect = aspects[i]; + // Use max of preview and video as first crop + float previewAspect = static_cast<float>(previewWidth) / previewHeight; + float videoAspect = static_cast<float>(videoWidth) / videoHeight; + if (videoAspect > previewAspect) { + previewAspect = videoAspect; + } + // First crop sensor to preview aspect ratio + if (arrayAspect < previewAspect) { + vertCropFactor = arrayAspect / previewAspect; + } else { + horizCropFactor = previewAspect / arrayAspect; + } + // Second crop to still aspect ratio + if (stillAspect < previewAspect) { + horizCropFactor *= stillAspect / previewAspect; + } else { + vertCropFactor *= previewAspect / stillAspect; } - ALOGV("Widest crop aspect: %f", cropAspect); - // Horizontal crop of still is done based on fitting in the widest - // aspect ratio - horizCropFactor = stillAspect / cropAspect; - // Vertical crop is a function of the array aspect ratio and the - // widest aspect ratio. - vertCropFactor = arrayAspect / cropAspect; } else { /** * Crop are just a function of just the still/array relative aspect |