On Tue, Jun 28, 2016 at 12:31:33PM +0200, Matthieu Bouron wrote: > From: Matthieu Bouron <matthieu.bou...@stupeflix.com> > > Fixes regression introduced by 0cd5e281df3f69c1ed8f2a72a5bcbf9691e1b5d5. > --- > libavcodec/mediacodecdec_h264.c | 21 +++++++++++++++++++-- > 1 file changed, 19 insertions(+), 2 deletions(-) > > diff --git a/libavcodec/mediacodecdec_h264.c b/libavcodec/mediacodecdec_h264.c > index eb63ab5..3776b67 100644 > --- a/libavcodec/mediacodecdec_h264.c > +++ b/libavcodec/mediacodecdec_h264.c > @@ -112,8 +112,25 @@ static av_cold int mediacodec_decode_init(AVCodecContext > *avctx) > } > > if (pps && sps) { > - ff_AMediaFormat_setBuffer(format, "csd-0", (void*)sps->data, > sps->data_size); > - ff_AMediaFormat_setBuffer(format, "csd-1", (void*)pps->data, > pps->data_size); > + uint8_t nal_headers[] = { 0x00, 0x00, 0x00, 0x01 }; > + > + uint8_t *data = NULL; > + size_t data_size = FFMAX(sps->data_size, pps->data_size) + > sizeof(nal_headers); > + > + data = av_mallocz(data_size); > + if (!data) { > + ret = AVERROR(ENOMEM); > + goto done; > + } > + > + memcpy(data, nal_headers, sizeof(nal_headers)); > + memcpy(data + sizeof(nal_headers), sps->data, sps->data_size); > + ff_AMediaFormat_setBuffer(format, "csd-0", (void*)data, > sps->data_size + sizeof(nal_headers)); > + > + memcpy(data + sizeof(nal_headers), pps->data, pps->data_size); > + ff_AMediaFormat_setBuffer(format, "csd-1", (void*)data, > pps->data_size + sizeof(nal_headers)); > + > + av_freep(&data); > } else { > av_log(avctx, AV_LOG_ERROR, "Could not extract PPS/SPS from > extradata"); > ret = AVERROR_INVALIDDATA;
Pushed to master and release/3.1 branch a slightly different version (which adds static const to the nal_headers declaration). To bring more context, the regression introduced by 0cd5e281df3f69c1ed8f2a72a5bcbf9691e1b5d5 prevented the decoders of Samsung devices to work. Matthieu _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel