From 894c400c61db94e3f7bdb2a9e9bbbce40dd1da86 Mon Sep 17 00:00:00 2001 From: Magnus Jedvert Date: Fri, 21 Oct 2016 15:05:01 +0200 Subject: [PATCH] Android VideoFileRenderer: Wait for posted frames in release() We need to wait for posted frames to be rendered first in release() instead of abruptly quitting, in order to simplify testing. BUG=webrtc:6545 R=sakal@webrtc.org Review URL: https://codereview.webrtc.org/2440703002 . Cr-Commit-Position: refs/heads/master@{#14722} --- .../java/src/org/webrtc/VideoFileRenderer.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java b/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java index 613ed1aaaf..1ad3a5936e 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,