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

Commit 52372bab authored by Beth Thibodeau's avatar Beth Thibodeau
Browse files

Fix issue when checking supported sizes

isSupportedSize will return false if the given size is not aligned
properly, so we should do that before checking.

Fixes: 179342552
Test: manual; recording works as expected
Change-Id: I5d5307ed74f214f0f6f924bb128a4c231676cdf7
parent 6844416a
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -187,7 +187,7 @@ public class ScreenMediaRecorder {
     * @param refreshRate Desired refresh rate
     * @return array with supported width, height, and refresh rate
     */
    private int[] getSupportedSize(int screenWidth, int screenHeight, int refreshRate) {
    private int[] getSupportedSize(final int screenWidth, final int screenHeight, int refreshRate) {
        double maxScale = 0;

        MediaCodecList codecList = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
@@ -207,25 +207,33 @@ public class ScreenMediaRecorder {
                    int width = vc.getSupportedWidths().getUpper();
                    int height = vc.getSupportedHeights().getUpper();

                    if (width >= screenWidth && height >= screenHeight
                            && vc.isSizeSupported(screenWidth, screenHeight)) {
                    int screenWidthAligned = screenWidth;
                    if (screenWidthAligned % vc.getWidthAlignment() != 0) {
                        screenWidthAligned -= (screenWidthAligned % vc.getWidthAlignment());
                    }
                    int screenHeightAligned = screenHeight;
                    if (screenHeightAligned % vc.getHeightAlignment() != 0) {
                        screenHeightAligned -= (screenHeightAligned % vc.getHeightAlignment());
                    }

                    if (width >= screenWidthAligned && height >= screenHeightAligned
                            && vc.isSizeSupported(screenWidthAligned, screenHeightAligned)) {
                        // Desired size is supported, now get the rate
                        int maxRate = vc.getSupportedFrameRatesFor(screenWidth, screenHeight)
                                .getUpper().intValue();
                        int maxRate = vc.getSupportedFrameRatesFor(screenWidthAligned,
                                screenHeightAligned).getUpper().intValue();

                        if (maxRate < refreshRate) {
                            refreshRate = maxRate;
                        }
                        Log.d(TAG, "Screen size supported at rate " + refreshRate);
                        return new int[]{screenWidth, screenHeight, refreshRate};
                        return new int[]{screenWidthAligned, screenHeightAligned, refreshRate};
                    }

                    // Otherwise, continue searching
                    double scale = Math.min(((double) width / screenWidth),
                            ((double) height / screenHeight));
                    if (scale > maxScale) {
                        maxScale = scale;
                        maxScale = Math.min(1, scale);
                        maxInfo = vc;
                    }
                }