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 v7 0/4] Remove chained ogg stream header packets from the demuxer
@ 2025-05-21 22:05 Romain Beauxis
  2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 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; 8+ messages in thread
From: Romain Beauxis @ 2025-05-21 22:05 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Romain Beauxis

## Changes since last revision:
* Removed invalid return statement in vorbisdec.c

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                     |  75 +++++----
 libavformat/oggdec.c                       |  11 ++
 libavformat/oggdec.h                       |   6 +-
 libavformat/oggparsevorbis.c               | 167 +++++++++++++++------
 tests/ref/fate/ogg-vorbis-chained-meta.txt |   3 -
 6 files changed, 190 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] 8+ messages in thread

* [FFmpeg-devel] [PATCH v7 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet.
  2025-05-21 22:05 [FFmpeg-devel] [PATCH v7 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
@ 2025-05-21 22:05 ` Romain Beauxis
  2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 2/4] ogg/vorbis: factor out header processing logic Romain Beauxis
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Romain Beauxis @ 2025-05-21 22:05 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] 8+ messages in thread

* [FFmpeg-devel] [PATCH v7 2/4] ogg/vorbis: factor out header processing logic.
  2025-05-21 22:05 [FFmpeg-devel] [PATCH v7 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
  2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet Romain Beauxis
@ 2025-05-21 22:05 ` Romain Beauxis
  2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams Romain Beauxis
  2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 4/4] libavformat/oggdec.h: Change paket function documentation to return 1 on header packets only Romain Beauxis
  3 siblings, 0 replies; 8+ messages in thread
From: Romain Beauxis @ 2025-05-21 22:05 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] 8+ messages in thread

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

---
 libavcodec/vorbis_parser.h                 | 11 ++++
 libavcodec/vorbisdec.c                     | 75 +++++++++++++---------
 libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
 tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
 4 files changed, 115 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..6c5d3fa50f 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,59 @@ 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;
+        }
 
-        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] 8+ messages in thread

* [FFmpeg-devel] [PATCH v7 4/4] libavformat/oggdec.h: Change paket function documentation to return 1 on header packets only.
  2025-05-21 22:05 [FFmpeg-devel] [PATCH v7 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
                   ` (2 preceding siblings ...)
  2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams Romain Beauxis
@ 2025-05-21 22:05 ` Romain Beauxis
  3 siblings, 0 replies; 8+ messages in thread
From: Romain Beauxis @ 2025-05-21 22:05 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] 8+ messages in thread

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


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

Hi Romain

On Wed, May 21, 2025 at 05:05:37PM -0500, Romain Beauxis wrote:
> ---
>  libavcodec/vorbis_parser.h                 | 11 ++++
>  libavcodec/vorbisdec.c                     | 75 +++++++++++++---------
>  libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
>  tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
>  4 files changed, 115 insertions(+), 37 deletions(-)

make -j32 libavformat/tests/seek && libavformat/tests/seek ~/tickets/2739/lavf_ogm_seeking_borked.ogm
CC	libavcodec/libvorbisenc.o
CC	libavcodec/version.o
CC	libavcodec/vorbis_parser.o
CC	libavcodec/vorbisdec.o
CC	libswresample/version.o
CC	libavutil/version.o
CC	libavformat/oggparsevorbis.o
CC	libavformat/version.o
AR	libswresample/libswresample.a
AR	libavutil/libavutil.a
AR	libavcodec/libavcodec.a
AR	libavformat/libavformat.a
LD	libavformat/tests/seek
[ogg @ 0x558349c4f3c0] Headers mismatch for stream 1: expected 3 received 2.
[ogg @ 0x558349c4f3c0] Headers mismatch for stream 2: expected 3 received 2.
ret: 0         st: 0 flags:1 dts:-0.083417 pts: 0.000000 pos:    887 size:  3347
ret: 0         st:-1 flags:0  ts:-1.000000
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    887 size:  3347
ret: 0         st:-1 flags:1  ts: 1.894167
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    887 size:  3347
ret: 0         st: 0 flags:0  ts: 0.792458
ret: 0         st: 1 flags:1 dts: 12.481333 pts: 12.481333 pos:2855209 size:   269
ret: 0         st: 0 flags:1  ts:-0.333666
ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    887 size:  3347
ret: 0         st: 1 flags:0  ts: 2.576667
ret: 0         st: 1 flags:1 dts: 2.785333 pts: 2.785333 pos: 559697 size:   255
ret: 0         st: 1 flags:1  ts: 1.470833
ret: 0         st: 1 flags:1 dts: 1.164000 pts: 1.164000 pos: 192278 size:   275
ret: 0         st: 2 flags:0  ts: 0.365000
ret: 0         st: 2 flags:1 dts: 0.332000 pts: 0.332000 pos:  18959 size:   271
Segmentation fault (core dumped)

on samples server: ffmpeg-bugs/trac/ticket2739/lavf_ogm_seeking_borked.ogm

thx

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

The worst form of inequality is to try to make unequal things equal.
-- Aristotle

