[FFmpeg-devel] [PATCH] ffmpeg: copy the extradata from encoder to muxer

James Almer jamrial at gmail.com
Thu Oct 27 22:37:05 EEST 2016


On 10/27/2016 4:19 PM, Andreas Cadhalpun wrote:
> This fixes creating apng files.
> 
> This partly reverts commit 5ef19590802f000299e418143fc2301e3f43affe.
> 
> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> ---
>  ffmpeg.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/ffmpeg.c b/ffmpeg.c
> index 3b91710..9971148 100644
> --- a/ffmpeg.c
> +++ b/ffmpeg.c
> @@ -646,6 +646,7 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost)
>  {
>      AVFormatContext *s = of->ctx;
>      AVStream *st = ost->st;
> +    AVCodecContext *avctx = ost->encoding_needed ? ost->enc_ctx : ost->st->codec;

No, AVStream->codec usage was removed. It can't be re added.

>      int ret;
>  
>      if (!of->header_written) {
> @@ -709,6 +710,16 @@ static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost)
>          }
>      }
>  
> +    if (!st->codecpar->extradata_size && avctx->extradata_size) {
> +        st->codecpar->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE);
> +        if (!st->codecpar->extradata) {
> +            av_log(NULL, AV_LOG_ERROR, "Could not allocate extradata buffer to copy parser data.\n");
> +            exit_program(1);
> +        }
> +        st->codecpar->extradata_size = avctx->extradata_size;
> +        memcpy(st->codecpar->extradata, avctx->extradata, avctx->extradata_size);
> +    }

If apng encoder needs to add new extradata in a packet, it should do it
with av_packet_new_side_data() instead.

> +
>      if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
>          if (pkt->dts != AV_NOPTS_VALUE &&
>              pkt->pts != AV_NOPTS_VALUE &&
> 



More information about the ffmpeg-devel mailing list