From 0060c56b223441fd1330b32fd746c487223abd92 Mon Sep 17 00:00:00 2001 From: Alex Glaznev Date: Mon, 8 Aug 2016 12:27:24 -0700 Subject: [PATCH] Catch exceptions thrown by getCodecInfoAt() and getCapabilitiesForType(). BUG=b/30715199 R=jiayl@chromium.org Review URL: https://codereview.webrtc.org/2225073003 . Cr-Commit-Position: refs/heads/master@{#13678} --- .../src/org/webrtc/MediaCodecVideoDecoder.java | 18 ++++++++++++++---- .../src/org/webrtc/MediaCodecVideoEncoder.java | 17 ++++++++++++++--- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java b/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java index 63871f840e..9583667f7a 100644 --- a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java +++ b/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoDecoder.java @@ -178,8 +178,13 @@ public class MediaCodecVideoDecoder { } Logging.d(TAG, "Trying to find HW decoder for mime " + mime); for (int i = 0; i < MediaCodecList.getCodecCount(); ++i) { - MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i); - if (info.isEncoder()) { + MediaCodecInfo info = null; + try { + info = MediaCodecList.getCodecInfoAt(i); + } catch (IllegalArgumentException e) { + Logging.e(TAG, "Cannot retrieve decoder codec info", e); + } + if (info == null || info.isEncoder()) { continue; } String name = null; @@ -207,8 +212,13 @@ public class MediaCodecVideoDecoder { } // Check if codec supports either yuv420 or nv12. - CodecCapabilities capabilities = - info.getCapabilitiesForType(mime); + CodecCapabilities capabilities; + try { + capabilities = info.getCapabilitiesForType(mime); + } catch (IllegalArgumentException e) { + Logging.e(TAG, "Cannot retrieve decoder capabilities", e); + continue; + } for (int colorFormat : capabilities.colorFormats) { Logging.v(TAG, " Color: 0x" + Integer.toHexString(colorFormat)); } diff --git a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoEncoder.java b/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoEncoder.java index da8fb41711..5c499ee514 100644 --- a/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoEncoder.java +++ b/webrtc/api/android/java/src/org/webrtc/MediaCodecVideoEncoder.java @@ -242,8 +242,13 @@ public class MediaCodecVideoEncoder { } for (int i = 0; i < MediaCodecList.getCodecCount(); ++i) { - MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i); - if (!info.isEncoder()) { + MediaCodecInfo info = null; + try { + info = MediaCodecList.getCodecInfoAt(i); + } catch (IllegalArgumentException e) { + Logging.e(TAG, "Cannot retrieve encoder codec info", e); + } + if (info == null || !info.isEncoder()) { continue; } String name = null; @@ -281,7 +286,13 @@ public class MediaCodecVideoEncoder { } // Check if HW codec supports known color format. - CodecCapabilities capabilities = info.getCapabilitiesForType(mime); + CodecCapabilities capabilities; + try { + capabilities = info.getCapabilitiesForType(mime); + } catch (IllegalArgumentException e) { + Logging.e(TAG, "Cannot retrieve encoder capabilities", e); + continue; + } for (int colorFormat : capabilities.colorFormats) { Logging.v(TAG, " Color: 0x" + Integer.toHexString(colorFormat)); }