From patchwork Thu Oct 27 20:38:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Cadhalpun X-Patchwork-Id: 1207 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.133 with SMTP id o127csp764098vsd; Thu, 27 Oct 2016 13:38:23 -0700 (PDT) X-Received: by 10.194.190.233 with SMTP id gt9mr8565844wjc.46.1477600702964; Thu, 27 Oct 2016 13:38:22 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h8si7065083wjv.289.2016.10.27.13.38.22; Thu, 27 Oct 2016 13:38:22 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE dis=NONE) header.from=googlemail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3B6A7689F3F; Thu, 27 Oct 2016 23:38:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6A92A689F2D for ; Thu, 27 Oct 2016 23:38:10 +0300 (EEST) Received: by mail-wm0-f47.google.com with SMTP id 140so42025507wmv.0 for ; Thu, 27 Oct 2016 13:38:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20120113; h=from:subject:to:references:message-id:date:user-agent:mime-version :in-reply-to; bh=eAyg+EMa0EKWOfqUvx08G63s6gsjwb+eJSrD1KRHuFA=; b=drM2THhbDySxgOM2sNFuCHdRm/KJjvRb3BsjTCVWW4oOxPXRbw5gclEW+X5RVIJpMC JqTFgOv8Mf3KGlz52nGsZGD3B43eGvklx6C/lcpxL///XFsg6CjJZ1dj7psYSyHQOscb ww9WfQ2LqYP98uPhYyQsVdr/AUmiSGQuSVR075I6hP2XTEtsYtdK/VGSYby9CEfE2pBd MCxYNlNuV1XKi/BiQBzJ/jmXcIpApoKYgBPweUYFWkp6YpmeW/D6QTunRM+zyXIPfogl 41LAW4GeLDOLGaQamcvq7FiABaJutYzTxNF9gkqd2UjPRrNu2PRyJ76OzGhncW3PZ3W8 6PgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:subject:to:references:message-id:date :user-agent:mime-version:in-reply-to; bh=eAyg+EMa0EKWOfqUvx08G63s6gsjwb+eJSrD1KRHuFA=; b=g4TngMb1DQ17hKTnK36zsUOhf5XQL5tlfvQrZZqut1mXmp66p8nA5N55FRG2Vxj58Q VAmFYF7npiAnle6bp3MTbaYhZTJrqS1pucR+gEroRJhEkKDE6jc2+YubLjfWz+F0+iIK vQYCPCGxuRZ130jJBAPjy++yTKVSEL137j5W1gmg99dO2O7GHN6SFSaxLWUHSuM2jEy5 hwu2NSmZHTj3eyZswbtRwG+58NfY3FazttCbV44ZKSezIJrx/CYukLYYHiWTVpZRnlcF retwul0W2L/h9o0JHCz6IopK7dplcU+eHV94TaHQwYyBNuIDEALU6zWbDMQUKvqteltz UiFQ== X-Gm-Message-State: ABUngvdwYMoD86HxfUTObFvL+nQN/8ZUkg4egQ4e05icFHoKHGrTUADZeA/fiUsiSeDjiA== X-Received: by 10.194.41.234 with SMTP id i10mr8381697wjl.205.1477600691969; Thu, 27 Oct 2016 13:38:11 -0700 (PDT) Received: from [192.168.2.21] (p5B095458.dip0.t-ipconnect.de. [91.9.84.88]) by smtp.googlemail.com with ESMTPSA id a1sm10383318wjl.28.2016.10.27.13.38.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 27 Oct 2016 13:38:11 -0700 (PDT) From: Andreas Cadhalpun X-Google-Original-From: Andreas Cadhalpun To: ffmpeg-devel@ffmpeg.org References: <084583c6-4351-9553-97f6-cb6cd08ecbf0@gmail.com> Message-ID: <974ac6e6-f925-961f-a0d3-24bf3c158c8a@googlemail.com> Date: Thu, 27 Oct 2016 22:38:10 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 In-Reply-To: <084583c6-4351-9553-97f6-cb6cd08ecbf0@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH] ffmpeg: copy the extradata from encoder to muxer X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" On 27.10.2016 21:37, James Almer wrote: > If apng encoder needs to add new extradata in a packet, it should do it > with av_packet_new_side_data() instead. Thanks for the hint. Attached is a patch fixing it that way. Best regards, Andreas From 4325ccdaf3bb7c74312cbaeb49d76fe535f18956 Mon Sep 17 00:00:00 2001 From: Andreas Cadhalpun Date: Thu, 27 Oct 2016 22:34:48 +0200 Subject: [PATCH] apng: use side data to pass extradata to muxer This fixes creating apng files, which is broken since commit 5ef19590802f000299e418143fc2301e3f43affe. Signed-off-by: Andreas Cadhalpun --- libavcodec/pngenc.c | 4 ++++ libavformat/apngenc.c | 27 ++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c index 00c830e..1a308f2 100644 --- a/libavcodec/pngenc.c +++ b/libavcodec/pngenc.c @@ -917,6 +917,10 @@ static int encode_apng(AVCodecContext *avctx, AVPacket *pkt, if (s->last_frame) { uint8_t* last_fctl_chunk_start = pkt->data; uint8_t buf[26]; + uint8_t *side_data = av_packet_new_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, avctx->extradata_size); + if (!side_data) + return AVERROR(ENOMEM); + memcpy(side_data, avctx->extradata, avctx->extradata_size); AV_WB32(buf + 0, s->last_frame_fctl.sequence_number); AV_WB32(buf + 4, s->last_frame_fctl.width); diff --git a/libavformat/apngenc.c b/libavformat/apngenc.c index e25df2e..f702667 100644 --- a/libavformat/apngenc.c +++ b/libavformat/apngenc.c @@ -101,15 +101,29 @@ static int apng_write_header(AVFormatContext *format_context) return 0; } -static void flush_packet(AVFormatContext *format_context, AVPacket *packet) +static int flush_packet(AVFormatContext *format_context, AVPacket *packet) { APNGMuxContext *apng = format_context->priv_data; AVIOContext *io_context = format_context->pb; AVStream *codec_stream = format_context->streams[0]; AVCodecParameters *codec_par = codec_stream->codecpar; + uint8_t *side_data = NULL; + int side_data_size = 0; av_assert0(apng->prev_packet); + if (packet) + side_data = av_packet_get_side_data(packet, AV_PKT_DATA_NEW_EXTRADATA, &side_data_size); + + if (side_data_size) { + av_freep(&codec_par->extradata); + codec_par->extradata = av_mallocz(side_data_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!codec_par->extradata) + return AVERROR(ENOMEM); + codec_par->extradata_size = side_data_size; + memcpy(codec_par->extradata, side_data, codec_par->extradata_size); + } + if (apng->frame_number == 0 && !packet) { uint8_t *existing_acTL_chunk; uint8_t *existing_fcTL_chunk; @@ -195,11 +209,13 @@ static void flush_packet(AVFormatContext *format_context, AVPacket *packet) av_packet_unref(apng->prev_packet); if (packet) av_copy_packet(apng->prev_packet, packet); + return 0; } static int apng_write_packet(AVFormatContext *format_context, AVPacket *packet) { APNGMuxContext *apng = format_context->priv_data; + int ret; if (!apng->prev_packet) { apng->prev_packet = av_malloc(sizeof(*apng->prev_packet)); @@ -208,7 +224,9 @@ static int apng_write_packet(AVFormatContext *format_context, AVPacket *packet) av_copy_packet(apng->prev_packet, packet); } else { - flush_packet(format_context, packet); + ret = flush_packet(format_context, packet); + if (ret < 0) + return ret; } return 0; @@ -219,10 +237,13 @@ static int apng_write_trailer(AVFormatContext *format_context) APNGMuxContext *apng = format_context->priv_data; AVIOContext *io_context = format_context->pb; uint8_t buf[8]; + int ret; if (apng->prev_packet) { - flush_packet(format_context, NULL); + ret = flush_packet(format_context, NULL); av_freep(&apng->prev_packet); + if (ret < 0) + return ret; } apng_write_chunk(io_context, MKBETAG('I', 'E', 'N', 'D'), NULL, 0); -- 2.9.3