Reviewers: watk
CL:
https://codereview.chromium.org/2461523003/Message:
Hi watk@, please take a look.
Description:
Android MediaCodec: catch exceptions to stop() and other methods.
In MediaCodecBridge.java, we didn't catch exception to some system methods.
One of them caused the crash in crbug/659836 for unknown reason. Try to catch
exception to all the places calling system mathods in this file.
BUG=659836
Affected files (+22, -4 lines):
M media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
Index: media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
index ecc90018c2082a81a8690e084c629be3028ee3b7..089581cea862eabc44ac432ae0901d5fb7be156b 100644
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java
@@ -296,13 +296,23 @@ class MediaCodecBridge {
@CalledByNative
private void stop() {
- mMediaCodec.stop();
+ try {
+ mMediaCodec.stop();
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Failed to stop MediaCodec", e);
+ }
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@CalledByNative
private String getName() {
- return mMediaCodec.getName();
+ String codecName = "unknown";
+ try {
+ codecName = mMediaCodec.getName();
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Cannot get codec name", e);
+ }
+ return codecName;
}
@CalledByNative
@@ -370,7 +380,11 @@ class MediaCodecBridge {
Bundle b = new Bundle();
b.putInt(MediaCodec.PARAMETER_KEY_VIDEO_BITRATE, targetBps);
- mMediaCodec.setParameters(b);
+ try {
+ mMediaCodec.setParameters(b);
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Failed to set MediaCodec parameters", e);
+ }
Log.v(TAG,
"setVideoBitrate: input " + bps + "bps@" + frameRate + ", targetBps " + targetBps);
}
@@ -380,7 +394,11 @@ class MediaCodecBridge {
private void requestKeyFrameSoon() {
Bundle b = new Bundle();
b.putInt(MediaCodec.PARAMETER_KEY_REQUEST_SYNC_FRAME, 0);
- mMediaCodec.setParameters(b);
+ try {
+ mMediaCodec.setParameters(b);
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "Failed to set MediaCodec parameters", e);
+ }
}
@CalledByNative