From patchwork Fri Nov 4 15:57:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 1294 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.90.1 with SMTP id o1csp1399617vsb; Fri, 4 Nov 2016 09:16:24 -0700 (PDT) X-Received: by 10.28.199.6 with SMTP id x6mr3965825wmf.116.1478276184517; Fri, 04 Nov 2016 09:16:24 -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 lz10si15996382wjb.276.2016.11.04.09.16.24; Fri, 04 Nov 2016 09:16:24 -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=@gmail.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=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AF8DB689DB2; Fri, 4 Nov 2016 18:16:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f195.google.com (mail-qk0-f195.google.com [209.85.220.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1CAE8689D92 for ; Fri, 4 Nov 2016 18:16:12 +0200 (EET) Received: by mail-qk0-f195.google.com with SMTP id h201so5432349qke.3 for ; Fri, 04 Nov 2016 09:16:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to; bh=9kam+dNrHUer7Ofn6U+jHpkOCregMkX9ZfoegYTAsz0=; b=PPGuFi5bHO/cjkvw5ImnCuCbIQAsnnL7draNEGSlzRGJQ3E1eFsHk5W264HlN1fgXX 09ITeFwK5cv4rntLuOIbomjHEJw3x7eYx/o4tWORufuQHizl47X7j04NRXdaatwgxlIh 5SIWzYIPQ83nopIMKJCJFJRUEw69/qBIdA/f53sV0LwNruWKIrOdFMDWDxUw5TMhIRvX sfN1Z2S1GSyOe3500GvUQLI/w8IfTZ23jEdOo09Q2pRS8M4Cme3VaxNSuCwmMFU/DYXw +GdUU86yWu/NPCnld2Z0LrxZbjQqmm+qumRL9fXc16sHOVm1QSyq6ArmJfDSFDG2nJ9u 5LAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to; bh=9kam+dNrHUer7Ofn6U+jHpkOCregMkX9ZfoegYTAsz0=; b=WnSulI+rmJNhB72kSUZ7C+mjP4U9Zj1uhJo1n1GBnkbeQ4NzjrzrTM2bhV1AtgOwbZ uXJFxYLYPgnU9pC4oFJzfcDmtSvg7wigztBTaS1Z55gMAJGZtxaSkRpUm5lOIlhmyNV7 mmzsVG2oh0pjFD/vWZknX6CFtmRVQm5PYn/c5oa4Nbi2Vv3pLNngkhpGGzbFE9jFvJRM ftuf0AxSLn9chWdyWR9yOH29xg5GNhLNW84jWfH60j2N7SApo3oD/Azq9hfhg5a3T1yW fRelQNyupCbKmNm0lFYpp7Wvy3afS9aoaxiOBt0eILFDYeyyjvaqbsvVSJSdCrdPPBdd Bdkw== X-Gm-Message-State: ABUngvea6bfSixW09n3k8F+vyPgm2yejJ1JWUcfPYwQHdys/QNjxJwzweZjc1QXoUTv8kw== X-Received: by 10.55.200.152 with SMTP id t24mr15522758qkl.205.1478275075335; Fri, 04 Nov 2016 08:57:55 -0700 (PDT) Received: from [192.168.1.33] ([181.22.4.153]) by smtp.googlemail.com with ESMTPSA id q53sm7882405qtq.0.2016.11.04.08.57.50 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 04 Nov 2016 08:57:54 -0700 (PDT) To: FFmpeg development discussions and patches References: <20161104124345.5031-1-michael@niedermayer.cc> <20161104124345.5031-3-michael@niedermayer.cc> From: James Almer Message-ID: <4cad59ed-2de6-d363-debf-16d3067b379b@gmail.com> Date: Fri, 4 Nov 2016 12:57:39 -0300 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <20161104124345.5031-3-michael@niedermayer.cc> Subject: Re: [FFmpeg-devel] [PATCH 2/2] avformat/mux: split side data before internal auto BSF 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 11/4/2016 9:43 AM, Michael Niedermayer wrote: > The bitstream filters do not work with merged in side data > > This leaves the input packet split if it is being split. > It could be merged again, if thats preferred ? That would involve > an extra malloc and memcpy though Since side data is being split and merged at a latter point during av_interleaved_write_frame() and av_write_frame() calls, maybe we could just move the relevant code before the autobsf kicks in. See attached patch. FATE passes and the sample from ticket 5927 works with autobsf, same as with your patch. It doesn't change ffmpeg.c manual bsf's behavior, though. For that your commit from yesterday is still needed. From 44fbcbd855d259126d889e5281e64c8988e57f18 Mon Sep 17 00:00:00 2001 From: James Almer Date: Fri, 4 Nov 2016 12:48:20 -0300 Subject: [PATCH] avformat/mux: split side data earlier in av_write_frame and av_interleaved_write_frame Similarly, merge it back before returning. This fixes ticket #5927. Signed-off-by: James Almer --- libavformat/mux.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/libavformat/mux.c b/libavformat/mux.c index 2dac381..816e856 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -692,7 +692,7 @@ FF_ENABLE_DEPRECATION_WARNINGS */ static int write_packet(AVFormatContext *s, AVPacket *pkt) { - int ret, did_split; + int ret; int64_t pts_backup, dts_backup; pts_backup = pkt->pts; @@ -755,8 +755,6 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) } } - did_split = av_packet_split_side_data(pkt); - if (!s->internal->header_written) { ret = s->internal->write_header_ret ? s->internal->write_header_ret : write_header_internal(s); if (ret < 0) @@ -780,9 +778,6 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) } fail: - if (did_split) - av_packet_merge_side_data(pkt); - if (ret < 0) { pkt->pts = pts_backup; pkt->dts = dts_backup; @@ -918,7 +913,7 @@ static int do_packet_auto_bsf(AVFormatContext *s, AVPacket *pkt) { int av_write_frame(AVFormatContext *s, AVPacket *pkt) { - int ret; + int ret, did_split = 0; ret = prepare_input_packet(s, pkt); if (ret < 0) @@ -939,7 +934,8 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt) return ret; } return 1; - } + } else + did_split = av_packet_split_side_data(pkt); ret = do_packet_auto_bsf(s, pkt); if (ret <= 0) @@ -958,6 +954,10 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt) if (ret >= 0) s->streams[pkt->stream_index]->nb_frames++; + + if (did_split) + av_packet_merge_side_data(pkt); + return ret; } @@ -1224,7 +1224,7 @@ static int interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *in, in int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt) { - int ret, flush = 0; + int ret, did_split = 0, flush = 0; ret = prepare_input_packet(s, pkt); if (ret < 0) @@ -1233,6 +1233,8 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt) if (pkt) { AVStream *st = s->streams[pkt->stream_index]; + did_split = av_packet_split_side_data(pkt); + ret = do_packet_auto_bsf(s, pkt); if (ret == 0) return 0; @@ -1280,6 +1282,9 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt) return s->pb->error; } fail: + if (did_split) + av_packet_merge_side_data(pkt); + av_packet_unref(pkt); return ret; } -- 2.10.1