Chromium Code Reviews| Index: talk/app/webrtc/java/jni/surfacetexturehelper_jni.h |
| diff --git a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..49e2315236da4cc6e068a094af54dfda87190b40 |
| --- /dev/null |
| +++ b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h |
| @@ -0,0 +1,86 @@ |
| +/* |
| + * libjingle |
| + * Copyright 2015 Google Inc. |
| + * |
| + * Redistribution and use in source and binary forms, with or without |
| + * modification, are permitted provided that the following conditions are met: |
| + * |
| + * 1. Redistributions of source code must retain the above copyright notice, |
| + * this list of conditions and the following disclaimer. |
| + * 2. Redistributions in binary form must reproduce the above copyright notice, |
| + * this list of conditions and the following disclaimer in the documentation |
| + * and/or other materials provided with the distribution. |
| + * 3. The name of the author may not be used to endorse or promote products |
| + * derived from this software without specific prior written permission. |
| + * |
| + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
| + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
| + * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
| + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| + * |
| + */ |
| + |
| +#ifndef TALK_APP_WEBRTC_JAVA_JNI_SURFACETEXTUREHELPER_JNI_H_ |
| +#define TALK_APP_WEBRTC_JAVA_JNI_SURFACETEXTUREHELPER_JNI_H_ |
| + |
| +#include <jni.h> |
| + |
| +#include "talk/app/webrtc/java/jni/jni_helpers.h" |
| +#include "talk/app/webrtc/java/jni/native_handle_impl.h" |
| +#include "webrtc/base/refcount.h" |
| +#include "webrtc/base/scoped_ref_ptr.h" |
| +#include "webrtc/common_video/interface/video_frame_buffer.h" |
| + |
| +namespace webrtc_jni { |
| + |
| +// Helper class to create and synchronize access to an Android SurfaceTexture. |
| +// It is used for creating webrtc::VideoFrameBuffers from a SurfaceTexture when |
| +// the SurfaceTexture has been updated. |
| +// When the VideoFrameBuffer is released, this class returns the buffer to the |
| +// java SurfaceTextureHelper so it can be updated safely. The VideoFrameBuffer |
| +// can be released on an arbitrary thread. |
| +// SurfaceTextureHelper is reference counted to make sure that it is not |
| +// destroyed while a VideoFrameBuffer is in use. |
| +// This class is the C++ counterpart of the java class SurfaceTextureHelper. |
| +// Usage: |
| +// 1. Create an instance of this class. |
| +// 2. Call GetJavaSurfaceTextureHelper to get the Java SurfaceTextureHelper. |
| +// 3. Register a listener to the Java SurfaceListener and start producing |
| +// new buffers. |
| +// 3. Call CreateTextureFrame to wrap the Java texture in a VideoFrameBuffer. |
| +class SurfaceTextureHelper : public rtc::RefCountInterface { |
| + public: |
| + SurfaceTextureHelper(JNIEnv* jni, jobject shared_egl_context); |
| + |
| + // Returns the Java SurfaceTextureHelper. |
| + jobject GetJavaSurfaceTextureHelper() const { |
| + return *j_surface_texture_helper_; |
|
magjed_webrtc
2015/09/28 08:19:38
Maybe this should be moved in the .cc file?
|
| + } |
| + |
| + rtc::scoped_refptr<webrtc::VideoFrameBuffer> CreateTextureFrame( |
| + int width, |
| + int height, |
| + const NativeHandleImpl& native_handle); |
| + |
| + protected: |
| + ~SurfaceTextureHelper(); |
| + |
| + private: |
| + class TextureBuffer; |
| + // May be called on arbitrary thread. |
| + void ReturnTextureFrame() const; |
| + |
| + const ScopedGlobalRef<jclass> j_surface_texture_helper_class_; |
| + const ScopedGlobalRef<jobject> j_surface_texture_helper_; |
| + const jmethodID j_return_texture_method_; |
| +}; |
| + |
| +} // namespace webrtc_jni |
| + |
| +#endif // TALK_APP_WEBRTC_JAVA_JNI_SURFACETEXTUREHELPER_JNI_H_ |