diff --git a/src/api-impl-jni/media/android_media_MediaCodec.c b/src/api-impl-jni/media/android_media_MediaCodec.c index a44b7c0a..20133a97 100644 --- a/src/api-impl-jni/media/android_media_MediaCodec.c +++ b/src/api-impl-jni/media/android_media_MediaCodec.c @@ -60,6 +60,8 @@ JNIEXPORT jlong JNICALL Java_android_media_MediaCodec_native_1constructor(JNIEnv const char *name = (*env)->GetStringUTFChars(env, codec_name, NULL); const AVCodec *codec = avcodec_find_decoder_by_name(name); (*env)->ReleaseStringUTFChars(env, codec_name, name); + if (!codec) + return 0; AVCodecContext *codec_ctx = avcodec_alloc_context3(codec); struct ATL_codec_context *ctx = calloc(1, sizeof(struct ATL_codec_context)); diff --git a/src/api-impl/android/media/MediaCodec.java b/src/api-impl/android/media/MediaCodec.java index 5f64a92a..534cdf58 100644 --- a/src/api-impl/android/media/MediaCodec.java +++ b/src/api-impl/android/media/MediaCodec.java @@ -1,5 +1,6 @@ package android.media; +import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayDeque; @@ -20,9 +21,12 @@ public class MediaCodec { private Queue queuedInputBuffers; private Queue freeInputBuffers; - private MediaCodec(String codecName) { + private MediaCodec(String codecName) throws IOException { this.codecName = codecName; native_codec = native_constructor(codecName); + if (native_codec == 0) { + throw new IOException("Unable to create MediaCodec: " + codecName); + } inputBuffers = new ByteBuffer[1]; inputBufferTimestamps = new long[inputBuffers.length]; freeInputBuffers = new ArrayDeque<>(inputBuffers.length); @@ -39,7 +43,7 @@ public class MediaCodec { } } - public static MediaCodec createByCodecName(String codecName) { + public static MediaCodec createByCodecName(String codecName) throws IOException { return new MediaCodec(codecName); }