On 10/9/2021 12:14 PM, Andreas Rheinhardt wrote:
Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com>
---
  libavformat/internal.h |  7 +++++++
  libavformat/mux.c      | 11 ++++++++++-
  2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/libavformat/internal.h b/libavformat/internal.h
index 223befdbc0..867b5de514 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -760,6 +760,13 @@ int ff_add_attached_pic(AVFormatContext *s, AVStream *st, 
AVIOContext *pb,
  int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *pkt,
                                   int flush, int has_packet);
+/**
+ * Interleave packets directly in the order in which they arrive
+ * without any sort of buffering.
+ */
+int ff_interleave_packet_passthrough(AVFormatContext *s, AVPacket *pkt,
+                                     int flush, int has_packet);
+
  void ff_free_stream(AVFormatContext *s, AVStream *st);
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);
diff --git a/libavformat/mux.c b/libavformat/mux.c
index f4f1bc289e..a6129720dd 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -334,7 +334,10 @@ static int init_muxer(AVFormatContext *s, AVDictionary 
**options)
          if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT)
              si->nb_interleaved_streams++;
      }
-    si->interleave_packet = of->interleave_packet ? of->interleave_packet : 
ff_interleave_packet_per_dts;
+    si->interleave_packet = of->interleave_packet ? of->interleave_packet :
+                                si->nb_interleaved_streams > 1 ?
+                                    ff_interleave_packet_per_dts :
+                                    ff_interleave_packet_passthrough;

This is hard to read. Make it something like

si->interleave_packet = of->interleave_packet;
if (!si->interleave_packet)
    si->interleave_packet = si->nb_interleaved_streams > 1 ?
                                ff_interleave_packet_per_dts :
                                ff_interleave_packet_passthrough;

Instead, or at the very least add some brackets.

if (!s->priv_data && of->priv_data_size > 0) {
          s->priv_data = av_mallocz(of->priv_data_size);
@@ -1026,6 +1029,12 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, 
AVPacket *pkt,
      }
  }
+int ff_interleave_packet_passthrough(AVFormatContext *s, AVPacket *pkt,
+                                     int flush, int has_packet)
+{
+    return has_packet;
+}
+
  int ff_get_muxer_ts_offset(AVFormatContext *s, int stream_index, int64_t 
*offset)
  {
      AVStream *st;


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

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

Reply via email to