diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2011-10-11 18:50:28 -0700 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2011-10-11 18:50:28 -0700 |
commit | 85a5556fb58f1cdc016f5afe5e07cbe1b419ffd8 (patch) | |
tree | 7930aef67eabd4190bff4340343b6dc69328558f /src/com/android/camera/EffectsRecorder.java | |
parent | 895573a418f0304e312ae9645a37f85d443bfa3a (diff) | |
download | packages_apps_LegacyCamera-85a5556fb58f1cdc016f5afe5e07cbe1b419ffd8.zip packages_apps_LegacyCamera-85a5556fb58f1cdc016f5afe5e07cbe1b419ffd8.tar.gz packages_apps_LegacyCamera-85a5556fb58f1cdc016f5afe5e07cbe1b419ffd8.tar.bz2 |
Play a sound when starting and stopping recording with effects.
Normally, CameraService takes care of this, but with the effects
recording, CameraService doesn't know when recording is toggled on and
off. Mirrors the code in CameraService.cpp in terms of enforcing audio
output.
Bug: 5383166
Change-Id: I2175c1090ff57884d17cb422532a7930f29e10de
Diffstat (limited to 'src/com/android/camera/EffectsRecorder.java')
-rw-r--r-- | src/com/android/camera/EffectsRecorder.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/com/android/camera/EffectsRecorder.java b/src/com/android/camera/EffectsRecorder.java index 94a3740..5e3efd7 100644 --- a/src/com/android/camera/EffectsRecorder.java +++ b/src/com/android/camera/EffectsRecorder.java @@ -17,6 +17,7 @@ package com.android.camera; import android.content.Context; +import android.content.res.AssetFileDescriptor; import android.filterfw.GraphEnvironment; import android.filterfw.core.Filter; import android.filterfw.core.GLEnvironment; @@ -36,13 +37,17 @@ import android.os.ConditionVariable; import android.os.Handler; import android.os.Looper; import android.os.ParcelFileDescriptor; +import android.os.SystemProperties; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import java.io.IOException; +import java.io.FileNotFoundException; +import java.io.File; import java.lang.Runnable; + /** * Encapsulates the mobile filter framework components needed to record video with * effects applied. Modeled after MediaRecorder. @@ -95,6 +100,9 @@ public class EffectsRecorder { private SurfaceTexture mTextureSource; + private static final String mVideoRecordSound = "/system/media/audio/ui/VideoRecord.ogg"; + private SoundPlayer mRecordSound; + private static final int STATE_CONFIGURE = 0; private static final int STATE_WAITING_FOR_SURFACE = 1; private static final int STATE_PREVIEW = 2; @@ -123,6 +131,28 @@ public class EffectsRecorder { if (mLogVerbose) Log.v(TAG, "EffectsRecorder created (" + this + ")"); mContext = context; mHandler = new Handler(Looper.getMainLooper()); + + // Construct sound player; use enforced sound output if necessary + File recordSoundFile = new File(mVideoRecordSound); + try { + ParcelFileDescriptor recordSoundParcel = + ParcelFileDescriptor.open(recordSoundFile, + ParcelFileDescriptor.MODE_READ_ONLY); + AssetFileDescriptor recordSoundAsset = + new AssetFileDescriptor(recordSoundParcel, 0, + AssetFileDescriptor.UNKNOWN_LENGTH); + if (SystemProperties.get("ro.camera.sound.forced", "0").equals("0")) { + if (mLogVerbose) Log.v(TAG, "Standard recording sound"); + mRecordSound = new SoundPlayer(recordSoundAsset, false); + } else { + if (mLogVerbose) Log.v(TAG, "Forced recording sound"); + mRecordSound = new SoundPlayer(recordSoundAsset, true); + } + } catch (java.io.FileNotFoundException e) { + Log.e(TAG, "System video record sound not found"); + mRecordSound = null; + } + } public void setCamera(Camera cameraDevice) { @@ -521,6 +551,7 @@ public class EffectsRecorder { recorder.setInputValue("errorListener", mErrorListener); } recorder.setInputValue("recording", true); + if (mRecordSound != null) mRecordSound.play(); mState = STATE_RECORD; } @@ -539,6 +570,7 @@ public class EffectsRecorder { } Filter recorder = mRunner.getGraph().getFilter("recorder"); recorder.setInputValue("recording", false); + if (mRecordSound != null) mRecordSound.play(); mState = STATE_PREVIEW; } @@ -652,6 +684,7 @@ public class EffectsRecorder { stopPreview(); // Fall-through default: + mRecordSound.release(); mState = STATE_RELEASED; break; } |