Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH v6 0/4] Remove chained ogg stream header packets from the demuxer
@ 2025-05-19 14:46 Romain Beauxis
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet Romain Beauxis
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Romain Beauxis @ 2025-05-19 14:46 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Romain Beauxis

## Changes since last revision:
* Patches for opus and flac have been comitted.
* Split up code refactorization and new extradata mechanism.
* Added full header+setup as extradata passed down to the vorbis
  decoder.

Romain Beauxis (4):
  libavformat/oggdec.{c,h}: Add new_extradata, use it to pass extradata
    to the next decoded packet.
  ogg/vorbis: factor out header processing logic.
  ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  libavformat/oggdec.h: Change paket function documentation to return 1
    on header packets only.

 libavcodec/vorbis_parser.h                 |  11 ++
 libavcodec/vorbisdec.c                     |  76 ++++++----
 libavformat/oggdec.c                       |  11 ++
 libavformat/oggdec.h                       |   6 +-
 libavformat/oggparsevorbis.c               | 167 +++++++++++++++------
 tests/ref/fate/ogg-vorbis-chained-meta.txt |   3 -
 6 files changed, 191 insertions(+), 83 deletions(-)

-- 
2.39.5 (Apple Git-154)

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [FFmpeg-devel] [PATCH v6 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet.
  2025-05-19 14:46 [FFmpeg-devel] [PATCH v6 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
@ 2025-05-19 14:46 ` Romain Beauxis
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 2/4] ogg/vorbis: factor out header processing logic Romain Beauxis
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Romain Beauxis @ 2025-05-19 14:46 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Romain Beauxis

---
 libavformat/oggdec.c | 11 +++++++++++
 libavformat/oggdec.h |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 5557eb4a14..cb77cdd994 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -77,6 +77,7 @@ static void free_stream(AVFormatContext *s, int i)
 
     av_freep(&stream->private);
     av_freep(&stream->new_metadata);
+    av_freep(&stream->new_extradata);
 }
 
 //FIXME We could avoid some structure duplication
@@ -888,6 +889,16 @@ retry:
         os->new_metadata_size = 0;
     }
 
+    if (os->new_extradata) {
+        ret = av_packet_add_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
+                                      os->new_extradata, os->new_extradata_size);
+        if (ret < 0)
+            return ret;
+
+        os->new_extradata = NULL;
+        os->new_extradata_size = 0;
+    }
+
     return psize;
 }
 
diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h
index bc670d0f1e..5083de646c 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -94,6 +94,8 @@ struct ogg_stream {
     int end_trimming; ///< set the number of packets to drop from the end
     uint8_t *new_metadata;
     size_t new_metadata_size;
+    uint8_t *new_extradata;
+    size_t new_extradata_size;
     void *private;
 };
 
-- 
2.39.5 (Apple Git-154)

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [FFmpeg-devel] [PATCH v6 2/4] ogg/vorbis: factor out header processing logic.
  2025-05-19 14:46 [FFmpeg-devel] [PATCH v6 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet Romain Beauxis
@ 2025-05-19 14:46 ` Romain Beauxis
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams Romain Beauxis
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 4/4] libavformat/oggdec.h: Change paket function documentation to return 1 on header packets only Romain Beauxis
  3 siblings, 0 replies; 9+ messages in thread
From: Romain Beauxis @ 2025-05-19 14:46 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Romain Beauxis

---
 libavformat/oggparsevorbis.c | 104 ++++++++++++++++++++---------------
 1 file changed, 60 insertions(+), 44 deletions(-)

diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index 9f50ab9ffc..62cc2da6de 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -293,6 +293,62 @@ static int vorbis_update_metadata(AVFormatContext *s, int idx)
     return ret;
 }
 
