
This CL makes the following changes: * Instead of creating a new thread per startCapture()/stopCapture() cycle, VideoCapturerAndroid has a single thread that is initialized in the constructor and kept during the lifetime of the instance. This is more convenient because then it is always possible to post runnables without if-checks. This way, a lot of synchronize statements can be removed. Also, when the camera thread is preserved after stopCapture() it is possible to post late returnBuffer() calls to the correct thread. * FramePool now enforces single thread use and returnBuffer() calls are posted to the camera thread. This is important because the camera should only be used from one thread, and we call camera.addCallbackBuffer() in returnBuffer(). * switchCamera() no longer returns false on failure, but instead signals the result via the callback. * Update the test testCaptureAndAsyncRender() - it's not a valid use case to have outstanding frames when calling PeerConnectionFactory.dispose(). Instead, the renderer implementations should have release() functions that block until all frames are returned. The release() functions need to be called in the correct order with PeerConnectionFactory.dispose() last. BUG=webrtc:4909 R=hbos@webrtc.org, perkj@webrtc.org Review URL: https://codereview.webrtc.org/1350863002 . Cr-Commit-Position: refs/heads/master@{#10025}
This directory holds a Java implementation of the webrtc::PeerConnection API, as well as the JNI glue C++ code that lets the Java implementation reuse the C++ implementation of the same API. To build the Java API and related tests, build with OS=linux or OS=android and include build_with_libjingle=1 build_with_chromium=0 in $GYP_DEFINES. To use the Java API, start by looking at the public interface of org.webrtc.PeerConnection{,Factory} and the org.webrtc.PeerConnectionTest. To understand the implementation of the API, see the native code in jni/. An example command-line to build & run the unittest: cd path/to/trunk GYP_DEFINES="build_with_libjingle=1 build_with_chromium=0 java_home=path/to/JDK" gclient runhooks && \ ninja -C out/Debug libjingle_peerconnection_java_unittest && \ ./out/Debug/libjingle_peerconnection_java_unittest (where path/to/JDK should contain include/jni.h) During development it can be helpful to run the JVM with the -Xcheck:jni flag.