summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPannag Sanketi <psanketi@google.com>2011-10-13 17:11:37 -0700
committerPannag Sanketi <psanketi@google.com>2011-10-14 10:38:49 -0700
commitdca2af0a95ccb682d57bcea43f03fb01b929edf3 (patch)
tree1edd4d05e1f600ffa81cec7bcc50644d92934535 /src
parent6bfe6df5ea40684d56f4736da76b5680515f05ae (diff)
downloadLegacyCamera-dca2af0a95ccb682d57bcea43f03fb01b929edf3.tar.gz
Fixing crash in video capture intent with effects on
The video capture intent sends an uri and not a filename. Adding support in the EffectsRecorder and VideoCamera for uri. The effectsrecorder passes that on to the MediaEncoderFilter. Related to bug: 5441217 Change-Id: I784a6c3b53a586950adcc07a6e26659838ae3cbc
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/EffectsRecorder.java35
-rwxr-xr-xsrc/com/android/camera/VideoCamera.java20
2 files changed, 44 insertions, 11 deletions
diff --git a/src/com/android/camera/EffectsRecorder.java b/src/com/android/camera/EffectsRecorder.java
index 9b3e3b13..84d80356 100644
--- a/src/com/android/camera/EffectsRecorder.java
+++ b/src/com/android/camera/EffectsRecorder.java
@@ -46,6 +46,7 @@ import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.File;
import java.lang.Runnable;
+import java.io.FileDescriptor;
/**
@@ -84,6 +85,7 @@ public class EffectsRecorder {
private MediaRecorder.OnErrorListener mErrorListener;
private String mOutputFile;
+ private FileDescriptor mFd;
private int mOrientationHint = 0;
private int mCameraFacing = Camera.CameraInfo.CAMERA_FACING_BACK;
@@ -193,6 +195,21 @@ public class EffectsRecorder {
}
mOutputFile = outputFile;
+ mFd = null;
+ }
+
+ public void setOutputFile(FileDescriptor fd) {
+ switch (mState) {
+ case STATE_RECORD:
+ throw new RuntimeException("setOutputFile cannot be called while recording!");
+ case STATE_RELEASED:
+ throw new RuntimeException("setOutputFile called on an already released recorder!");
+ default:
+ break;
+ }
+
+ mOutputFile = null;
+ mFd = fd;
}
public void setPreviewDisplay(SurfaceHolder previewSurfaceHolder,
@@ -537,15 +554,21 @@ public class EffectsRecorder {
break;
}
- if (mOutputFile == null) {
- throw new RuntimeException("No output file name provided!");
+ if ((mOutputFile == null) && (mFd == null)) {
+ throw new RuntimeException("No output file name or descriptor provided!");
}
if (mState == STATE_CONFIGURE) {
startPreview();
}
+
Filter recorder = mRunner.getGraph().getFilter("recorder");
- recorder.setInputValue("outputFile", mOutputFile);
+ if (mFd != null) {
+ recorder.setInputValue("outputFileDescriptor", mFd);
+ } else {
+ recorder.setInputValue("outputFile", mOutputFile);
+ }
+
recorder.setInputValue("orientationHint", mOrientationHint);
if (mInfoListener != null) {
recorder.setInputValue("infoListener", mInfoListener);
@@ -722,7 +745,11 @@ public class EffectsRecorder {
if (mEffectsListener != null) {
mHandler.post(new Runnable() {
public void run() {
- mEffectsListener.onEffectsError(exception, mOutputFile);
+ if (mFd != null) {
+ mEffectsListener.onEffectsError(exception, null);
+ } else {
+ mEffectsListener.onEffectsError(exception, mOutputFile);
+ }
}
});
}
diff --git a/src/com/android/camera/VideoCamera.java b/src/com/android/camera/VideoCamera.java
index 3bf852d8..2566271c 100755
--- a/src/com/android/camera/VideoCamera.java
+++ b/src/com/android/camera/VideoCamera.java
@@ -71,6 +71,7 @@ import android.widget.Toast;
import java.io.File;
import java.io.IOException;
+import java.io.FileDescriptor;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
@@ -1286,21 +1287,26 @@ public class VideoCamera extends ActivityBase
if (mIsVideoCaptureIntent && myExtras != null) {
Uri saveUri = (Uri) myExtras.getParcelable(MediaStore.EXTRA_OUTPUT);
if (saveUri != null) {
- mVideoFilename = saveUri.toString();
- } else {
- mVideoFilename = null;
+ try {
+ mVideoFileDescriptor =
+ mContentResolver.openFileDescriptor(saveUri, "rw");
+ mCurrentVideoUri = saveUri;
+ } catch (java.io.FileNotFoundException ex) {
+ // invalid uri
+ Log.e(TAG, ex.toString());
+ }
}
- } else {
- mVideoFilename = null;
}
// TODO: Timelapse
// Set output file
- if (mVideoFilename == null) {
+ if (mVideoFileDescriptor != null) {
+ mEffectsRecorder.setOutputFile(mVideoFileDescriptor.getFileDescriptor());
+ } else {
generateVideoFilename(mProfile.fileFormat);
+ mEffectsRecorder.setOutputFile(mVideoFilename);
}
- mEffectsRecorder.setOutputFile(mVideoFilename);
}