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

Unified Diff: webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java

Issue 1738123002: Java SurfaceTextureHelper: Remove support for external thread (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 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/java/android/org/webrtc/SurfaceTextureHelper.java
diff --git a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
index 4b1dda61d0ac3a1dd688ff1ed81e6de4090e3f04..178104710797a4c96cc72c032933cb9de924c318 100644
--- a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
+++ b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
@@ -48,32 +48,23 @@ class SurfaceTextureHelper {
int oesTextureId, float[] transformMatrix, long timestampNs);
}
- public static SurfaceTextureHelper create(EglBase.Context sharedContext) {
- return create(sharedContext, null);
- }
-
/**
- * Construct a new SurfaceTextureHelper sharing OpenGL resources with |sharedContext|. If
- * |handler| is non-null, the callback will be executed on that handler's thread. If |handler| is
- * null, a dedicated private thread is created for the callbacks.
+ * Construct a new SurfaceTextureHelper sharing OpenGL resources with |sharedContext|. A dedicated
+ * thread and handler is created for handling the SurfaceTexture.
*/
- public static SurfaceTextureHelper create(final EglBase.Context sharedContext,
- final Handler handler) {
- final Handler finalHandler;
- if (handler != null) {
- finalHandler = handler;
- } else {
- final HandlerThread thread = new HandlerThread(TAG);
- thread.start();
- finalHandler = new Handler(thread.getLooper());
- }
+ public static SurfaceTextureHelper create(final EglBase.Context sharedContext) {
+ final HandlerThread thread = new HandlerThread(TAG);
+ thread.start();
+ final Handler handler = new Handler(thread.getLooper());
+
// The onFrameAvailable() callback will be executed on the SurfaceTexture ctor thread. See:
// http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/graphics/SurfaceTexture.java#195.
// Therefore, in order to control the callback thread on API lvl < 21, the SurfaceTextureHelper
// is constructed on the |handler| thread.
- return ThreadUtils.invokeUninterruptibly(finalHandler, new Callable<SurfaceTextureHelper>() {
- @Override public SurfaceTextureHelper call() {
- return new SurfaceTextureHelper(sharedContext, finalHandler, (handler == null));
+ return ThreadUtils.invokeUninterruptibly(handler, new Callable<SurfaceTextureHelper>() {
+ @Override
+ public SurfaceTextureHelper call() {
+ return new SurfaceTextureHelper(sharedContext, handler);
}
});
}
@@ -291,7 +282,6 @@ class SurfaceTextureHelper {
}
private final Handler handler;
- private boolean isOwningThread;
private final EglBase eglBase;
private final SurfaceTexture surfaceTexture;
private final int oesTextureId;
@@ -303,13 +293,11 @@ class SurfaceTextureHelper {
private volatile boolean isTextureInUse = false;
private boolean isQuitting = false;
- private SurfaceTextureHelper(EglBase.Context sharedContext,
- Handler handler, boolean isOwningThread) {
+ private SurfaceTextureHelper(EglBase.Context sharedContext, Handler handler) {
if (handler.getLooper().getThread() != Thread.currentThread()) {
throw new IllegalStateException("SurfaceTextureHelper must be created on the handler thread");
}
this.handler = handler;
- this.isOwningThread = isOwningThread;
eglBase = EglBase.create(sharedContext, EglBase.CONFIG_PIXEL_BUFFER);
eglBase.createDummyPbufferSurface();
@@ -358,6 +346,14 @@ class SurfaceTextureHelper {
}
/**
+ * Retrieve the handler that calls onTextureFrameAvailable(). This handler is valid until
+ * disconnect() is called.
+ */
+ public Handler getHandler() {
+ return handler;
+ }
+
+ /**
* Call this function to signal that you are done with the frame received in
* onTextureFrameAvailable(). Only one texture frame can be in flight at once, so you must call
* this function in order to receive a new frame.
@@ -380,14 +376,11 @@ class SurfaceTextureHelper {
}
/**
- * Call disconnect() to stop receiving frames. Resources are released when the texture frame has
- * been returned by a call to returnTextureFrame(). You are guaranteed to not receive any more
- * onTextureFrameAvailable() after this function returns.
+ * Call disconnect() to stop receiving frames. OpenGL resources are released and the handler is
+ * stopped when the texture frame has been returned by a call to returnTextureFrame(). You are
+ * guaranteed to not receive any more onTextureFrameAvailable() after this function returns.
*/
public void disconnect() {
- if (!isOwningThread) {
- throw new IllegalStateException("Must call disconnect(handler).");
- }
if (handler.getLooper().getThread() == Thread.currentThread()) {
isQuitting = true;
if (!isTextureInUse) {
@@ -408,20 +401,6 @@ class SurfaceTextureHelper {
ThreadUtils.awaitUninterruptibly(barrier);
}
- /**
- * Call disconnect() to stop receiving frames and quit the looper used by |handler|.
- * Resources are released when the texture frame has been returned by a call to
- * returnTextureFrame(). You are guaranteed to not receive any more
- * onTextureFrameAvailable() after this function returns.
- */
- public void disconnect(Handler handler) {
- if (this.handler != handler) {
- throw new IllegalStateException("Wrong handler.");
- }
- isOwningThread = true;
- disconnect();
- }
-
public void textureToYUV(ByteBuffer buf,
int width, int height, int stride, int textureId, float [] transformMatrix) {
if (textureId != oesTextureId)

Powered by Google App Engine
This is Rietveld 408576698