From 13e3ff4c79092e02d8a9343694612f4519044a68 Mon Sep 17 00:00:00 2001 From: xp-vit Date: Tue, 16 Jan 2018 11:19:26 +0100 Subject: [PATCH] mute camera in case if it's supported and required --- .../com/otaliastudios/cameraview/Camera1.java | 38 +++++++++++++++---- .../com/otaliastudios/cameraview/Camera2.java | 5 +++ .../cameraview/CameraController.java | 3 ++ 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index e1fe1420..ff3dfaf6 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -1,5 +1,6 @@ package com.otaliastudios.cameraview; +import android.annotation.TargetApi; import android.graphics.ImageFormat; import android.graphics.PointF; import android.graphics.Rect; @@ -9,6 +10,7 @@ import android.hardware.Camera; import android.location.Location; import android.media.CamcorderProfile; import android.media.MediaRecorder; +import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.WorkerThread; @@ -178,6 +180,7 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera mergeLocation(params, null); mergeWhiteBalance(params, WhiteBalance.DEFAULT); mergeHdr(params, Hdr.DEFAULT); + applyPlaySound(); params.setRecordingHint(mSessionType == SessionType.VIDEO); mCamera.setParameters(params); @@ -366,6 +369,17 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera return false; } + @TargetApi(17) + private void applyPlaySound() { + if (!mPlaySounds && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + Camera.CameraInfo info = new Camera.CameraInfo(); + Camera.getCameraInfo(mCameraId, info); + if (isCameraAvailable() && info.canDisableShutterSound) { + mCamera.enableShutterSound(false); + } + } + } + @Override void setAudio(Audio audio) { @@ -572,15 +586,19 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera private boolean isCameraAvailable() { switch (mState) { // If we are stopped, don't. - case STATE_STOPPED: return false; + case STATE_STOPPED: + return false; // If we are going to be closed, don't act on camera. // Even if mCamera != null, it might have been released. - case STATE_STOPPING: return false; + case STATE_STOPPING: + return false; // If we are started, mCamera should never be null. - case STATE_STARTED: return true; + case STATE_STARTED: + return true; // If we are starting, theoretically we could act. // Just check that camera is available. - case STATE_STARTING: return mCamera != null; + case STATE_STARTING: + return mCamera != null; } return false; } @@ -678,15 +696,15 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera mMediaRecorder.setOrientationHint(computeSensorToOutputOffset()); //If the user sets a max file size, set it to the max file size - if(mVideoMaxSizeInBytes > 0) { + if (mVideoMaxSizeInBytes > 0) { mMediaRecorder.setMaxFileSize(mVideoMaxSizeInBytes); //Attach a listener to the media recorder to listen for file size notifications mMediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() { @Override public void onInfo(MediaRecorder mediaRecorder, int i, int i1) { - switch (i){ - case MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED:{ + switch (i) { + case MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED: { endVideoImmediately(); break; } @@ -858,6 +876,12 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera mVideoMaxSizeInBytes = videoMaxSizeInBytes; } + @Override + void setPlaySounds(boolean playSounds) { + mPlaySounds = playSounds; + applyPlaySound(); + } + // ----------------- // Additional helper info } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java index 9c1346d2..9b827890 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera2.java @@ -119,4 +119,9 @@ class Camera2 extends CameraController { void setVideoMaxSize(long videoMaxSizeInBytes) { } + + @Override + void setPlaySounds(boolean playSounds) { + + } } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java index ba39b2f4..254eaab0 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java @@ -45,6 +45,7 @@ abstract class CameraController implements protected Audio mAudio; protected float mZoomValue; protected float mExposureCorrectionValue; + protected boolean mPlaySounds; protected int mCameraId; protected ExtraProperties mExtraProperties; @@ -320,6 +321,8 @@ abstract class CameraController implements abstract void setVideoMaxSize(long videoMaxSizeInBytes); + abstract void setPlaySounds(boolean playSounds); + //endregion //region final getters