From patchwork Thu Apr 13 14:12:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anton Khirnov X-Patchwork-Id: 41168 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4645:b0:e3:3194:9d20 with SMTP id eb5csp1291139pzb; Thu, 13 Apr 2023 07:21:22 -0700 (PDT) X-Google-Smtp-Source: AKy350ZTM9O5SFfMDhzSqj6Blw03ib7xIbdj8CMtChmmdd8GToIuKps3hTcghOZQNjHP6mNNn7iD X-Received: by 2002:aa7:d04e:0:b0:505:7d54:db93 with SMTP id n14-20020aa7d04e000000b005057d54db93mr3042465edo.21.1681395682034; Thu, 13 Apr 2023 07:21:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681395682; cv=none; d=google.com; s=arc-20160816; b=bYXv7Q6ykE1IKP0I2DT/DTmRmttVhc1kdStaqjkdvZVWQgcBe2kA1I1s4Bt6Rv4qJ5 VMj0V2FUj/vxgkuVg/HsRHmV5KOnUaDbpS95dUlycU7mC3bv9MiO/aWnX62nkddye4Hg LiDUKKNSPbc0qKgm2NEYFMt/Fni1DvtAjIrPcBPiKh1fwqgGsDgORwrrFEzPU41hR8Gs dQ7n3FFwSbCcrGfVHeZZ6jJDan5I/EoNiszj8Gldz4TII25uYrVEdYEscAQN6bcSrnX0 ZBPnAR2rnPeFXHOlCc9VPOrJZXSxphRUXAuCLAowHSFGv26tQvwshcLeSnQZk+GZo1GK PmHg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=7xYnsXZWWD3Eg9vojiKRVGNpXH2HAUfBfO77vMZGG4s=; b=PI2QawlzZUb2efqwaIB8Luv6Q1ufe2+F3CFX84lVwptnFmdAMCSIcaY8hn5WWYVcGS rB4VxHSAgOPiNIhFNbgtwVS+VvJkSsdqi1nou+IXi10ruCBIoSqoxrTSGDtYUz+ynkOu BLR33hgmM1PC9SPrE7JoQnX+D6ZENRHmOfEHW84isZKag9MkRAqN+ye+PXI5kY277vq4 lxtqwgxJcWLC35/cmnMCfBhWyfUZBCcuSZ3vMnrbNGYHa2fb8MIHZe+4JF6gwDz1LUQs fpDwCpYf3WnCBEV9091w530g/FduEYal8AjM/FYX1rPeDOMjz2iSlP7vAZnmzw+HqT74 KRng== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ep21-20020a1709069b5500b009094a93d9b7si1964238ejc.990.2023.04.13.07.21.21; Thu, 13 Apr 2023 07:21: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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8C9F268BF11; Thu, 13 Apr 2023 17:16:23 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 836FD68BE34 for ; Thu, 13 Apr 2023 17:16:03 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id 4C4102406CD for ; Thu, 13 Apr 2023 16:16:03 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id AfnQyxTUrenO for ; Thu, 13 Apr 2023 16:16:02 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id BDD41240D1A for ; Thu, 13 Apr 2023 16:15:53 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:::1]) by libav.khirnov.net (Postfix) with ESMTP id AECC73A03E5 for ; Thu, 13 Apr 2023 16:15:53 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Thu, 13 Apr 2023 16:12:18 +0200 Message-Id: <20230413141223.17245-20-anton@khirnov.net> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230413141223.17245-1-anton@khirnov.net> References: <20230413141223.17245-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 20/25] fftools/ffmpeg_mux: stop using filter_in_rescale_delta_last for streamcopy X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: AMYVX7rc7GVk That field was added to store timestamp conversion state for audio decoding code. Later it started being used by streamcopy as well, but that use is wrong because, for a given input stream, both decoding and an arbitrary number of streamcopies may be performed simultaneously. They would then all overwrite the same state variable. Store this state in MuxStream instead. This is the last use of InputStream in of_streamcopy(), so the ist parameter can now be removed. --- fftools/ffmpeg.c | 2 +- fftools/ffmpeg.h | 3 +-- fftools/ffmpeg_mux.c | 6 +++--- fftools/ffmpeg_mux.h | 3 +++ 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 92cc98b089..67c504470a 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -1768,7 +1768,7 @@ static int process_input_packet(InputStream *ist, const AVPacket *pkt, int no_eo continue; } - of_streamcopy(ist, ost, pkt, ist->dts); + of_streamcopy(ost, pkt, ist->dts); } return !eof_reached; diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 46b4614ec4..6ad3245166 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -876,8 +876,7 @@ void of_output_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int eof) /** * @param dts predicted packet dts in AV_TIME_BASE_Q */ -void of_streamcopy(InputStream *ist, OutputStream *ost, - const AVPacket *pkt, int64_t dts); +void of_streamcopy(OutputStream *ost, const AVPacket *pkt, int64_t dts); int64_t of_filesize(OutputFile *of); diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c index db6ad9d589..8c710c2eac 100644 --- a/fftools/ffmpeg_mux.c +++ b/fftools/ffmpeg_mux.c @@ -378,10 +378,10 @@ fail: } -void of_streamcopy(InputStream *ist, OutputStream *ost, - const AVPacket *pkt, int64_t dts) +void of_streamcopy(OutputStream *ost, const AVPacket *pkt, int64_t dts) { OutputFile *of = output_files[ost->file_index]; + MuxStream *ms = ms_from_ost(ost); int64_t start_time = (of->start_time == AV_NOPTS_VALUE) ? 0 : of->start_time; int64_t ost_tb_start_time = av_rescale_q(start_time, AV_TIME_BASE_Q, ost->mux_timebase); AVPacket *opkt = ost->pkt; @@ -430,7 +430,7 @@ void of_streamcopy(InputStream *ist, OutputStream *ost, duration = ost->par_in->frame_size; opkt->dts = av_rescale_delta(pkt->time_base, pkt->dts, (AVRational){1, ost->par_in->sample_rate}, duration, - &ist->filter_in_rescale_delta_last, opkt->time_base); + &ms->ts_rescale_delta_last, opkt->time_base); /* dts will be set immediately afterwards to what pts is now */ opkt->pts = opkt->dts - ost_tb_start_time; } else diff --git a/fftools/ffmpeg_mux.h b/fftools/ffmpeg_mux.h index 3fab74b2ed..e8c4ea4847 100644 --- a/fftools/ffmpeg_mux.h +++ b/fftools/ffmpeg_mux.h @@ -64,6 +64,9 @@ typedef struct MuxStream { * used for making up missing dts values */ int64_t last_mux_dts; + // audio streamcopy - state for av_rescale_delta() + int64_t ts_rescale_delta_last; + // combined size of all the packets sent to the muxer uint64_t data_size_mux; } MuxStream;