summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-08-14 20:37:48 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-08-14 20:37:49 +0000
commit18a29449cf72bb693eb63e30ba2b7e70853c454b (patch)
tree2ba1339d6980802694cd71f2465c526cfcd322b9
parenta1a52fc26adbfa7f464b996cc5ea420d3f29a324 (diff)
parent0989e394420705b66867a8c1cf273b5904c8e4eb (diff)
downloadandroid_packages_apps_Snap-18a29449cf72bb693eb63e30ba2b7e70853c454b.tar.gz
android_packages_apps_Snap-18a29449cf72bb693eb63e30ba2b7e70853c454b.tar.bz2
android_packages_apps_Snap-18a29449cf72bb693eb63e30ba2b7e70853c454b.zip
Merge "Handle unexpected exceptions when loading videos." into gb-ub-photos-carlsbad
-rw-r--r--src/com/android/camera/PhotoUI.java18
-rw-r--r--src/com/android/camera/data/LocalMediaData.java41
2 files changed, 35 insertions, 24 deletions
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 4b353f1cf..1f5ae2467 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -71,7 +71,6 @@ public class PhotoUI implements PieListener,
CameraManager.CameraFaceDetectionCallback {
private static final String TAG = "CAM_UI";
- private static final int UPDATE_TRANSFORM_MATRIX = 1;
private static final int DOWN_SAMPLE_FACTOR = 4;
private final AnimationManager mAnimationManager;
private CameraActivity mActivity;
@@ -119,18 +118,6 @@ public class PhotoUI implements PieListener,
private TextureView mTextureView;
private Matrix mMatrix = null;
private float mAspectRatio = 4f / 3f;
- private final Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case UPDATE_TRANSFORM_MATRIX:
- setTransformMatrix(mPreviewWidth, mPreviewHeight);
- break;
- default:
- break;
- }
- }
- };
public interface SurfaceTextureSizeChangedListener {
public void onSurfaceTextureSizeChanged(int uncroppedWidth, int uncroppedHeight);
@@ -152,7 +139,6 @@ public class PhotoUI implements PieListener,
if (mPreviewWidth != width || mPreviewHeight != height) {
mPreviewWidth = width;
mPreviewHeight = height;
- onScreenSizeChanged(width, height, w, h);
mController.onScreenSizeChanged(width, height, w, h);
}
}
@@ -212,10 +198,6 @@ public class PhotoUI implements PieListener,
mAnimationManager = new AnimationManager();
}
- public void onScreenSizeChanged(int width, int height, int previewWidth, int previewHeight) {
- setTransformMatrix(width, height);
- }
-
public void setSurfaceTextureSizeChangedListener(SurfaceTextureSizeChangedListener listener) {
mSurfaceTextureSizeListener = listener;
}
diff --git a/src/com/android/camera/data/LocalMediaData.java b/src/com/android/camera/data/LocalMediaData.java
index 05b907a1e..d5a929d36 100644
--- a/src/com/android/camera/data/LocalMediaData.java
+++ b/src/com/android/camera/data/LocalMediaData.java
@@ -443,16 +443,26 @@ public abstract class LocalMediaData implements LocalData {
d.height = c.getInt(COL_HEIGHT);
d.mPlayUri = d.getContentUri();
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.setDataSource(d.path);
- String rotation = retriever.extractMetadata(
+ String rotation = null;
+ try {
+ retriever.setDataSource(d.path);
+ } catch (IllegalArgumentException ex) {
+ retriever.release();
+ Log.e(TAG, "MediaMetadataRetriever.setDataSource() fail:"
+ + ex.getMessage());
+ return null;
+ }
+ rotation = retriever.extractMetadata(
MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
if (d.width == 0 || d.height == 0) {
- d.width = Integer.parseInt(retriever.extractMetadata(
- MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
- d.height = Integer.parseInt(retriever.extractMetadata(
- MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
+ retrieveVideoDimension(retriever, d);
}
retriever.release();
+ if (d.width == 0 || d.height == 0) {
+ // Width or height is still not available.
+ Log.e(TAG, "Unable to retrieve dimension of video:" + d.path);
+ return null;
+ }
if (rotation != null
&& (rotation.equals("90") || rotation.equals("270"))) {
int b = d.width;
@@ -509,6 +519,9 @@ public abstract class LocalMediaData implements LocalData {
return false;
}
VideoData newData = buildFromCursor(c);
+ if (newData == null) {
+ return false;
+ }
id = newData.id;
title = newData.title;
mimeType = newData.mimeType;
@@ -587,6 +600,22 @@ public abstract class LocalMediaData implements LocalData {
return bitmap;
}
}
+
+ /**
+ * Extracts video height/width if available. If
+ * unavailable, set to 0.
+ * @param retriever An initialized metadata retriever.
+ * @param d The {@link VideoData} whose width/height are to update.
+ */
+ private static void retrieveVideoDimension(
+ MediaMetadataRetriever retriever, VideoData d) {
+ String val = retriever.extractMetadata(
+ MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
+ d.width = (val == null) ? 0 : Integer.parseInt(val);
+ val = retriever.extractMetadata(
+ MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
+ d.height = (val == null) ? 0 : Integer.parseInt(val);
+ }
}
/**