add missing null pointer check in MediaCodec.release()

When the MediaCodec failed to initialize, the native_codec pointer can
be null and releasing it would cause a SEGFAULT in native code.
This commit is contained in:
Julian Winkler
2024-10-22 18:05:09 +02:00
parent 5eb750b253
commit bcdf3eb3ce

View File

@@ -18,7 +18,6 @@ public class MediaCodec {
private long native_codec; private long native_codec;
private boolean outputFormatSet = false; private boolean outputFormatSet = false;
private MediaFormat mediaFormat; private MediaFormat mediaFormat;
private boolean isReleased = false;
private Queue<Integer> freeOutputBuffers; private Queue<Integer> freeOutputBuffers;
private Queue<Integer> queuedInputBuffers; private Queue<Integer> queuedInputBuffers;
@@ -148,8 +147,9 @@ public class MediaCodec {
public void release() { public void release() {
System.out.println("MediaCodec.release(): codecName=" + codecName); System.out.println("MediaCodec.release(): codecName=" + codecName);
if (native_codec != 0)
native_release(native_codec); native_release(native_codec);
isReleased = true; native_codec = 0;
} }
@Override @Override
@@ -158,11 +158,9 @@ public class MediaCodec {
try { try {
super.finalize(); super.finalize();
} finally { } finally {
if (!isReleased) {
release(); release();
} }
} }
}
private native long native_constructor(String codecName); private native long native_constructor(String codecName);
private native void native_configure_audio(long codec, ByteBuffer extradata, int sampleRate, int channelCount); private native void native_configure_audio(long codec, ByteBuffer extradata, int sampleRate, int channelCount);