Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit da5405fb authored by Alex Ray's avatar Alex Ray Committed by Android (Google) Code Review
Browse files

Merge "Camera2: FoV quirk crop regions" into jb-mr2-dev

parents 747b8492 c3624cbf
Loading
Loading
Loading
Loading
+17 −20
Original line number Diff line number Diff line
@@ -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