Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Anton Khirnov <anton@khirnov.net>
To: ffmpeg-devel@ffmpeg.org
Subject: [FFmpeg-devel] [PATCH 20/25] fftools/ffmpeg_mux: stop using filter_in_rescale_delta_last for streamcopy
Date: Thu, 13 Apr 2023 16:12:18 +0200
Message-ID: <20230413141223.17245-20-anton@khirnov.net> (raw)
In-Reply-To: <20230413141223.17245-1-anton@khirnov.net>

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;
-- 
2.39.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  parent reply	other threads:[~2023-04-13 14:21 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-13 14:11 [FFmpeg-devel] [PATCH 01/25] fftools/ffmpeg_mux_init: move new_output_stream() lower in the file Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 02/25] fftools/ffmpeg_mux_init: restructure output stream creation Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 03/25] fftools/ffmpeg: move init_output_stream_streamcopy() to ffmpeg_mux_init Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 04/25] fftools/ffmpeg_mux_init: remove a redundant check Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 05/25] fftools/ffmpeg: move a miplaced assignment Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 06/25] fftools/ffmpeg: move a check to a more appropriate place Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 07/25] fftools/ffmpeg: drop unnecessary indirection Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 08/25] fftools/ffmpeg_mux_init: consolidate input stream flagging code Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 09/25] fftools/ffmpeg: add a function adding a destination filter for InputStream Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 10/25] fftools/ffmpeg: stop setting InputStream fields from muxing/filtering code Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 11/25] fftools/ffmpeg: move opening decoders to a new file Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 12/25] fftools/ffmpeg_dec: reindent after previous commit Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 13/25] fftools/ffmpeg_dec: drop useless abort_codec_experimental() Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 14/25] fftools/ffmpeg: open decoders right after we know they are needed Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 15/25] fftools/ffmpeg: initialize no-filter streams earlier Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 16/25] fftools/ffmpeg: store stream media type in OutputStream Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 17/25] fftools/ffmpeg: add muxer-input codec parameters to OutputStream Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 18/25] fftools/ffmpeg: move do_streamcopy() to ffmpeg_mux Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 19/25] fftools/ffmpeg_mux: use output stream parameters in of_streamcopy() Anton Khirnov
2023-04-13 14:12 ` Anton Khirnov [this message]
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 21/25] fftools/ffmpeg_mux: make ts_copy_start private to muxing code Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 22/25] fftools/ffmpeg_mux: make streamcopy_started " Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 23/25] fftools/ffmpeg_mux: make copy_prior_start " Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 24/25] fftools/ffmpeg_mux: make copy_initial_nonkeyframes " Anton Khirnov
2023-04-13 14:12 ` [FFmpeg-devel] [PATCH 25/25] fftools/ffmpeg_enc: make data_size_enc private to encoding code Anton Khirnov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230413141223.17245-20-anton@khirnov.net \
    --to=anton@khirnov.net \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git