From 814869759c59ed3ce16604837fbf55e4f5ff7392 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Wed, 2 May 2018 19:29:11 -0700 Subject: demux, player: fix playback of sparse video streams (w/ still images) Fixes several issues playing back mpegts with video streams marked as having "still images". For example, see this video which has frames only every 6s: https://s3.amazonaws.com/tmm1/music-choice.ts Changes include: - start playback right away, without waiting for first video frame - do not consider the sparse video stream in demuxer underrun detection - do not require multiple video frames for the VO - use audio as the master stream for demuxer metadata events - use audio stream for playback time Signed-off-by: Aman Gupta --- demux/demux_lavf.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'demux/demux_lavf.c') diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 2049cf6c47..555df9406d 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -53,6 +53,9 @@ #ifndef AV_DISPOSITION_TIMED_THUMBNAILS #define AV_DISPOSITION_TIMED_THUMBNAILS 0 #endif +#ifndef AV_DISPOSITION_STILL_IMAGE +#define AV_DISPOSITION_STILL_IMAGE 0 +#endif #define INITIAL_PROBE_SIZE STREAM_BUFFER_SIZE #define PROBE_BUF_SIZE FFMIN(STREAM_MAX_BUFFER_SIZE, 2 * 1024 * 1024) @@ -717,6 +720,8 @@ static void handle_new_stream(demuxer_t *demuxer, int i) sh->forced_track = true; if (st->disposition & AV_DISPOSITION_DEPENDENT) sh->dependent_track = true; + if (st->disposition & AV_DISPOSITION_STILL_IMAGE) + sh->still_image = true; if (priv->format_hack.use_stream_ids) sh->demuxer_id = st->id; AVDictionaryEntry *title = av_dict_get(st->metadata, "title", NULL, 0); -- cgit v1.2.3