Fix incorrect stride information reported by some HW decoders.

BUG=webrtc:4787

Review URL: https://codereview.webrtc.org/1767733002

Cr-Commit-Position: refs/heads/master@{#11915}
This commit is contained in:
glaznev
2016-03-08 10:35:33 -08:00
committed by Commit bot
parent 295c4c276b
commit 3816bfd87b

View File

@ -767,6 +767,12 @@ bool MediaCodecVideoDecoder::DeliverPendingOutputs(
ALOGE << "Insufficient output buffer size: " << output_buffer_size; ALOGE << "Insufficient output buffer size: " << output_buffer_size;
return false; return false;
} }
if (output_buffer_size < stride * height * 3 / 2 &&
slice_height == height && stride > width) {
// Some codecs (Exynos) incorrectly report stride information for
// output byte buffer, so actual stride value need to be corrected.
stride = output_buffer_size * 2 / (height * 3);
}
jobjectArray output_buffers = reinterpret_cast<jobjectArray>(GetObjectField( jobjectArray output_buffers = reinterpret_cast<jobjectArray>(GetObjectField(
jni, *j_media_codec_video_decoder_, j_output_buffers_field_)); jni, *j_media_codec_video_decoder_, j_output_buffers_field_));
jobject output_buffer = jobject output_buffer =