diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-06-26 09:09:01 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-07-28 06:29:58 +0200 |
commit | dfd12ee053c0dbcb590ad5c758df6bb3b38777ea (patch) | |
tree | 38303d4db334e3ce62649d3cee02e6e8e43f2da8 /libavformat/smacker.c | |
parent | 0df4e1ff930fedbcc7bf7b77acc7db101ce07c0b (diff) | |
download | ffmpeg-dfd12ee053c0dbcb590ad5c758df6bb3b38777ea.tar.gz |
avformat/smacker: Don't return packets for streams with AVDISCARD_ALL
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat/smacker.c')
-rw-r--r-- | libavformat/smacker.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libavformat/smacker.c b/libavformat/smacker.c index b7a68a63f3..9966a67055 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -308,8 +308,11 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) smk->frame_size -= size; size -= 4; - if (smk->indexes[i] < 0) { - avio_skip(s->pb, size); + if (smk->indexes[i] < 0 || + s->streams[smk->indexes[i]]->discard >= AVDISCARD_ALL) { + smk->aud_pts[i] += smk->duration_size[i] ? avio_rl32(s->pb) + : size; + avio_skip(s->pb, size - smk->duration_size[i]); continue; } if ((ret = av_get_packet(s->pb, pkt, size)) != size) { @@ -326,6 +329,10 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) } } + if (s->streams[smk->videoindex]->discard >= AVDISCARD_ALL) { + ret = FFERROR_REDO; + goto next_frame; + } if (smk->frame_size >= INT_MAX/2) { ret = AVERROR_INVALIDDATA; goto next_frame; |