| 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 b76d1900b5ee8c901fb1cbdd763a11901f0d8a88..613ed1aaaf5f337845dc3c96dbfa64063cf11d78 100644
|
| --- a/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java
|
| +++ b/webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java
|
| @@ -15,7 +15,6 @@ import android.os.HandlerThread;
|
| import java.nio.ByteBuffer;
|
| import java.io.FileOutputStream;
|
| import java.io.IOException;
|
| -import java.util.concurrent.CountDownLatch;
|
|
|
| /**
|
| * Can be used to save the video frames to file.
|
| @@ -23,7 +22,6 @@ import java.util.concurrent.CountDownLatch;
|
| public class VideoFileRenderer implements VideoRenderer.Callbacks {
|
| private static final String TAG = "VideoFileRenderer";
|
|
|
| - private final YuvConverter yuvConverter;
|
| private final HandlerThread renderThread;
|
| private final Object handlerLock = new Object();
|
| private final Handler renderThreadHandler;
|
| @@ -32,13 +30,14 @@ public class VideoFileRenderer implements VideoRenderer.Callbacks {
|
| private final int outputFileHeight;
|
| private final int outputFrameSize;
|
| private final ByteBuffer outputFrameBuffer;
|
| + private EglBase eglBase;
|
| + private YuvConverter yuvConverter;
|
|
|
| public VideoFileRenderer(String outputFile, int outputFileWidth, int outputFileHeight,
|
| - EglBase.Context sharedContext) throws IOException {
|
| + final EglBase.Context sharedContext) throws IOException {
|
| if ((outputFileWidth % 2) == 1 || (outputFileHeight % 2) == 1) {
|
| throw new IllegalArgumentException("Does not support uneven width or height");
|
| }
|
| - yuvConverter = new YuvConverter(sharedContext);
|
|
|
| this.outputFileWidth = outputFileWidth;
|
| this.outputFileHeight = outputFileHeight;
|
| @@ -54,6 +53,16 @@ public class VideoFileRenderer implements VideoRenderer.Callbacks {
|
| renderThread = new HandlerThread(TAG);
|
| renderThread.start();
|
| renderThreadHandler = new Handler(renderThread.getLooper());
|
| +
|
| + ThreadUtils.invokeAtFrontUninterruptibly(renderThreadHandler, new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + eglBase = EglBase.create(sharedContext, EglBase.CONFIG_PIXEL_BUFFER);
|
| + eglBase.createDummyPbufferSurface();
|
| + eglBase.makeCurrent();
|
| + yuvConverter = new YuvConverter();
|
| + }
|
| + });
|
| }
|
|
|
| @Override
|
| @@ -113,8 +122,7 @@ public class VideoFileRenderer implements VideoRenderer.Callbacks {
|
| }
|
|
|
| public void release() {
|
| - final CountDownLatch cleanupBarrier = new CountDownLatch(1);
|
| - renderThreadHandler.post(new Runnable() {
|
| + ThreadUtils.invokeAtFrontUninterruptibly(renderThreadHandler, new Runnable() {
|
| @Override
|
| public void run() {
|
| try {
|
| @@ -122,11 +130,11 @@ public class VideoFileRenderer implements VideoRenderer.Callbacks {
|
| } catch (IOException e) {
|
| Logging.d(TAG, "Error closing output video file");
|
| }
|
| - cleanupBarrier.countDown();
|
| + yuvConverter.release();
|
| + eglBase.release();
|
| + renderThread.quit();
|
| }
|
| });
|
| - ThreadUtils.awaitUninterruptibly(cleanupBarrier);
|
| - renderThread.quit();
|
| }
|
|
|
| public static native void nativeI420Scale(ByteBuffer srcY, int strideY, ByteBuffer srcU,
|
|
|