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:
Magnus Jedvert
2015-10-07 22:57:06 +02:00
parent 87962a9787
commit 91b348c702
8 changed files with 163 additions and 166 deletions

View File

@ -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