On Sat, May 03, 2025 at 12:03:28PM -0500, Romain Beauxis wrote: > --- > libavformat/oggdec.c | 22 ++++++++++++++-------- > libavformat/oggdec.h | 6 ++++++ > 2 files changed, 20 insertions(+), 8 deletions(-) > > diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c > index 5339fdd32c..9baf8040a9 100644 > --- a/libavformat/oggdec.c > +++ b/libavformat/oggdec.c > @@ -605,20 +605,26 @@ static int ogg_packet(AVFormatContext *s, int *sid, int > *dstart, int *dsize, > } else { > os->pflags = 0; > os->pduration = 0; > + > + ret = 0; > if (os->codec && os->codec->packet) { > if ((ret = os->codec->packet(s, idx)) < 0) { > av_log(s, AV_LOG_ERROR, "Packet processing failed: %s\n", > av_err2str(ret)); > return ret; > } > } > - if (sid) > - *sid = idx; > - if (dstart) > - *dstart = os->pstart; > - if (dsize) > - *dsize = os->psize; > - if (fpos) > - *fpos = os->sync_pos; > + > + if (!ret) { > + if (sid) > + *sid = idx; > + if (dstart) > + *dstart = os->pstart; > + if (dsize) > + *dsize = os->psize; > + if (fpos) > + *fpos = os->sync_pos; > + } > + > os->pstart += os->psize; > os->psize = 0; > if(os->pstart == os->bufpos) > diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h > index 43df23f4cb..09f698f99a 100644 > --- a/libavformat/oggdec.h > +++ b/libavformat/oggdec.h > @@ -38,6 +38,12 @@ struct ogg_codec { > * -1 if an error occurred or for unsupported stream > */ > int (*header)(AVFormatContext *, int); > + /** > + * Attempt to process a packet as a data packet > + * @return 1 if the packet was a header from a chained bitstream. > + * 0 if the packet was a regular data packet. > + * -1 if an error occurred or for unsupported stream > + */ > int (*packet)(AVFormatContext *, int); > /** > * Translate a granule into a timestamp.
Iam still confused by this If this changes the API for ogg_codec.packet() and in the same patch theres a change to ogg_packet() which uses ogg_codec.packet() but then there is a 2nd patch that actually changes the implementations of ogg_codec.packet() : so after the first patch, the API documentation is not correct, I thought that documentation and implementation change would happen in the same patch and the use of the more refined API would then be in a 2nd patch am i missing something here ? --- a/libavformat/oggparseopus.c +++ b/libavformat/oggparseopus.c @@ -125,6 +125,17 @@ static int opus_packet(AVFormatContext *avf, int idx) return AVERROR_INVALIDDATA; } + if (os->psize > 8 && !memcmp(packet, "OpusHead", 8)) { + if ((ret = ff_alloc_extradata(st->codecpar, os->psize)) < 0) + return ret; + + memcpy(st->codecpar->extradata, packet, os->psize); + return 1; + } + + if (os->psize > 8 && !memcmp(packet, "OpusTags", 8)) + return 1; + if ((!os->lastpts || os->lastpts == AV_NOPTS_VALUE) && !(os->flags & OGG_FLAG_EOS)) { int seg, d; int duration; const struct ogg_codec ff_opus_codec = { .name = "Opus", .magic = "OpusHead", .magicsize = 8, .header = opus_header, .packet = opus_packet, .nb_header = 1, diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c index 9f50ab9ffc..8b4ae872d2 100644 --- a/libavformat/oggparsevorbis.c +++ b/libavformat/oggparsevorbis.c @@ -418,6 +418,7 @@ static int vorbis_packet(AVFormatContext *s, int idx) struct ogg_stream *os = ogg->streams + idx; struct oggvorbis_private *priv = os->private; int duration, flags = 0; + int skip_packet = 0; if (!priv->vp) return AVERROR_INVALIDDATA; @@ -480,7 +481,13 @@ 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) { + } + + if (flags & + (VORBIS_FLAG_HEADER | VORBIS_FLAG_COMMENT | VORBIS_FLAG_SETUP)) + skip_packet = 1; + + if (flags & VORBIS_FLAG_COMMENT) { vorbis_update_metadata(s, idx); flags = 0; } @@ -505,7 +512,7 @@ static int vorbis_packet(AVFormatContext *s, int idx) priv->final_duration += os->pduration; } - return 0; + return skip_packet; } > -- > 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-requ...@ffmpeg.org with subject "unsubscribe". > -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I have often repented speaking, but never of holding my tongue. -- Xenocrates
signature.asc
Description: PGP signature
_______________________________________________ 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".