| Index: webrtc/api/android/jni/androidmediadecoder_jni.cc
|
| diff --git a/webrtc/api/android/jni/androidmediadecoder_jni.cc b/webrtc/api/android/jni/androidmediadecoder_jni.cc
|
| index 2a7e68976aff881386d4ab363cebf30311080782..96c0fc2f7cbae92130f69d6313d3acdf93e84f3e 100644
|
| --- a/webrtc/api/android/jni/androidmediadecoder_jni.cc
|
| +++ b/webrtc/api/android/jni/androidmediadecoder_jni.cc
|
| @@ -782,7 +782,9 @@ bool MediaCodecVideoDecoder::DeliverPendingOutputs(
|
| payload += output_buffer_offset;
|
|
|
| // Create yuv420 frame.
|
| - frame_buffer = decoded_frame_pool_.CreateBuffer(width, height);
|
| + rtc::scoped_refptr<webrtc::I420Buffer> i420_buffer;
|
| +
|
| + i420_buffer = decoded_frame_pool_.CreateBuffer(width, height);
|
| if (color_format == COLOR_FormatYUV420Planar) {
|
| RTC_CHECK_EQ(0, stride % 2);
|
| RTC_CHECK_EQ(0, slice_height % 2);
|
| @@ -791,31 +793,23 @@ bool MediaCodecVideoDecoder::DeliverPendingOutputs(
|
| const uint8_t* y_ptr = payload;
|
| const uint8_t* u_ptr = y_ptr + stride * slice_height;
|
| const uint8_t* v_ptr = u_ptr + uv_stride * u_slice_height;
|
| - libyuv::I420Copy(y_ptr, stride,
|
| - u_ptr, uv_stride,
|
| - v_ptr, uv_stride,
|
| - frame_buffer->MutableDataY(),
|
| - frame_buffer->StrideY(),
|
| - frame_buffer->MutableDataU(),
|
| - frame_buffer->StrideU(),
|
| - frame_buffer->MutableDataV(),
|
| - frame_buffer->StrideV(),
|
| + libyuv::I420Copy(y_ptr, stride, u_ptr, uv_stride, v_ptr, uv_stride,
|
| + i420_buffer->MutableDataY(), i420_buffer->StrideY(),
|
| + i420_buffer->MutableDataU(), i420_buffer->StrideU(),
|
| + i420_buffer->MutableDataV(), i420_buffer->StrideV(),
|
| width, height);
|
| } else {
|
| // All other supported formats are nv12.
|
| const uint8_t* y_ptr = payload;
|
| const uint8_t* uv_ptr = y_ptr + stride * slice_height;
|
| - libyuv::NV12ToI420(
|
| - y_ptr, stride,
|
| - uv_ptr, stride,
|
| - frame_buffer->MutableDataY(),
|
| - frame_buffer->StrideY(),
|
| - frame_buffer->MutableDataU(),
|
| - frame_buffer->StrideU(),
|
| - frame_buffer->MutableDataV(),
|
| - frame_buffer->StrideV(),
|
| - width, height);
|
| + libyuv::NV12ToI420(y_ptr, stride, uv_ptr, stride,
|
| + i420_buffer->MutableDataY(), i420_buffer->StrideY(),
|
| + i420_buffer->MutableDataU(), i420_buffer->StrideU(),
|
| + i420_buffer->MutableDataV(), i420_buffer->StrideV(),
|
| + width, height);
|
| }
|
| + frame_buffer = i420_buffer;
|
| +
|
| // Return output byte buffer back to codec.
|
| jni->CallVoidMethod(
|
| *j_media_codec_video_decoder_,
|
|
|