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)); }