Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(815)

Unified Diff: webrtc/api/android/java/src/org/webrtc/VideoFileRenderer.java

Issue 2436653003: Android YuvConverter: Use OpenGL Framebuffer instead of EGL pixel buffer (Closed)
Patch Set: Rebase against VideoFileRenderer Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698