prevent reference cycles between Java and native objects

This commit is contained in:
Julian Winkler
2024-07-26 21:47:08 +02:00
parent 45801d8f17
commit e3c0931714
30 changed files with 257 additions and 181 deletions

View File

@@ -18,6 +18,7 @@ public class MediaCodec {
private long native_codec;
private boolean outputFormatSet = false;
private MediaFormat mediaFormat;
private boolean isReleased = false;
private Queue<Integer> freeOutputBuffers;
private Queue<Integer> queuedInputBuffers;
@@ -148,6 +149,19 @@ public class MediaCodec {
public void release() {
System.out.println("MediaCodec.release(): codecName=" + codecName);
native_release(native_codec);
isReleased = true;
}
@Override
@SuppressWarnings("deprecation")
protected void finalize() throws Throwable {
try {
super.finalize();
} finally {
if (!isReleased) {
release();
}
}
}
private native long native_constructor(String codecName);