From 2c343290f81e695cfc8de1fa06415a06076002bc Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Mon, 12 Aug 2019 17:38:12 +0200 Subject: [PATCH] Do the same for video frame rate --- .../cameraview/internal/DeviceEncoders.java | 17 +++++++++++++++++ .../cameraview/video/SnapshotVideoRecorder.java | 1 + 2 files changed, 18 insertions(+) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/internal/DeviceEncoders.java b/cameraview/src/main/java/com/otaliastudios/cameraview/internal/DeviceEncoders.java index 7baf7b69..b2947fe6 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/internal/DeviceEncoders.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/internal/DeviceEncoders.java @@ -170,6 +170,23 @@ public class DeviceEncoders { return newBitRate; } + /** + * Returns a video frame rate supported by the device encoders. + * This means adjusting the input frame rate if needed, to match encoder constraints. + * + * @param frameRate input rate + * @return adjusted rate + */ + @SuppressLint("NewApi") + public int getSupportedVideoFrameRate(@NonNull Size size, int frameRate) { + if (!mEnabled) return frameRate; + int newFrameRate = (int) (double) mVideoCapabilities + .getSupportedFrameRatesFor(size.getWidth(), size.getHeight()) + .clamp((double) frameRate); + LOG.i("getSupportedVideoFrameRate -", "inputRate:", frameRate, "adjustedRate:", newFrameRate); + return newFrameRate; + } + /** * Returns an audio bit rate supported by the device encoders. * This means adjusting the input bit rate if needed, to match encoder constraints. diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java index 4a13bc5b..f19a8555 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java @@ -136,6 +136,7 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram mResult.size = deviceEncoders.getSupportedVideoSize(mResult.size); mResult.videoBitRate = deviceEncoders.getSupportedVideoBitRate(mResult.videoBitRate); mResult.audioBitRate = deviceEncoders.getSupportedAudioBitRate(mResult.audioBitRate); + mResult.videoFrameRate = deviceEncoders.getSupportedVideoFrameRate(mResult.size, mResult.videoFrameRate); // Video TextureConfig videoConfig = new TextureConfig();