[FFmpeg-devel] [PATCH 12/18] lavf/dv: make returning the video packet optional
Anton Khirnov
anton at khirnov.net
Wed Aug 24 11:43:12 EEST 2022
The mov demuxer only returns DV audio, video packets are discarded.
It first reads the data to be parsed into a packet. Then both this
packet and the pointer to its data are passed together to
avpriv_dv_produce_packet(), which parses the data and partially
overwrites the packet. This is confusing and potentially dangerous, so
just pass NULL and avoid pointless packet modification.
---
libavformat/dv.c | 19 +++++++++++--------
libavformat/mov.c | 2 +-
2 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/libavformat/dv.c b/libavformat/dv.c
index 303cecf9bb..f88fe62349 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -430,14 +430,17 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
}
}
- /* Now it's time to return video packet */
- size = dv_extract_video_info(c, buf);
- pkt->data = buf;
- pkt->pos = pos;
- pkt->size = size;
- pkt->flags |= AV_PKT_FLAG_KEY;
- pkt->stream_index = c->vst->index;
- pkt->pts = c->frames;
+ /* return the video packet, if the caller wants it */
+ if (pkt) {
+ size = dv_extract_video_info(c, buf);
+
+ pkt->data = buf;
+ pkt->pos = pos;
+ pkt->size = size;
+ pkt->flags |= AV_PKT_FLAG_KEY;
+ pkt->stream_index = c->vst->index;
+ pkt->pts = c->frames;
+ }
c->frames++;
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 1d8c5b2904..a2b429e52f 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -8768,7 +8768,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
}
#if CONFIG_DV_DEMUXER
if (mov->dv_demux && sc->dv_audio_container) {
- ret = avpriv_dv_produce_packet(mov->dv_demux, pkt, pkt->data, pkt->size, pkt->pos);
+ ret = avpriv_dv_produce_packet(mov->dv_demux, NULL, pkt->data, pkt->size, pkt->pos);
av_packet_unref(pkt);
if (ret < 0)
return ret;
--
2.35.1
More information about the ffmpeg-devel
mailing list