vlc | branch: master | Thomas Guillem <[email protected]> | Thu Mar 31 16:47:51 2016 +0200| [ce4d099e11a345af01b978cc4f0ff6ed3a9b9e62] | committer: Thomas Guillem
mediacodec: the first mp4v input must be an I-Frame When activating a video-es in the middle of playback, the first input buffer is not necessarily an I-Frame. This can lead to a mediaserver assert with older Android versions. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ce4d099e11a345af01b978cc4f0ff6ed3a9b9e62 --- modules/codec/omxil/mediacodec.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c index b978a3f..6a0318c 100644 --- a/modules/codec/omxil/mediacodec.c +++ b/modules/codec/omxil/mediacodec.c @@ -122,6 +122,7 @@ struct decoder_sys_t int i_pixel_format; uint8_t i_nal_length_size; size_t i_h264_profile; + bool b_first_mp4v_iframe; /* stores the inflight picture for each output buffer or NULL */ picture_sys_t** pp_inflight_pictures; unsigned int i_inflight_pictures; @@ -1476,6 +1477,15 @@ static int Video_OnNewBlock(decoder_t *p_dec, block_t *p_block, int *p_flags) H264ProcessBlock(p_dec, p_block, &b_csd_changed, &b_size_changed); else if (p_dec->fmt_in.i_codec == VLC_CODEC_HEVC) HEVCProcessBlock(p_dec, p_block, &b_csd_changed, &b_size_changed); + else if (p_dec->fmt_in.i_codec == VLC_CODEC_MP4V + && !p_sys->u.video.b_first_mp4v_iframe) + { + /* The first input sent to MediaCodec must be an I-Frame */ + if ((p_block->i_flags & BLOCK_FLAG_TYPE_I)) + p_sys->u.video.b_first_mp4v_iframe = true; + else + return 0; /* Drop current block */ + } if (b_csd_changed) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
