vlc | branch: master | Thomas Guillem <[email protected]> | Thu May 26 11:47:41 2016 +0200| [e26bdeaf4462288652ba85dc67276db747d9203a] | committer: Thomas Guillem
mediacodec: refactor ParseVideoExtra > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e26bdeaf4462288652ba85dc67276db747d9203a --- modules/codec/omxil/mediacodec.c | 90 +++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 40 deletions(-) diff --git a/modules/codec/omxil/mediacodec.c b/modules/codec/omxil/mediacodec.c index 04bdafc..502afdc 100644 --- a/modules/codec/omxil/mediacodec.c +++ b/modules/codec/omxil/mediacodec.c @@ -337,6 +337,47 @@ static int H264SetCSD(decoder_t *p_dec, void *p_buf, size_t i_size, return VLC_EGENERIC; } +static int ParseVideoExtraH264(decoder_t *p_dec, uint8_t *p_extra, int i_extra) +{ + decoder_sys_t *p_sys = p_dec->p_sys; + + if (h264_isavcC(p_extra, i_extra)) + { + size_t i_size = 0; + uint8_t *p_buf = h264_avcC_to_AnnexB_NAL(p_extra, i_extra, &i_size, + &p_sys->u.video.i_nal_length_size); + if (p_buf) + { + H264SetCSD(p_dec, p_buf, i_size, NULL); + free(p_buf); + } + } + else + H264SetCSD(p_dec, p_extra, i_extra, NULL); + + return VLC_SUCCESS; +} + +static int ParseVideoExtraHEVC(decoder_t *p_dec, uint8_t *p_extra, int i_extra) +{ + decoder_sys_t *p_sys = p_dec->p_sys; + + if (hevc_ishvcC(p_extra, i_extra)) + { + struct csd csd; + csd.p_buf = hevc_hvcC_to_AnnexB_NAL(p_extra, i_extra, &csd.i_size, + &p_sys->u.video.i_nal_length_size); + if (csd.p_buf) + { + CSDDup(p_dec, &csd, 1); + free(csd.p_buf); + } + } + /* FIXME: what to do with AnnexB ? */ + + return VLC_SUCCESS; +} + static int ParseVideoExtraVc1(decoder_t *p_dec, uint8_t *p_extra, int i_extra) { int offset = 0; @@ -407,50 +448,19 @@ static int ParseVideoExtra(decoder_t *p_dec) uint8_t *p_extra = p_dec->fmt_in.p_extra; int i_extra = p_dec->fmt_in.i_extra; - if (p_dec->fmt_in.i_codec == VLC_CODEC_H264 - || p_dec->fmt_in.i_codec == VLC_CODEC_HEVC) - { - if (p_dec->fmt_in.i_codec == VLC_CODEC_H264) - { - if (h264_isavcC(p_extra, i_extra)) - { - size_t i_size = 0; - uint8_t *p_buf = h264_avcC_to_AnnexB_NAL(p_extra, i_extra, &i_size, - &p_sys->u.video.i_nal_length_size); - if(p_buf) - { - H264SetCSD(p_dec, p_buf, i_size, NULL); - free(p_buf); - } - } - else - H264SetCSD(p_dec, p_extra, i_extra, NULL); - } - else /* FIXME and refactor: CSDDup vs CSDless SetCSD */ - { - if (hevc_ishvcC(p_extra, i_extra)) - { - struct csd csd; - csd.p_buf = hevc_hvcC_to_AnnexB_NAL(p_extra, i_extra, &csd.i_size, - &p_sys->u.video.i_nal_length_size); - if(csd.p_buf) - { - CSDDup(p_dec, &csd, 1); - free(csd.p_buf); - } - } - /* FIXME: what to do with AnnexB ? */ - } - } - else if (p_dec->fmt_in.i_codec == VLC_CODEC_WMV3) + switch (p_dec->fmt_in.i_codec) { + case VLC_CODEC_H264: + return ParseVideoExtraH264(p_dec, p_extra, i_extra); + case VLC_CODEC_HEVC: + return ParseVideoExtraHEVC(p_dec, p_extra, i_extra); + case VLC_CODEC_WMV3: return ParseVideoExtraWmv3(p_dec, p_extra, i_extra); - } - else if (p_dec->fmt_in.i_codec == VLC_CODEC_VC1) - { + case VLC_CODEC_VC1: return ParseVideoExtraVc1(p_dec, p_extra, i_extra); + default: + return VLC_SUCCESS; } - return VLC_SUCCESS; } /***************************************************************************** _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
