Android: Put common native VideoFrameBuffer implementation in native_handle_impl.cc

BUG=webrtc:4993
R=perkj@webrtc.org

Review URL: https://codereview.webrtc.org/1391403004 .

Cr-Commit-Position: refs/heads/master@{#10248}
diff --git a/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc b/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc
index 45396b6..6d4891e 100644
--- a/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc
+++ b/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc
@@ -34,34 +34,6 @@
 
 namespace webrtc_jni {
 
-namespace {
-
-class CameraTextureBuffer : public webrtc::NativeHandleBuffer {
- public:
-  CameraTextureBuffer(int width, int height,
-      const NativeHandleImpl& native_handle,
-      const rtc::Callback0<void>& no_longer_used)
-      : webrtc::NativeHandleBuffer(&native_handle_, width, height),
-        native_handle_(native_handle),
-        no_longer_used_cb_(no_longer_used) {}
-
-  ~CameraTextureBuffer() {
-    no_longer_used_cb_();
-  }
-
-  rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override {
-    RTC_NOTREACHED()
-        << "CameraTextureBuffer::NativeToI420Buffer not implemented.";
-    return nullptr;
-  }
-
- private:
-  NativeHandleImpl native_handle_;
-  rtc::Callback0<void> no_longer_used_cb_;
-};
-
-}  // anonymous namespace
-
 jobject AndroidVideoCapturerJni::application_context_ = nullptr;
 
 // static
@@ -213,7 +185,7 @@
                                              int64_t timestamp_ns,
                                              const NativeHandleImpl& handle) {
   rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer(
-      new rtc::RefCountedObject<CameraTextureBuffer>(
+      new rtc::RefCountedObject<AndroidTextureBuffer>(
           width, height, handle,
           rtc::Bind(&AndroidVideoCapturerJni::ReturnBuffer, this,
                     timestamp_ns)));
diff --git a/talk/app/webrtc/java/jni/native_handle_impl.cc b/talk/app/webrtc/java/jni/native_handle_impl.cc
index 98af4d8..ed9ad8e 100644
--- a/talk/app/webrtc/java/jni/native_handle_impl.cc
+++ b/talk/app/webrtc/java/jni/native_handle_impl.cc
@@ -44,4 +44,24 @@
   jni->ReleaseFloatArrayElements(j_transform_matrix, transform_matrix_ptr, 0);
 }
 
+AndroidTextureBuffer::AndroidTextureBuffer(
+    int width,
+    int height,
+    const NativeHandleImpl& native_handle,
+    const rtc::Callback0<void>& no_longer_used)
+    : webrtc::NativeHandleBuffer(&native_handle_, width, height),
+      native_handle_(native_handle),
+      no_longer_used_cb_(no_longer_used) {}
+
+AndroidTextureBuffer::~AndroidTextureBuffer() {
+  no_longer_used_cb_();
+}
+
+rtc::scoped_refptr<webrtc::VideoFrameBuffer>
+AndroidTextureBuffer::NativeToI420Buffer() {
+  RTC_NOTREACHED()
+      << "AndroidTextureBuffer::NativeToI420Buffer not implemented.";
+  return nullptr;
+}
+
 }  // namespace webrtc_jni
diff --git a/talk/app/webrtc/java/jni/native_handle_impl.h b/talk/app/webrtc/java/jni/native_handle_impl.h
index 370039e..16d3d7c 100644
--- a/talk/app/webrtc/java/jni/native_handle_impl.h
+++ b/talk/app/webrtc/java/jni/native_handle_impl.h
@@ -31,6 +31,8 @@
 
 #include <jni.h>
 
+#include "webrtc/common_video/interface/video_frame_buffer.h"
+
 namespace webrtc_jni {
 
 // Wrapper for texture object.
@@ -43,6 +45,20 @@
   float sampling_matrix[16];
 };
 
+class AndroidTextureBuffer : public webrtc::NativeHandleBuffer {
+ public:
+  AndroidTextureBuffer(int width,
+                       int height,
+                       const NativeHandleImpl& native_handle,
+                       const rtc::Callback0<void>& no_longer_used);
+  ~AndroidTextureBuffer();
+  rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override;
+
+ private:
+  NativeHandleImpl native_handle_;
+  rtc::Callback0<void> no_longer_used_cb_;
+};
+
 }  // namespace webrtc_jni
 
 #endif  // TALK_APP_WEBRTC_JAVA_JNI_NATIVE_HANDLE_IMPL_H_
diff --git a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.cc b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.cc
index d161aa4..ad1db1a 100644
--- a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.cc
+++ b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.cc
@@ -30,35 +30,11 @@
 #include "talk/app/webrtc/java/jni/surfacetexturehelper_jni.h"
 
 #include "talk/app/webrtc/java/jni/classreferenceholder.h"
+#include "webrtc/base/bind.h"
 #include "webrtc/base/checks.h"
 
 namespace webrtc_jni {
 
-class SurfaceTextureHelper::TextureBuffer : public webrtc::NativeHandleBuffer {
- public:
-  TextureBuffer(int width,
-                int height,
-                const rtc::scoped_refptr<SurfaceTextureHelper>& pool,
-                const NativeHandleImpl& native_handle)
-      : webrtc::NativeHandleBuffer(&native_handle_, width, height),
-        native_handle_(native_handle),
-        pool_(pool) {}
-
-  ~TextureBuffer() {
-    pool_->ReturnTextureFrame();
-  }
-
-  rtc::scoped_refptr<VideoFrameBuffer> NativeToI420Buffer() override {
-    RTC_NOTREACHED()
-        << "SurfaceTextureHelper::NativeToI420Buffer not implemented.";
-    return nullptr;
-  }
-
- private:
-  NativeHandleImpl native_handle_;
-  const rtc::scoped_refptr<SurfaceTextureHelper> pool_;
-};
-
 SurfaceTextureHelper::SurfaceTextureHelper(JNIEnv* jni,
                                            jobject egl_shared_context)
     : j_surface_texture_helper_class_(
@@ -93,8 +69,9 @@
 rtc::scoped_refptr<webrtc::VideoFrameBuffer>
 SurfaceTextureHelper::CreateTextureFrame(int width, int height,
     const NativeHandleImpl& native_handle) {
-  return new rtc::RefCountedObject<TextureBuffer>(
-      width, height, this, native_handle);
+  return new rtc::RefCountedObject<AndroidTextureBuffer>(
+      width, height, native_handle,
+      rtc::Bind(&SurfaceTextureHelper::ReturnTextureFrame, this));
 }
 
 }  // namespace webrtc_jni
diff --git a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h
index 49e2315..5bd94b5 100644
--- a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h
+++ b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h
@@ -72,7 +72,6 @@
   ~SurfaceTextureHelper();
 
  private:
-  class TextureBuffer;
   //  May be called on arbitrary thread.
   void ReturnTextureFrame() const;