+static int vorbis_parse_header(AVFormatContext *s, AVStream *st,
+                               const uint8_t *p, unsigned int psize)
+{
+    unsigned blocksize, bs0, bs1;
+    int srate;
+    int channels;
+
+    if (psize != 30)
+        return AVERROR_INVALIDDATA;
+
+    p += 7; /* skip "\001vorbis" tag */
+
+    if (bytestream_get_le32(&p) != 0) /* vorbis_version */
+        return AVERROR_INVALIDDATA;
+
+    channels = bytestream_get_byte(&p);
+    if (st->codecpar->ch_layout.nb_channels &&
+        channels != st->codecpar->ch_layout.nb_channels) {
+        av_log(s, AV_LOG_ERROR, "Channel change is not supported\n");
+        return AVERROR_PATCHWELCOME;
+    }
+    st->codecpar->ch_layout.nb_channels = channels;
+    srate               = bytestream_get_le32(&p);
+    p += 4; // skip maximum bitrate
+    st->codecpar->bit_rate = bytestream_get_le32(&p); // nominal bitrate
+    p += 4; // skip minimum bitrate
+
+    blocksize = bytestream_get_byte(&p);
+    bs0       = blocksize & 15;
+    bs1       = blocksize >> 4;
+
+    if (bs0 > bs1)
+        return AVERROR_INVALIDDATA;
+    if (bs0 < 6 || bs1 > 13)
+        return AVERROR_INVALIDDATA;
+
+    if (bytestream_get_byte(&p) != 1) /* framing_flag */
+        return AVERROR_INVALIDDATA;
+
+    st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
+    st->codecpar->codec_id   = AV_CODEC_ID_VORBIS;
+
+    if (srate > 0) {
+        if (st->codecpar->sample_rate &&
+            srate != st->codecpar->sample_rate) {
+            av_log(s, AV_LOG_ERROR, "Sample rate change is not supported\n");
+            return AVERROR_PATCHWELCOME;
+        }
+
+        st->codecpar->sample_rate = srate;
+        avpriv_set_pts_info(st, 64, 1, srate);
+    }
+
+    return 1;
+}
+
 static int vorbis_header(AVFormatContext *s, int idx)
 {
     struct ogg *ogg = s->priv_data;
@@ -329,50 +385,10 @@ static int vorbis_header(AVFormatContext *s, int idx)
     priv->packet[pkt_type >> 1] = av_memdup(os->buf + os->pstart, os->psize);
     if (!priv->packet[pkt_type >> 1])
         return AVERROR(ENOMEM);
-    if (os->buf[os->pstart] == 1) {
-        const uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */
-        unsigned blocksize, bs0, bs1;
-        int srate;
-        int channels;
-
-        if (os->psize != 30)
-            return AVERROR_INVALIDDATA;
-
-        if (bytestream_get_le32(&p) != 0) /* vorbis_version */
-            return AVERROR_INVALIDDATA;
-
-        channels = bytestream_get_byte(&p);
-        if (st->codecpar->ch_layout.nb_channels &&
-            channels != st->codecpar->ch_layout.nb_channels) {
-            av_log(s, AV_LOG_ERROR, "Channel change is not supported\n");
-            return AVERROR_PATCHWELCOME;
-        }
-        st->codecpar->ch_layout.nb_channels = channels;
-        srate               = bytestream_get_le32(&p);
-        p += 4; // skip maximum bitrate
-        st->codecpar->bit_rate = bytestream_get_le32(&p); // nominal bitrate
-        p += 4; // skip minimum bitrate
-
-        blocksize = bytestream_get_byte(&p);
-        bs0       = blocksize & 15;
-        bs1       = blocksize >> 4;
-
-        if (bs0 > bs1)
-            return AVERROR_INVALIDDATA;
-        if (bs0 < 6 || bs1 > 13)
-            return AVERROR_INVALIDDATA;
-
-        if (bytestream_get_byte(&p) != 1) /* framing_flag */
-            return AVERROR_INVALIDDATA;
-
-        st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
-        st->codecpar->codec_id   = AV_CODEC_ID_VORBIS;
-
-        if (srate > 0) {
-            st->codecpar->sample_rate = srate;
-            avpriv_set_pts_info(st, 64, 1, srate);
-        }
-    } else if (os->buf[os->pstart] == 3) {
+    if (pkt_type == 1)
+        return vorbis_parse_header(s, st, os->buf + os->pstart, os->psize);
+
+    if (pkt_type == 3) {
         if (vorbis_update_metadata(s, idx) >= 0 && priv->len[1] > 10) {
             unsigned new_len;
 
-- 
2.39.5 (Apple Git-154)

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  2025-05-19 14:46 [FFmpeg-devel] [PATCH v6 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet Romain Beauxis
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 2/4] ogg/vorbis: factor out header processing logic Romain Beauxis
@ 2025-05-19 14:46 ` Romain Beauxis
  2025-05-20 21:45   ` Michael Niedermayer
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 4/4] libavformat/oggdec.h: Change paket function documentation to return 1 on header packets only Romain Beauxis
  3 siblings, 1 reply; 9+ messages in thread
From: Romain Beauxis @ 2025-05-19 14:46 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Romain Beauxis

---
 libavcodec/vorbis_parser.h                 | 11 ++++
 libavcodec/vorbisdec.c                     | 76 +++++++++++++---------
 libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
 tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
 4 files changed, 116 insertions(+), 37 deletions(-)

diff --git a/libavcodec/vorbis_parser.h b/libavcodec/vorbis_parser.h
index 789932ac49..b176fe536c 100644
--- a/libavcodec/vorbis_parser.h
+++ b/libavcodec/vorbis_parser.h
@@ -30,6 +30,17 @@
 
 typedef struct AVVorbisParseContext AVVorbisParseContext;
 
+/**
+ * Used by the vorbis parser to pass new chained stream headers
+ * as extradata.
+ */
+typedef struct vorbis_new_extradata {
+    uint8_t *header;
+    size_t   header_size;
+    uint8_t *setup;
+    size_t   setup_size;
+} vorbis_new_extradata;
+
 /**
  * Allocate and initialize the Vorbis parser using headers in the extradata.
  */
diff --git a/libavcodec/vorbisdec.c b/libavcodec/vorbisdec.c
index adbd726183..c9bbc60b49 100644
--- a/libavcodec/vorbisdec.c
+++ b/libavcodec/vorbisdec.c
@@ -43,6 +43,7 @@
 #include "vorbis.h"
 #include "vorbisdsp.h"
 #include "vorbis_data.h"
+#include "vorbis_parser.h"
 #include "xiph.h"
 
 #define V_NB_BITS 8
@@ -1778,47 +1779,60 @@ static int vorbis_decode_frame(AVCodecContext *avctx, AVFrame *frame,
     GetBitContext *gb = &vc->gb;
     float *channel_ptrs[255];
     int i, len, ret;
+    size_t new_extradata_size;
+    vorbis_new_extradata *new_extradata;
+    const uint8_t *header;
+    const uint8_t *setup;
 
     ff_dlog(NULL, "packet length %d \n", buf_size);
 
-    if (*buf == 1 && buf_size > 7) {
-        if ((ret = init_get_bits8(gb, buf + 1, buf_size - 1)) < 0)
-            return ret;
+    new_extradata = (vorbis_new_extradata *)av_packet_get_side_data(
+        avpkt, AV_PKT_DATA_NEW_EXTRADATA, &new_extradata_size);
 
-        vorbis_free(vc);
-        if ((ret = vorbis_parse_id_hdr(vc))) {
-            av_log(avctx, AV_LOG_ERROR, "Id header corrupt.\n");
-            vorbis_free(vc);
-            return ret;
-        }
+    if (new_extradata) {
+        header = new_extradata->header;
+        setup = new_extradata->setup;
 
-        av_channel_layout_uninit(&avctx->ch_layout);
-        if (vc->audio_channels > 8) {
-            avctx->ch_layout.order       = AV_CHANNEL_ORDER_UNSPEC;
-            avctx->ch_layout.nb_channels = vc->audio_channels;
-        } else {
-            av_channel_layout_copy(&avctx->ch_layout, &ff_vorbis_ch_layouts[vc->audio_channels - 1]);
-        }
+        if (header && *header == 1 && new_extradata->header_size > 7) {
+            if ((ret = init_get_bits8(
+                            gb, header + 1,
+                            new_extradata->header_size - 1)) < 0)
+                return ret;
 
-        avctx->sample_rate = vc->audio_samplerate;
-        return buf_size;
-    }
+            vorbis_free(vc);
+            if ((ret = vorbis_parse_id_hdr(vc))) {
+                av_log(avctx, AV_LOG_ERROR, "Id header corrupt.\n");
+                vorbis_free(vc);
+                return ret;
+            }
 
-    if (*buf == 3 && buf_size > 7) {
-        av_log(avctx, AV_LOG_DEBUG, "Ignoring comment header\n");
-        return buf_size;
-    }
+            av_channel_layout_uninit(&avctx->ch_layout);
+            if (vc->audio_channels > 8) {
+                avctx->ch_layout.order       = AV_CHANNEL_ORDER_UNSPEC;
+                avctx->ch_layout.nb_channels = vc->audio_channels;
+            } else {
+                av_channel_layout_copy(
+                    &avctx->ch_layout,
+                    &ff_vorbis_ch_layouts[vc->audio_channels - 1]);
+            }
 
-    if (*buf == 5 && buf_size > 7 && vc->channel_residues && !vc->modes) {
-        if ((ret = init_get_bits8(gb, buf + 1, buf_size - 1)) < 0)
-            return ret;
+            avctx->sample_rate = vc->audio_samplerate;
+            return buf_size;
+        }
 
-        if ((ret = vorbis_parse_setup_hdr(vc))) {
-            av_log(avctx, AV_LOG_ERROR, "Setup header corrupt.\n");
-            vorbis_free(vc);
-            return ret;
+        if (setup && *setup == 5 && new_extradata->setup_size > 7 &&
+            vc->channel_residues && !vc->modes) {
+            if ((ret = init_get_bits8(
+                           gb, setup + 1,
+                           new_extradata->setup_size - 1)) < 0)
+                return ret;
+
+            if ((ret = vorbis_parse_setup_hdr(vc))) {
+                av_log(avctx, AV_LOG_ERROR, "Setup header corrupt.\n");
+                vorbis_free(vc);
+                return ret;
+            }
         }
-        return buf_size;
     }
 
     if (!vc->channel_residues || !vc->modes) {
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index 62cc2da6de..ee2e01f468 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -255,12 +255,19 @@ static void vorbis_cleanup(AVFormatContext *s, int idx)
     struct ogg *ogg = s->priv_data;
     struct ogg_stream *os = ogg->streams + idx;
     struct oggvorbis_private *priv = os->private;
+    vorbis_new_extradata *new_extradata;
     int i;
     if (os->private) {
         av_vorbis_parse_free(&priv->vp);
         for (i = 0; i < 3; i++)
             av_freep(&priv->packet[i]);
     }
+
+    if (os->new_extradata) {
+        new_extradata = (vorbis_new_extradata *)os->new_extradata;
+        av_freep(&new_extradata->header);
+        av_freep(&new_extradata->setup);
+    }
 }
 
 static int vorbis_update_metadata(AVFormatContext *s, int idx)
@@ -433,7 +440,10 @@ static int vorbis_packet(AVFormatContext *s, int idx)
     struct ogg *ogg = s->priv_data;
     struct ogg_stream *os = ogg->streams + idx;
     struct oggvorbis_private *priv = os->private;
+    vorbis_new_extradata *new_extradata;
     int duration, flags = 0;
+    int skip_packet = 0;
+    int ret;
 
     if (!priv->vp)
         return AVERROR_INVALIDDATA;
@@ -496,10 +506,57 @@ static int vorbis_packet(AVFormatContext *s, int idx)
         if (duration < 0) {
             os->pflags |= AV_PKT_FLAG_CORRUPT;
             return 0;
-        } else if (flags & VORBIS_FLAG_COMMENT) {
-            vorbis_update_metadata(s, idx);
+        }
+
+        if (flags & VORBIS_FLAG_HEADER) {
+            ret = vorbis_parse_header(s, s->streams[idx], os->buf + os->pstart, os->psize);
+            if (ret < 0)
+                return ret;
+
+            ret = av_reallocp(&os->new_extradata, sizeof(vorbis_new_extradata));
+            if (ret < 0)
+                return ret;
+
+            os->new_extradata_size = sizeof(vorbis_new_extradata);
+            new_extradata = (vorbis_new_extradata *)os->new_extradata;
+
+            ret = av_reallocp(&new_extradata->header, os->psize);
+            if (ret < 0)
+                return ret;
+
+            memcpy(new_extradata->header,  os->buf + os->pstart, os->psize);
+            new_extradata->header_size = os->psize;
+
+            skip_packet = 1;
+        }
+
+        if (flags & VORBIS_FLAG_COMMENT) {
+            ret = vorbis_update_metadata(s, idx);
+            if (ret < 0)
+                return ret;
+
             flags = 0;
+            skip_packet = 1;
         }
+
+        if (flags & VORBIS_FLAG_SETUP) {
+            ret = av_reallocp(&os->new_extradata, sizeof(vorbis_new_extradata));
+            if (ret < 0)
+                return ret;
+
+            os->new_extradata_size = sizeof(vorbis_new_extradata);
+            new_extradata = (vorbis_new_extradata *)os->new_extradata;
+
+            ret = av_reallocp(&new_extradata->setup, os->psize);
+            if (ret < 0)
+                return ret;
+
+            memcpy(new_extradata->setup, os->buf + os->pstart, os->psize);
+            new_extradata->setup_size = os->psize;
+
+            skip_packet = 1;
+        }
+
         os->pduration = duration;
     }
 
@@ -521,7 +578,7 @@ static int vorbis_packet(AVFormatContext *s, int idx)
         priv->final_duration += os->pduration;
     }
 
-    return 0;
+    return skip_packet;
 }
 
 const struct ogg_codec ff_vorbis_codec = {
diff --git a/tests/ref/fate/ogg-vorbis-chained-meta.txt b/tests/ref/fate/ogg-vorbis-chained-meta.txt
index b7a97c90e2..1206f86c1f 100644
--- a/tests/ref/fate/ogg-vorbis-chained-meta.txt
+++ b/tests/ref/fate/ogg-vorbis-chained-meta.txt
@@ -6,10 +6,7 @@ Stream ID: 0, frame PTS: 128, metadata: N/A
 Stream ID: 0, packet PTS: 704, packet DTS: 704
 Stream ID: 0, frame PTS: 704, metadata: N/A
 Stream ID: 0, packet PTS: 0, packet DTS: 0
-Stream ID: 0, packet PTS: 0, packet DTS: 0
 Stream ID: 0, new metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream
-Stream ID: 0, packet PTS: 0, packet DTS: 0
-Stream ID: 0, packet PTS: 0, packet DTS: 0
 Stream ID: 0, frame PTS: 0, metadata: N/A
 Stream ID: 0, packet PTS: 128, packet DTS: 128
 Stream ID: 0, frame PTS: 128, metadata: N/A
-- 
2.39.5 (Apple Git-154)

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [FFmpeg-devel] [PATCH v6 4/4] libavformat/oggdec.h: Change paket function documentation to return 1 on header packets only.
  2025-05-19 14:46 [FFmpeg-devel] [PATCH v6 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
                   ` (2 preceding siblings ...)
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams Romain Beauxis
@ 2025-05-19 14:46 ` Romain Beauxis
  3 siblings, 0 replies; 9+ messages in thread
From: Romain Beauxis @ 2025-05-19 14:46 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Romain Beauxis

---
 libavformat/oggdec.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h
index 5083de646c..c15fbe738e 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -42,8 +42,8 @@ struct ogg_codec {
      * Attempt to process a packet as a data packet
      * @return < 0 (AVERROR) code or -1 on error
      *         == 0 if the packet was a regular data packet.
-     *         == 0 or 1 if the packet was a header from a chained bitstream.
-     *           (1 will cause the packet to be skiped in calling code (ogg_packet())
+     *         == 1 if the packet was a header from a chained bitstream.
+     *            This will cause the packet to be skiped in calling code (ogg_packet()
      */
     int (*packet)(AVFormatContext *, int);
     /**
-- 
2.39.5 (Apple Git-154)

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams Romain Beauxis
@ 2025-05-20 21:45   ` Michael Niedermayer
  2025-05-20 22:45     ` Romain Beauxis
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Niedermayer @ 2025-05-20 21:45 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 1519 bytes --]

On Mon, May 19, 2025 at 09:46:38AM -0500, Romain Beauxis wrote:
> ---
>  libavcodec/vorbis_parser.h                 | 11 ++++
>  libavcodec/vorbisdec.c                     | 76 +++++++++++++---------
>  libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
>  tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
>  4 files changed, 116 insertions(+), 37 deletions(-)

breaks fate here (normal x86-64 ubuntu)

--- ./tests/ref/fate/ogg-vorbis-chained-meta.txt	2025-05-20 23:42:32.043927021 +0200
+++ tests/data/fate/ogg-vorbis-chained-meta	2025-05-20 23:43:07.908216645 +0200
@@ -7,8 +7,4 @@
 Stream ID: 0, frame PTS: 704, metadata: N/A
 Stream ID: 0, packet PTS: 0, packet DTS: 0
 Stream ID: 0, new metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream
-Stream ID: 0, frame PTS: 0, metadata: N/A
 Stream ID: 0, packet PTS: 128, packet DTS: 128
-Stream ID: 0, frame PTS: 128, metadata: N/A
-Stream ID: 0, packet PTS: 704, packet DTS: 704
-Stream ID: 0, frame PTS: 704, metadata: N/A
Test ogg-vorbis-chained-meta failed. Look at tests/data/fate/ogg-vorbis-chained-meta.err for details.
make: *** [tests/Makefile:316: fate-ogg-vorbis-chained-meta] Error 1


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Frequently ignored answer#1 FFmpeg bugs should be sent to our bugtracker. User
questions about the command line tools should be sent to the ffmpeg-user ML.
And questions about how to use libav* should be sent to the libav-user ML.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  2025-05-20 21:45   ` Michael Niedermayer
@ 2025-05-20 22:45     ` Romain Beauxis
  2025-05-21  7:53       ` Michael Niedermayer
  0 siblings, 1 reply; 9+ messages in thread
From: Romain Beauxis @ 2025-05-20 22:45 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le mar. 20 mai 2025 à 16:46, Michael Niedermayer
<michael@niedermayer.cc> a écrit :
>
> On Mon, May 19, 2025 at 09:46:38AM -0500, Romain Beauxis wrote:
> > ---
> >  libavcodec/vorbis_parser.h                 | 11 ++++
> >  libavcodec/vorbisdec.c                     | 76 +++++++++++++---------
> >  libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
> >  tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
> >  4 files changed, 116 insertions(+), 37 deletions(-)
>
> breaks fate here (normal x86-64 ubuntu)
>
> --- ./tests/ref/fate/ogg-vorbis-chained-meta.txt        2025-05-20 23:42:32.043927021 +0200
> +++ tests/data/fate/ogg-vorbis-chained-meta     2025-05-20 23:43:07.908216645 +0200
> @@ -7,8 +7,4 @@
>  Stream ID: 0, frame PTS: 704, metadata: N/A
>  Stream ID: 0, packet PTS: 0, packet DTS: 0
>  Stream ID: 0, new metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream
> -Stream ID: 0, frame PTS: 0, metadata: N/A
>  Stream ID: 0, packet PTS: 128, packet DTS: 128
> -Stream ID: 0, frame PTS: 128, metadata: N/A
> -Stream ID: 0, packet PTS: 704, packet DTS: 704
> -Stream ID: 0, frame PTS: 704, metadata: N/A
> Test ogg-vorbis-chained-meta failed. Look at tests/data/fate/ogg-vorbis-chained-meta.err for details.
> make: *** [tests/Makefile:316: fate-ogg-vorbis-chained-meta] Error 1

I'm not sure what I'm looking at. Is that the output of running the FATE tests?

This diff is already included in the patch:

```
% git show 37370e99451cf0750d5304764ba9031b80e5b3e0 tests/
commit 37370e99451cf0750d5304764ba9031b80e5b3e0 (HEAD)
Author: Romain Beauxis <romain.beauxis@gmail.com>
Date:   Sat May 17 12:59:40 2025 -0500

    ogg/vorbis: implement header packet skip in chained ogg bitstreams.

diff --git a/tests/ref/fate/ogg-vorbis-chained-meta.txt
b/tests/ref/fate/ogg-vorbis-chained-meta.txt
index b7a97c90e2..1206f86c1f 100644
--- a/tests/ref/fate/ogg-vorbis-chained-meta.txt
+++ b/tests/ref/fate/ogg-vorbis-chained-meta.txt
@@ -6,10 +6,7 @@ Stream ID: 0, frame PTS: 128, metadata: N/A
 Stream ID: 0, packet PTS: 704, packet DTS: 704
 Stream ID: 0, frame PTS: 704, metadata: N/A
 Stream ID: 0, packet PTS: 0, packet DTS: 0
-Stream ID: 0, packet PTS: 0, packet DTS: 0
 Stream ID: 0, new metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream
-Stream ID: 0, packet PTS: 0, packet DTS: 0
-Stream ID: 0, packet PTS: 0, packet DTS: 0
 Stream ID: 0, frame PTS: 0, metadata: N/A
 Stream ID: 0, packet PTS: 128, packet DTS: 128
 Stream ID: 0, frame PTS: 128, metadata: N/A
```

> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Frequently ignored answer#1 FFmpeg bugs should be sent to our bugtracker. User
> questions about the command line tools should be sent to the ffmpeg-user ML.
> And questions about how to use libav* should be sent to the libav-user ML.
> _______________________________________________
> 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".
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  2025-05-20 22:45     ` Romain Beauxis
@ 2025-05-21  7:53       ` Michael Niedermayer
  2025-05-21 14:51         ` Romain Beauxis
  0 siblings, 1 reply; 9+ messages in thread
From: Michael Niedermayer @ 2025-05-21  7:53 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


[-- Attachment #1.1: Type: text/plain, Size: 2985 bytes --]

Hi Romain

On Tue, May 20, 2025 at 05:45:01PM -0500, Romain Beauxis wrote:
> Le mar. 20 mai 2025 à 16:46, Michael Niedermayer
> <michael@niedermayer.cc> a écrit :
> >
> > On Mon, May 19, 2025 at 09:46:38AM -0500, Romain Beauxis wrote:
> > > ---
> > >  libavcodec/vorbis_parser.h                 | 11 ++++
> > >  libavcodec/vorbisdec.c                     | 76 +++++++++++++---------
> > >  libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
> > >  tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
> > >  4 files changed, 116 insertions(+), 37 deletions(-)
> >
> > breaks fate here (normal x86-64 ubuntu)
> >
> > --- ./tests/ref/fate/ogg-vorbis-chained-meta.txt        2025-05-20 23:42:32.043927021 +0200
> > +++ tests/data/fate/ogg-vorbis-chained-meta     2025-05-20 23:43:07.908216645 +0200
> > @@ -7,8 +7,4 @@
> >  Stream ID: 0, frame PTS: 704, metadata: N/A
> >  Stream ID: 0, packet PTS: 0, packet DTS: 0
> >  Stream ID: 0, new metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream
> > -Stream ID: 0, frame PTS: 0, metadata: N/A
> >  Stream ID: 0, packet PTS: 128, packet DTS: 128
> > -Stream ID: 0, frame PTS: 128, metadata: N/A
> > -Stream ID: 0, packet PTS: 704, packet DTS: 704
> > -Stream ID: 0, frame PTS: 704, metadata: N/A
> > Test ogg-vorbis-chained-meta failed. Look at tests/data/fate/ogg-vorbis-chained-meta.err for details.
> > make: *** [tests/Makefile:316: fate-ogg-vorbis-chained-meta] Error 1
> 
> I'm not sure what I'm looking at. Is that the output of running the FATE tests?

yes
probably was make fate-ogg-vorbis-chained-meta


> 
> This diff is already included in the patch:
> 
> ```
> % git show 37370e99451cf0750d5304764ba9031b80e5b3e0 tests/
> commit 37370e99451cf0750d5304764ba9031b80e5b3e0 (HEAD)
> Author: Romain Beauxis <romain.beauxis@gmail.com>
> Date:   Sat May 17 12:59:40 2025 -0500
> 
>     ogg/vorbis: implement header packet skip in chained ogg bitstreams.
> 
> diff --git a/tests/ref/fate/ogg-vorbis-chained-meta.txt
> b/tests/ref/fate/ogg-vorbis-chained-meta.txt
> index b7a97c90e2..1206f86c1f 100644
> --- a/tests/ref/fate/ogg-vorbis-chained-meta.txt
> +++ b/tests/ref/fate/ogg-vorbis-chained-meta.txt
> @@ -6,10 +6,7 @@ Stream ID: 0, frame PTS: 128, metadata: N/A
>  Stream ID: 0, packet PTS: 704, packet DTS: 704
>  Stream ID: 0, frame PTS: 704, metadata: N/A
>  Stream ID: 0, packet PTS: 0, packet DTS: 0
> -Stream ID: 0, packet PTS: 0, packet DTS: 0
>  Stream ID: 0, new metadata: encoder=Lavc61.19.100 libvorbis:title=Second Stream
> -Stream ID: 0, packet PTS: 0, packet DTS: 0
> -Stream ID: 0, packet PTS: 0, packet DTS: 0
>  Stream ID: 0, frame PTS: 0, metadata: N/A
>  Stream ID: 0, packet PTS: 128, packet DTS: 128
>  Stream ID: 0, frame PTS: 128, metadata: N/A

These 2 diffs are not the same

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

You can kill me, but you cannot change the truth.

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 251 bytes --]

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  2025-05-21  7:53       ` Michael Niedermayer
@ 2025-05-21 14:51         ` Romain Beauxis
  0 siblings, 0 replies; 9+ messages in thread
From: Romain Beauxis @ 2025-05-21 14:51 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le mer. 21 mai 2025 à 02:53, Michael Niedermayer <michael@niedermayer.cc> a
écrit :
>
> Hi Romain
>
> On Tue, May 20, 2025 at 05:45:01PM -0500, Romain Beauxis wrote:
> > Le mar. 20 mai 2025 à 16:46, Michael Niedermayer
> > <michael@niedermayer.cc> a écrit :
> > >
> > > On Mon, May 19, 2025 at 09:46:38AM -0500, Romain Beauxis wrote:
> > > > ---
> > > >  libavcodec/vorbis_parser.h                 | 11 ++++
> > > >  libavcodec/vorbisdec.c                     | 76
+++++++++++++---------
> > > >  libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
> > > >  tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
> > > >  4 files changed, 116 insertions(+), 37 deletions(-)
> > >
> > > breaks fate here (normal x86-64 ubuntu)
> > >
> > > --- ./tests/ref/fate/ogg-vorbis-chained-meta.txt        2025-05-20
23:42:32.043927021 +0200
> > > +++ tests/data/fate/ogg-vorbis-chained-meta     2025-05-20
23:43:07.908216645 +0200
> > > @@ -7,8 +7,4 @@
> > >  Stream ID: 0, frame PTS: 704, metadata: N/A
> > >  Stream ID: 0, packet PTS: 0, packet DTS: 0
> > >  Stream ID: 0, new metadata: encoder=Lavc61.19.100
libvorbis:title=Second Stream
> > > -Stream ID: 0, frame PTS: 0, metadata: N/A
> > >  Stream ID: 0, packet PTS: 128, packet DTS: 128
> > > -Stream ID: 0, frame PTS: 128, metadata: N/A
> > > -Stream ID: 0, packet PTS: 704, packet DTS: 704
> > > -Stream ID: 0, frame PTS: 704, metadata: N/A
> > > Test ogg-vorbis-chained-meta failed. Look at
tests/data/fate/ogg-vorbis-chained-meta.err for details.
> > > make: *** [tests/Makefile:316: fate-ogg-vorbis-chained-meta] Error 1
> >
> > I'm not sure what I'm looking at. Is that the output of running the
FATE tests?
>
> yes
> probably was make fate-ogg-vorbis-chained-meta

Woof thanks for catching that indeed. One `return` statement had snuck into
my refactorization. About to push a fixed series.

>
> >
> > This diff is already included in the patch:
> >
> > ```
> > % git show 37370e99451cf0750d5304764ba9031b80e5b3e0 tests/
> > commit 37370e99451cf0750d5304764ba9031b80e5b3e0 (HEAD)
> > Author: Romain Beauxis <romain.beauxis@gmail.com>
> > Date:   Sat May 17 12:59:40 2025 -0500
> >
> >     ogg/vorbis: implement header packet skip in chained ogg bitstreams.
> >
> > diff --git a/tests/ref/fate/ogg-vorbis-chained-meta.txt
> > b/tests/ref/fate/ogg-vorbis-chained-meta.txt
> > index b7a97c90e2..1206f86c1f 100644
> > --- a/tests/ref/fate/ogg-vorbis-chained-meta.txt
> > +++ b/tests/ref/fate/ogg-vorbis-chained-meta.txt
> > @@ -6,10 +6,7 @@ Stream ID: 0, frame PTS: 128, metadata: N/A
> >  Stream ID: 0, packet PTS: 704, packet DTS: 704
> >  Stream ID: 0, frame PTS: 704, metadata: N/A
> >  Stream ID: 0, packet PTS: 0, packet DTS: 0
> > -Stream ID: 0, packet PTS: 0, packet DTS: 0
> >  Stream ID: 0, new metadata: encoder=Lavc61.19.100
libvorbis:title=Second Stream
> > -Stream ID: 0, packet PTS: 0, packet DTS: 0
> > -Stream ID: 0, packet PTS: 0, packet DTS: 0
> >  Stream ID: 0, frame PTS: 0, metadata: N/A
> >  Stream ID: 0, packet PTS: 128, packet DTS: 128
> >  Stream ID: 0, frame PTS: 128, metadata: N/A
>
> These 2 diffs are not the same
>
> thx
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> You can kill me, but you cannot change the truth.
> _______________________________________________
> 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".
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-05-21 14:51 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-19 14:46 [FFmpeg-devel] [PATCH v6 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet Romain Beauxis
2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 2/4] ogg/vorbis: factor out header processing logic Romain Beauxis
2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams Romain Beauxis
2025-05-20 21:45   ` Michael Niedermayer
2025-05-20 22:45     ` Romain Beauxis
2025-05-21  7:53       ` Michael Niedermayer
2025-05-21 14:51         ` Romain Beauxis
2025-05-19 14:46 ` [FFmpeg-devel] [PATCH v6 4/4] libavformat/oggdec.h: Change paket function documentation to return 1 on header packets only Romain Beauxis

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