summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/EffectsRecorder.java
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2011-10-11 18:50:28 -0700
committerEino-Ville Talvala <etalvala@google.com>2011-10-11 18:50:28 -0700
commit85a5556fb58f1cdc016f5afe5e07cbe1b419ffd8 (patch)
tree7930aef67eabd4190bff4340343b6dc69328558f /src/com/android/camera/EffectsRecorder.java
parent895573a418f0304e312ae9645a37f85d443bfa3a (diff)
downloadpackages_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.java33
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;
}