diff options
author | Pierre-Anthony Lemieux <pal@palemieux.com> | 2022-09-19 08:26:18 -0700 |
---|---|---|
committer | Zane van Iperen <zane@zanevaniperen.com> | 2022-09-28 11:54:52 +1000 |
commit | 0e402ebf487075727187c78f85908a492eed3e59 (patch) | |
tree | f49daaed92079cda91386c2c3598b1bd9a4cf581 /libavformat/imfdec.c | |
parent | 0bc7ba448868f74866800f956ad7e4835b976f47 (diff) | |
download | ffmpeg-0e402ebf487075727187c78f85908a492eed3e59.tar.gz |
format/imfdec: improve error handling when selecting tracks for playback
Reviewed-by: Zane van Iperen <zane@zanevaniperen.com>
Diffstat (limited to 'libavformat/imfdec.c')
-rw-r--r-- | libavformat/imfdec.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/libavformat/imfdec.c b/libavformat/imfdec.c index fde91a6419..4e60dcc4ba 100644 --- a/libavformat/imfdec.c +++ b/libavformat/imfdec.c @@ -686,8 +686,11 @@ static IMFVirtualTrackPlaybackCtx *get_next_track_with_minimum_timestamp(AVForma { IMFContext *c = s->priv_data; IMFVirtualTrackPlaybackCtx *track; - AVRational minimum_timestamp = av_make_q(INT32_MAX, 1); + + if (!c->track_count) + return NULL; + for (uint32_t i = c->track_count; i > 0; i--) { av_log(s, AV_LOG_TRACE, "Compare track %d timestamp " AVRATIONAL_FORMAT " to minimum " AVRATIONAL_FORMAT @@ -702,8 +705,6 @@ static IMFVirtualTrackPlaybackCtx *get_next_track_with_minimum_timestamp(AVForma } } - av_log(s, AV_LOG_DEBUG, "Found next track to read: %d (timestamp: %lf / %lf)\n", - track->index, av_q2d(track->current_timestamp), av_q2d(minimum_timestamp)); return track; } @@ -766,6 +767,14 @@ static int imf_read_packet(AVFormatContext *s, AVPacket *pkt) track = get_next_track_with_minimum_timestamp(s); + if (!track) { + av_log(s, AV_LOG_ERROR, "No track found for playback\n"); + return AVERROR_INVALIDDATA; + } + + av_log(s, AV_LOG_DEBUG, "Found track %d to read at timestamp %lf\n", + track->index, av_q2d(track->current_timestamp)); + ret = get_resource_context_for_timestamp(s, track, &resource); if (ret) return ret; |