Android MediaCodecVideoDecoder: Manage lifetime of texture frames
This CL should be the last one in a series to finally unblock camera texture capture. The SurfaceTexture.updateTexImage() calls are moved from the video renderers into MediaCodecVideoDecoder, and the destructor of the texture frames will signal MediaCodecVideoDecoder that the frame has returned. This CL also removes the SurfaceTexture from the native handle and only exposes the texture matrix instead, because only the video source should access the SurfaceTexture. BUG=webrtc:4993 R=glaznev@webrtc.org, perkj@webrtc.org Review URL: https://codereview.webrtc.org/1378033003 . Cr-Commit-Position: refs/heads/master@{#10203}
This commit is contained in:
@ -31,32 +31,17 @@
|
||||
|
||||
namespace webrtc_jni {
|
||||
|
||||
NativeHandleImpl::NativeHandleImpl() : texture_object_(NULL), texture_id_(-1) {}
|
||||
|
||||
void* NativeHandleImpl::GetHandle() {
|
||||
return texture_object_;
|
||||
}
|
||||
|
||||
int NativeHandleImpl::GetTextureId() {
|
||||
return texture_id_;
|
||||
}
|
||||
|
||||
void NativeHandleImpl::SetTextureObject(void* texture_object, int texture_id) {
|
||||
texture_object_ = reinterpret_cast<jobject>(texture_object);
|
||||
texture_id_ = texture_id;
|
||||
}
|
||||
|
||||
JniNativeHandleBuffer::JniNativeHandleBuffer(void* native_handle,
|
||||
int width,
|
||||
int height)
|
||||
: NativeHandleBuffer(native_handle, width, height) {}
|
||||
|
||||
rtc::scoped_refptr<webrtc::VideoFrameBuffer>
|
||||
JniNativeHandleBuffer::NativeToI420Buffer() {
|
||||
// TODO(pbos): Implement before using this in the encoder pipeline (or
|
||||
// remove the RTC_CHECK() in VideoCapture).
|
||||
RTC_NOTREACHED();
|
||||
return nullptr;
|
||||
NativeHandleImpl::NativeHandleImpl(JNIEnv* jni,
|
||||
jint j_oes_texture_id,
|
||||
jfloatArray j_transform_matrix)
|
||||
: oes_texture_id(j_oes_texture_id) {
|
||||
RTC_CHECK_EQ(16, jni->GetArrayLength(j_transform_matrix));
|
||||
jfloat* transform_matrix_ptr =
|
||||
jni->GetFloatArrayElements(j_transform_matrix, nullptr);
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
sampling_matrix[i] = transform_matrix_ptr[i];
|
||||
}
|
||||
jni->ReleaseFloatArrayElements(j_transform_matrix, transform_matrix_ptr, 0);
|
||||
}
|
||||
|
||||
} // namespace webrtc_jni
|
||||
|
||||
Reference in New Issue
Block a user