Revert of Android: Put common native VideoFrameBuffer implementation in androidvideocapturer_jni (patchset #1 id:1 of https://codereview.webrtc.org/1391403004/ )

Reason for revert:
Crashes on AppRTCDemo disconnect

Original issue's description:
> Android: Put common native VideoFrameBuffer implementation in native_handle_impl.cc
>
> BUG=webrtc:4993
> R=perkj@webrtc.org
>
> Committed: https://crrev.com/60472216da0644b49ed5f9fa51c51d4874afafa7
> Cr-Commit-Position: refs/heads/master@{#10248}

TBR=perkj@webrtc.org
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:4993

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

Cr-Commit-Position: refs/heads/master@{#10249}
diff --git a/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc b/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc
index 6d4891e..45396b6 100644
--- a/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc
+++ b/talk/app/webrtc/java/jni/androidvideocapturer_jni.cc
@@ -34,6 +34,34 @@
 
 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
@@ -185,7 +213,7 @@
                                              int64_t timestamp_ns,
                                              const NativeHandleImpl& handle) {
   rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer(
-      new rtc::RefCountedObject<AndroidTextureBuffer>(
+      new rtc::RefCountedObject<CameraTextureBuffer>(
           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 ed9ad8e..98af4d8 100644
--- a/talk/app/webrtc/java/jni/native_handle_impl.cc
+++ b/talk/app/webrtc/java/jni/native_handle_impl.cc
@@ -44,24 +44,4 @@
   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 16d3d7c..370039e 100644
--- a/talk/app/webrtc/java/jni/native_handle_impl.h
+++ b/talk/app/webrtc/java/jni/native_handle_impl.h
@@ -31,8 +31,6 @@
 
 #include <jni.h>
 
-#include "webrtc/common_video/interface/video_frame_buffer.h"
-
 namespace webrtc_jni {
 
 // Wrapper for texture object.
@@ -45,20 +43,6 @@
   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 ad1db1a..d161aa4 100644
--- a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.cc
+++ b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.cc
@@ -30,11 +30,35 @@
 #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_(
@@ -69,9 +93,8 @@
 rtc::scoped_refptr<webrtc::VideoFrameBuffer>
 SurfaceTextureHelper::CreateTextureFrame(int width, int height,
     const NativeHandleImpl& native_handle) {
-  return new rtc::RefCountedObject<AndroidTextureBuffer>(
-      width, height, native_handle,
-      rtc::Bind(&SurfaceTextureHelper::ReturnTextureFrame, this));
+  return new rtc::RefCountedObject<TextureBuffer>(
+      width, height, this, native_handle);
 }
 
 }  // namespace webrtc_jni
diff --git a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h
index 5bd94b5..49e2315 100644
--- a/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h
+++ b/talk/app/webrtc/java/jni/surfacetexturehelper_jni.h
@@ -72,6 +72,7 @@
   ~SurfaceTextureHelper();
 
  private:
+  class TextureBuffer;
   //  May be called on arbitrary thread.
   void ReturnTextureFrame() const;