From 4e217ee4c4ab89e3f52ecdebac14cd0b77738a59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iva=CC=81n=20A=CC=81lvarez=20Pereira?= Date: Fri, 4 Jan 2019 13:06:08 +0100 Subject: [PATCH] =?UTF-8?q?=C2=B7=20Enable=20video=20and=20audio=20configu?= =?UTF-8?q?ration=20properties=20on=20CameraView=20component:=20-=20Audio?= =?UTF-8?q?=20bit=20rate=20-=20Audio=20sample=20rate=20-=20Audio=20channel?= =?UTF-8?q?s=20-=20Video=20bit=20arte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/otaliastudios/cameraview/Camera1.java | 30 ++++++-- .../cameraview/CameraController.java | 35 ++++++++++ .../otaliastudios/cameraview/CameraView.java | 70 +++++++++++++++++++ cameraview/src/main/res/values/attrs.xml | 11 +++ demo/src/main/res/layout/activity_camera.xml | 17 +++-- 5 files changed, 152 insertions(+), 11 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index eacca2fa..e49d54c9 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -706,12 +706,34 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera } else { mMediaRecorder.setVideoEncoder(mMapper.map(mVideoCodec)); } - mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); + + if(getVideoBitRate() <= 0) { + mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); + } + else { + mMediaRecorder.setVideoEncodingBitRate(getVideoBitRate()); + } + if (mAudio == Audio.ON) { - mMediaRecorder.setAudioChannels(profile.audioChannels); - mMediaRecorder.setAudioSamplingRate(profile.audioSampleRate); + if(getAudioSampleRate() <= 0) { + mMediaRecorder.setAudioSamplingRate(profile.audioSampleRate); + } else { + mMediaRecorder.setAudioSamplingRate(getAudioBitRate()); + } + mMediaRecorder.setAudioEncoder(profile.audioCodec); - mMediaRecorder.setAudioEncodingBitRate(profile.audioBitRate); + + if(getAudioChannels() == 0){ + mMediaRecorder.setAudioChannels(profile.audioChannels); + } else { + mMediaRecorder.setAudioChannels(getAudioChannels()); + } + + if(getAudioBitRate() <= 0) { + mMediaRecorder.setAudioEncodingBitRate(profile.audioBitRate); + } else { + mMediaRecorder.setAudioEncodingBitRate(getAudioBitRate()); + } } if (mLocation != null) { diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java index 3fb41e8a..5f57adcb 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java @@ -61,6 +61,10 @@ abstract class CameraController implements protected Size mPictureSize; protected Size mPreviewSize; protected int mPreviewFormat; + protected int mVideoBitRate; + protected int mAudioBitRate; + protected int mAudioSampleRate; + protected int mAudioChannels; protected int mSensorOffset; private int mDisplayOffset; @@ -290,6 +294,21 @@ abstract class CameraController implements mVideoCodec = codec; } + final void setVideoBitRate(int videoBitRate) { + mVideoBitRate = videoBitRate; + } + + final void setAudioBitRate(int audioBitRate) { + mAudioBitRate = audioBitRate; + } + + final void setAudioSampleRate(int audioSampleRate) { + mAudioBitRate = audioSampleRate; + } + + final void setAudioChannels(int audioChannels){ + mAudioChannels = audioChannels; + } //endregion @@ -419,6 +438,22 @@ abstract class CameraController implements return mIsCapturingVideo; } + final int getVideoBitRate() { + return mVideoBitRate; + } + + final int getAudioBitRate() { + return mAudioBitRate; + } + + final int getAudioSampleRate() { + return mAudioSampleRate; + } + + final int getAudioChannels() { + return mAudioChannels; + } + //endregion //region Orientation utils diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index 3f44b18e..b310559e 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -116,6 +116,10 @@ public class CameraView extends FrameLayout implements LifecycleObserver { VideoCodec codec = VideoCodec.fromValue(a.getInteger(R.styleable.CameraView_cameraVideoCodec, VideoCodec.DEFAULT.value())); long videoMaxSize = (long) a.getFloat(R.styleable.CameraView_cameraVideoMaxSize, 0); int videoMaxDuration = a.getInteger(R.styleable.CameraView_cameraVideoMaxDuration, 0); + int videoBitRate = a.getInteger(R.styleable.CameraView_cameraVideoBitRate, 0); + int audioBitRate = a.getInteger(R.styleable.CameraView_cameraAudioBitRate, 0); + int audioSampleRate = a.getInteger(R.styleable.CameraView_cameraAudioSampleRate, 0); + int audioChannels = a.getInteger(R.styleable.CameraView_cameraAudioChannels, 0); // Size selectors List constraints = new ArrayList<>(3); @@ -191,6 +195,10 @@ public class CameraView extends FrameLayout implements LifecycleObserver { setVideoCodec(codec); setVideoMaxSize(videoMaxSize); setVideoMaxDuration(videoMaxDuration); + setVideoBitRate(videoBitRate); + setAudioBitRate(audioBitRate); + setAudioSampleRate(audioSampleRate); + setAudioChannels(audioChannels); // Apply gestures mapGesture(Gesture.TAP, tapGesture); @@ -1480,6 +1488,68 @@ public class CameraView extends FrameLayout implements LifecycleObserver { return mCameraController.isCapturingVideo(); } + /** + * Returns custom video bitrate, or 0 if no limit was set. + * + * @see #setVideoBitRate(int) + * @return custom video bitrate + */ + public int getVideoBitRate() { + return mCameraController.getVideoBitRate(); + } + + + /** + * Returns custom audio bitrate, or 0 if no limit was set. + * + * @see #setAudioBitRate(int) + * @return audio bit rate + */ + public int getAudioBitRate() { + return mCameraController.getVideoBitRate(); + } + + /** + * Returns custom audio bitrate, or 0 if no limit was set. + * + * @see #setAudioSampleRate(int) + * @return audio bit rate + */ + public int getAudioSampleRate() { + return mCameraController.getAudioSampleRate(); + } + + /** + * Sets custom video bitrate for recording. Use 0 or negatives to disable. + * + * @param videoBitRate The maximum video bitrate + */ + public void setVideoBitRate(int videoBitRate) { + mCameraController.setVideoBitRate(videoBitRate); + } + + /** + * Sets custom audio bitrate for recording. Use 0 or negatives to disable. + * + * @param audioBitRate The maximum video bitrate + */ + public void setAudioBitRate(int audioBitRate) { + mCameraController.setAudioBitRate(audioBitRate); + } + + /** + * Sets custom audio sample rate for recording. Use 0 or negatives to disable. + * + * @param audioSampleRate The maximum audio sample rate + */ + public void setAudioSampleRate(int audioSampleRate) { + mCameraController.setAudioSampleRate(audioSampleRate); + } + + public void setAudioChannels(int audioChannels){ + mCameraController.setAudioChannels(audioChannels); + } + //endregion //region Callbacks and dispatching diff --git a/cameraview/src/main/res/values/attrs.xml b/cameraview/src/main/res/values/attrs.xml index 53abcd38..7976a869 100644 --- a/cameraview/src/main/res/values/attrs.xml +++ b/cameraview/src/main/res/values/attrs.xml @@ -120,6 +120,17 @@ + + + + + + + + + + + - + app:cameraPlaySounds="true" + app:cameraSessionType="picture" + app:cameraVideoBitRate="128000" />