| Index: talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| diff --git a/talk/app/webrtc/java/jni/peerconnection_jni.cc b/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| index bf0f0066294c5c9d77a5ebabc0ef2bf5d16a788b..cebe8ca9be9b93845fa109a59db3539920e46f62 100644
|
| --- a/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| +++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc
|
| @@ -746,10 +746,10 @@ class JavaVideoRendererWrapper : public VideoRendererInterface {
|
| j_frame_class_(jni,
|
| FindClass(jni, "org/webrtc/VideoRenderer$I420Frame")),
|
| j_i420_frame_ctor_id_(GetMethodID(
|
| - jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;)V")),
|
| + jni, *j_frame_class_, "<init>", "(III[I[Ljava/nio/ByteBuffer;J)V")),
|
| j_texture_frame_ctor_id_(GetMethodID(
|
| jni, *j_frame_class_, "<init>",
|
| - "(IIILjava/lang/Object;I)V")),
|
| + "(IIILjava/lang/Object;IJ)V")),
|
| j_byte_buffer_class_(jni, FindClass(jni, "java/nio/ByteBuffer")),
|
| can_apply_rotation_set_(false),
|
| can_apply_rotation_(false) {
|
| @@ -767,6 +767,9 @@ class JavaVideoRendererWrapper : public VideoRendererInterface {
|
| const cricket::VideoFrame* frame =
|
| can_apply_rotation_ ? video_frame
|
| : video_frame->GetCopyWithRotationApplied();
|
| + // Make a shallow copy. |j_callbacks_| is responsible for releasing the
|
| + // copy by calling VideoRenderer.renderFrameDone().
|
| + frame = frame->Copy();
|
| if (frame->GetNativeHandle() != NULL) {
|
| jobject j_frame = CricketToJavaTextureFrame(frame);
|
| jni()->CallVoidMethod(*j_callbacks_, j_render_frame_id_, j_frame);
|
| @@ -817,7 +820,7 @@ class JavaVideoRendererWrapper : public VideoRendererInterface {
|
| *j_frame_class_, j_i420_frame_ctor_id_,
|
| frame->GetWidth(), frame->GetHeight(),
|
| static_cast<int>(frame->GetVideoRotation()),
|
| - strides, planes);
|
| + strides, planes, frame);
|
| }
|
|
|
| // Return a VideoRenderer.I420Frame referring texture object in |frame|.
|
| @@ -830,7 +833,7 @@ class JavaVideoRendererWrapper : public VideoRendererInterface {
|
| *j_frame_class_, j_texture_frame_ctor_id_,
|
| frame->GetWidth(), frame->GetHeight(),
|
| static_cast<int>(frame->GetVideoRotation()),
|
| - texture_object, texture_id);
|
| + texture_object, texture_id, frame);
|
| }
|
|
|
| JNIEnv* jni() {
|
| @@ -954,6 +957,11 @@ JOW(void, VideoRenderer_freeWrappedVideoRenderer)(JNIEnv*, jclass, jlong j_p) {
|
| delete reinterpret_cast<JavaVideoRendererWrapper*>(j_p);
|
| }
|
|
|
| +JOW(void, VideoRenderer_releaseNativeFrame)(
|
| + JNIEnv* jni, jclass, jlong j_frame_ptr) {
|
| + delete reinterpret_cast<const cricket::VideoFrame*>(j_frame_ptr);
|
| +}
|
| +
|
| JOW(void, MediaStreamTrack_free)(JNIEnv*, jclass, jlong j_p) {
|
| CHECK_RELEASE(reinterpret_cast<MediaStreamTrackInterface*>(j_p));
|
| }
|
|
|