From 19bf300bbefbe9c8244be3b1c8fbb7a9453ff8e2 Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Thu, 8 Feb 2024 11:17:09 -0700 Subject: [PATCH] Support orientation as a parameter to startRecording --- .../java/com/mrousavy/camera/core/ChunkedRecorder.kt | 11 +++++++---- .../com/mrousavy/camera/types/RecordVideoOptions.kt | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/package/android/src/main/java/com/mrousavy/camera/core/ChunkedRecorder.kt b/package/android/src/main/java/com/mrousavy/camera/core/ChunkedRecorder.kt index e1626d3..ea1439b 100644 --- a/package/android/src/main/java/com/mrousavy/camera/core/ChunkedRecorder.kt +++ b/package/android/src/main/java/com/mrousavy/camera/core/ChunkedRecorder.kt @@ -27,10 +27,11 @@ class ChunkedRecordingManager(private val encoder: MediaCodec, private val outpu bitRate: Int, options: RecordVideoOptions, outputDirectory: File, - iFrameInterval: Int = 3 + iFrameInterval: Int = 5 ): ChunkedRecordingManager { val mimeType = options.videoCodec.toMimeType() - val orientationDegrees = cameraOrientation.toDegrees() + val cameraOrientationDegrees = cameraOrientation.toDegrees() + val recordingOrientationDegrees = (options.orientation ?: Orientation.PORTRAIT).toDegrees(); val (width, height) = if (cameraOrientation.isLandscape()) { size.height to size.width } else { @@ -54,11 +55,13 @@ class ChunkedRecordingManager(private val encoder: MediaCodec, private val outpu format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, iFrameInterval) format.setInteger(MediaFormat.KEY_BIT_RATE, bitRate) - Log.i(TAG, "Video Format: $format, orientation $cameraOrientation") + Log.d(TAG, "Video Format: $format, camera orientation $cameraOrientationDegrees, recordingOrientation: $recordingOrientationDegrees") // Create a MediaCodec encoder, and configure it with our format. Get a Surface // we can use for input and wrap it with a class that handles the EGL work. codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE) - return ChunkedRecordingManager(codec, outputDirectory, 0, iFrameInterval, callbacks) + return ChunkedRecordingManager( + codec, outputDirectory, recordingOrientationDegrees, iFrameInterval, callbacks + ) } } diff --git a/package/android/src/main/java/com/mrousavy/camera/types/RecordVideoOptions.kt b/package/android/src/main/java/com/mrousavy/camera/types/RecordVideoOptions.kt index 0645305..78bfdd2 100644 --- a/package/android/src/main/java/com/mrousavy/camera/types/RecordVideoOptions.kt +++ b/package/android/src/main/java/com/mrousavy/camera/types/RecordVideoOptions.kt @@ -8,6 +8,7 @@ class RecordVideoOptions(map: ReadableMap) { var videoCodec = VideoCodec.H264 var videoBitRateOverride: Double? = null var videoBitRateMultiplier: Double? = null + var orientation: Orientation? = null init { if (map.hasKey("fileType")) { @@ -25,5 +26,8 @@ class RecordVideoOptions(map: ReadableMap) { if (map.hasKey("videoBitRateMultiplier")) { videoBitRateMultiplier = map.getDouble("videoBitRateMultiplier") } + if (map.hasKey("orientation")) { + orientation = Orientation.fromUnionValue(map.getString("orientation")) + } } }