aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2016-06-11 11:33:46 +0200
committerMarton Balint <cus@passwd.hu>2016-06-19 23:35:22 +0200
commit8594a8fbf9b0af99e5b5b149831a47478be4aff0 (patch)
tree6acba67f29a187d394515c8b502714a2afbc1d38
parentcc16229d914aa0eea827599f9df7716bb2afa36b (diff)
downloadffmpeg-8594a8fbf9b0af99e5b5b149831a47478be4aff0.tar.gz
ffplay: factorize checking if a stream needs additional packets
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r--ffplay.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/ffplay.c b/ffplay.c
index 11c5091ee0..9f5b2a4934 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -2796,6 +2796,13 @@ static int decode_interrupt_cb(void *ctx)
return is->abort_request;
}
+static int stream_has_enough_packets(AVStream *st, int stream_id, PacketQueue *queue) {
+ return stream_id < 0 ||
+ queue->abort_request ||
+ (st->disposition & AV_DISPOSITION_ATTACHED_PIC) ||
+ queue->nb_packets > MIN_FRAMES;
+}
+
static int is_realtime(AVFormatContext *s)
{
if( !strcmp(s->iformat->name, "rtp")
@@ -3060,10 +3067,9 @@ static int read_thread(void *arg)
/* if the queue are full, no need to read more */
if (infinite_buffer<1 &&
(is->audioq.size + is->videoq.size + is->subtitleq.size > MAX_QUEUE_SIZE
- || ( (is->audioq .nb_packets > MIN_FRAMES || is->audio_stream < 0 || is->audioq.abort_request)
- && (is->videoq .nb_packets > MIN_FRAMES || is->video_stream < 0 || is->videoq.abort_request
- || (is->video_st->disposition & AV_DISPOSITION_ATTACHED_PIC))
- && (is->subtitleq.nb_packets > MIN_FRAMES || is->subtitle_stream < 0 || is->subtitleq.abort_request)))) {
+ || (stream_has_enough_packets(is->audio_st, is->audio_stream, &is->audioq) &&
+ stream_has_enough_packets(is->video_st, is->video_stream, &is->videoq) &&
+ stream_has_enough_packets(is->subtitle_st, is->subtitle_stream, &is->subtitleq)))) {
/* wait 10 ms */
SDL_LockMutex(wait_mutex);
SDL_CondWaitTimeout(is->continue_read_thread, wait_mutex, 10);