Index: webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java |
diff --git a/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java b/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java |
index 613ed1aaaf5f337845dc3c96dbfa64063cf11d78..1ad3a5936eba8c92f7353796e28728f9466d2c9a 100644 |
--- a/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java |
+++ b/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java |
@@ -11,10 +11,10 @@ package org.webrtc; |
import android.os.Handler; |
import android.os.HandlerThread; |
- |
-import java.nio.ByteBuffer; |
import java.io.FileOutputStream; |
import java.io.IOException; |
+import java.nio.ByteBuffer; |
+import java.util.concurrent.CountDownLatch; |
/** |
* Can be used to save the video frames to file. |
@@ -121,8 +121,12 @@ public class VideoFileRenderer implements VideoRenderer.Callbacks { |
} |
} |
+ /** |
+ * Release all resources. All already posted frames will be rendered first. |
+ */ |
public void release() { |
- ThreadUtils.invokeAtFrontUninterruptibly(renderThreadHandler, new Runnable() { |
+ final CountDownLatch cleanupBarrier = new CountDownLatch(1); |
+ renderThreadHandler.post(new Runnable() { |
@Override |
public void run() { |
try { |
@@ -133,8 +137,10 @@ public class VideoFileRenderer implements VideoRenderer.Callbacks { |
yuvConverter.release(); |
eglBase.release(); |
renderThread.quit(); |
+ cleanupBarrier.countDown(); |
} |
}); |
+ ThreadUtils.awaitUninterruptibly(cleanupBarrier); |
} |
public static native void nativeI420Scale(ByteBuffer srcY, int strideY, ByteBuffer srcU, |