[FFmpeg-devel] [PATCH v4 2/6] libavformat/oggdec.{c, h}: Implement packet skip on packet return value of 1
Romain Beauxis
romain.beauxis at gmail.com
Tue May 6 17:19:28 EEST 2025
---
libavformat/oggdec.c | 22 ++++++++++++++--------
libavformat/oggdec.h | 1 +
2 files changed, 15 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 5225b77a07..bc670d0f1e 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -43,6 +43,7 @@ struct ogg_codec {
* @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())
*/
int (*packet)(AVFormatContext *, int);
/**
--
2.39.5 (Apple Git-154)
More information about the ffmpeg-devel
mailing list