[-- 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] 8+ messages in thread

* Re: [FFmpeg-devel] [PATCH v7 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  2025-05-24  0:40   ` Michael Niedermayer
@ 2025-05-24 18:08     ` Romain Beauxis
  2025-05-25 20:25       ` Michael Niedermayer
  0 siblings, 1 reply; 8+ messages in thread
From: Romain Beauxis @ 2025-05-24 18:08 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le ven. 23 mai 2025 à 19:40, Michael Niedermayer <michael@niedermayer.cc> a
écrit :
>
> Hi Romain
>
> On Wed, May 21, 2025 at 05:05:37PM -0500, Romain Beauxis wrote:
> > ---
> >  libavcodec/vorbis_parser.h                 | 11 ++++
> >  libavcodec/vorbisdec.c                     | 75 +++++++++++++---------
> >  libavformat/oggparsevorbis.c               | 63 +++++++++++++++++-
> >  tests/ref/fate/ogg-vorbis-chained-meta.txt |  3 -
> >  4 files changed, 115 insertions(+), 37 deletions(-)
>
> make -j32 libavformat/tests/seek && libavformat/tests/seek
~/tickets/2739/lavf_ogm_seeking_borked.ogm
> CC      libavcodec/libvorbisenc.o
> CC      libavcodec/version.o
> CC      libavcodec/vorbis_parser.o
> CC      libavcodec/vorbisdec.o
> CC      libswresample/version.o
> CC      libavutil/version.o
> CC      libavformat/oggparsevorbis.o
> CC      libavformat/version.o
> AR      libswresample/libswresample.a
> AR      libavutil/libavutil.a
> AR      libavcodec/libavcodec.a
> AR      libavformat/libavformat.a
> LD      libavformat/tests/seek
> [ogg @ 0x558349c4f3c0] Headers mismatch for stream 1: expected 3 received
2.
> [ogg @ 0x558349c4f3c0] Headers mismatch for stream 2: expected 3 received
2.
> ret: 0         st: 0 flags:1 dts:-0.083417 pts: 0.000000 pos:    887
size:  3347
> ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    887
size:  3347
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    887
size:  3347
> ret: 0         st: 0 flags:0  ts: 0.792458
> ret: 0         st: 1 flags:1 dts: 12.481333 pts: 12.481333 pos:2855209
size:   269
> ret: 0         st: 0 flags:1  ts:-0.333666
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:    887
size:  3347
> ret: 0         st: 1 flags:0  ts: 2.576667
> ret: 0         st: 1 flags:1 dts: 2.785333 pts: 2.785333 pos: 559697
size:   255
> ret: 0         st: 1 flags:1  ts: 1.470833
> ret: 0         st: 1 flags:1 dts: 1.164000 pts: 1.164000 pos: 192278
size:   275
> ret: 0         st: 2 flags:0  ts: 0.365000
> ret: 0         st: 2 flags:1 dts: 0.332000 pts: 0.332000 pos:  18959
size:   271
> Segmentation fault (core dumped)
>
> on samples server: ffmpeg-bugs/trac/ticket2739/lavf_ogm_seeking_borked.ogm

Thanks for pointing this one out. I got tricked by the permissive memory
model on macos where it wouldn't segfault but was able to reproduce and fix
on a debian machine.

I'm gonna send an updated patchset. I've also added a FATE test for this
sample, given it's importance during this review, it seems natural to
include it.

-- Romain

> thx
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> The worst form of inequality is to try to make unequal things equal.
> -- Aristotle
> _______________________________________________
> 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] 8+ messages in thread

* Re: [FFmpeg-devel] [PATCH v7 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams.
  2025-05-24 18:08     ` Romain Beauxis
@ 2025-05-25 20:25       ` Michael Niedermayer
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Niedermayer @ 2025-05-25 20:25 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


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

Hi Romain

On Sat, May 24, 2025 at 01:08:06PM -0500, Romain Beauxis wrote:
[...]
> I'm gonna send an updated patchset. I've also added a FATE test for this
> sample, given it's importance during this review, it seems natural to
> include it.

yes, tests are important
thank you

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

It is a danger to trust the dream we wish for rather than
the science we have, -- Dr. Kenneth Brown

[-- 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] 8+ messages in thread

end of thread, other threads:[~2025-05-25 20:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-21 22:05 [FFmpeg-devel] [PATCH v7 0/4] Remove chained ogg stream header packets from the demuxer Romain Beauxis
2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 1/4] libavformat/oggdec.{c, h}: Add new_extradata, use it to pass extradata to the next decoded packet Romain Beauxis
2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 2/4] ogg/vorbis: factor out header processing logic Romain Beauxis
2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 3/4] ogg/vorbis: implement header packet skip in chained ogg bitstreams Romain Beauxis
2025-05-24  0:40   ` Michael Niedermayer
2025-05-24 18:08     ` Romain Beauxis
2025-05-25 20:25       ` Michael Niedermayer
2025-05-21 22:05 ` [FFmpeg-devel] [PATCH v7 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