diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index a039ada2..b48e299f 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -291,6 +291,15 @@ class Camera1 extends CameraController { return false; } + + @Override + void setAudio(Audio audio) { + if (mIsCapturingVideo) { + throw new IllegalStateException("Can't change audio while recording a video."); + } + mAudio = audio; + } + @Override void setFlash(Flash flash) { Flash old = mFlash; @@ -592,13 +601,25 @@ class Camera1 extends CameraController { mMediaRecorder.setCamera(mCamera); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); - mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); + + CamcorderProfile profile = getCamcorderProfile(mVideoQuality); + if (mAudio == Audio.ON) { + mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); + mMediaRecorder.setProfile(profile); + }else{ + // Set all values contained in profile except audio settings + mMediaRecorder.setOutputFormat(profile.fileFormat); + mMediaRecorder.setVideoEncoder(profile.videoCodec); + mMediaRecorder.setVideoEncodingBitRate(profile.videoBitRate); + mMediaRecorder.setVideoFrameRate(profile.videoFrameRate); + mMediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight); + } + if (mLocation != null) { mMediaRecorder.setLocation((float) mLocation.getLatitude(), (float) mLocation.getLongitude()); } - mMediaRecorder.setProfile(getCamcorderProfile(mVideoQuality)); mMediaRecorder.setOutputFile(mVideoFile.getAbsolutePath()); mMediaRecorder.setOrientationHint(computeExifRotation()); // Not needed. mMediaRecorder.setPreviewDisplay(mPreview.getSurface()); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java index 18a2d487..58190e85 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java @@ -151,6 +151,11 @@ class Camera2 extends CameraController { } + @Override + void setAudio(Audio audio) { + + } + @Override void setLocation(Location location) { diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java index 0432fcbc..f50fe27b 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java @@ -19,6 +19,7 @@ abstract class CameraController implements Preview.SurfaceCallback { protected VideoQuality mVideoQuality; protected SessionType mSessionType; protected Hdr mHdr; + protected Audio mAudio; protected Size mCaptureSize; protected Size mPreviewSize; @@ -101,6 +102,8 @@ abstract class CameraController implements Preview.SurfaceCallback { abstract void setHdr(Hdr hdr); + abstract void setAudio(Audio audio); + abstract void setLocation(Location location); //endregion @@ -160,6 +163,10 @@ abstract class CameraController implements Preview.SurfaceCallback { return mHdr; } + final Audio getAudio() { + return mAudio; + } + final Size getCaptureSize() { return mCaptureSize; } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index e6c22a26..1b6506e7 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -103,6 +103,7 @@ public class CameraView extends FrameLayout { VideoQuality videoQuality = VideoQuality.fromValue(a.getInteger(R.styleable.CameraView_cameraVideoQuality, VideoQuality.DEFAULT.value())); SessionType sessionType = SessionType.fromValue(a.getInteger(R.styleable.CameraView_cameraSessionType, SessionType.DEFAULT.value())); Hdr hdr = Hdr.fromValue(a.getInteger(R.styleable.CameraView_cameraHdr, Hdr.DEFAULT.value())); + Audio audio = Audio.fromValue(a.getInteger(R.styleable.CameraView_cameraAudio, Audio.DEFAULT.value())); // Gestures GestureAction tapGesture = GestureAction.fromValue(a.getInteger(R.styleable.CameraView_cameraGestureTap, GestureAction.DEFAULT_TAP.value())); @@ -143,6 +144,7 @@ public class CameraView extends FrameLayout { setWhiteBalance(whiteBalance); setGrid(grid); setHdr(hdr); + setAudio(audio); // Apply gestures mapGesture(Gesture.TAP, tapGesture); @@ -865,6 +867,28 @@ public class CameraView extends FrameLayout { } + /** + * Controls the audio + * + * @see Audio#OFF + * @see Audio#ON + * + * @param audio desired audio value + */ + public void setAudio(Audio audio) { + mCameraController.setAudio(audio); + } + + + /** + * Gets the current audio value. + * @return the current audio value + */ + public Audio getAudio() { + return mCameraController.getAudio(); + } + + /** * Starts an autofocus process at the given coordinates, with respect * to the view width and height. diff --git a/cameraview/src/main/options/com/otaliastudios/cameraview/Audio.java b/cameraview/src/main/options/com/otaliastudios/cameraview/Audio.java new file mode 100644 index 00000000..e1f4f6af --- /dev/null +++ b/cameraview/src/main/options/com/otaliastudios/cameraview/Audio.java @@ -0,0 +1,42 @@ +package com.otaliastudios.cameraview; + + +/** + * Audio values indicate whether to record audio stream when record video. + * + * @see CameraView#setAudio(Audio) + */ +public enum Audio { + + /** + * No Audio. + */ + OFF(0), + + /** + * With Audio. + */ + ON(1); + + final static Audio DEFAULT = ON; + + private int value; + + Audio(int value) { + this.value = value; + } + + int value() { + return value; + } + + static Audio fromValue(int value) { + Audio[] list = Audio.values(); + for (Audio action : list) { + if (action.value() == value) { + return action; + } + } + return null; + } +} diff --git a/cameraview/src/main/res/values/attrs.xml b/cameraview/src/main/res/values/attrs.xml index b2f41d80..30050a1e 100644 --- a/cameraview/src/main/res/values/attrs.xml +++ b/cameraview/src/main/res/values/attrs.xml @@ -91,6 +91,11 @@ + + + + +