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}
This commit is contained in:
@ -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 @@ void AndroidVideoCapturerJni::OnTextureFrame(int width,
|
||||
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)));
|
||||
|
||||
@ -44,24 +44,4 @@ NativeHandleImpl::NativeHandleImpl(JNIEnv* jni,
|
||||
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
|
||||
|
||||
@ -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 @@ struct NativeHandleImpl {
|
||||
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_
|
||||
|
||||
@ -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 @@ void SurfaceTextureHelper::ReturnTextureFrame() const {
|
||||
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
|
||||
|
||||
@ -72,6 +72,7 @@ class SurfaceTextureHelper : public rtc::RefCountInterface {
|
||||
~SurfaceTextureHelper();
|
||||
|
||||
private:
|
||||
class TextureBuffer;
|
||||
// May be called on arbitrary thread.
|
||||
void ReturnTextureFrame() const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user