aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2014-10-14 01:15:30 +0200
committerMarton Balint <cus@passwd.hu>2014-11-09 13:48:18 +0100
commit7ba727777587c1a83fb1f54bde5f960376e90dca (patch)
tree0151abc053449e4ebb3e1968c16b0acff2909df3
parentcc4741888d7fa74074a295158fcbb88475a08a88 (diff)
downloadffmpeg-7ba727777587c1a83fb1f54bde5f960376e90dca.tar.gz
ffplay: only output null packet once on EOF
The generic decoder properly flushes the codecs with one null packet as well. Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r--ffplay.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/ffplay.c b/ffplay.c
index a3b34fd966..e04f622488 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -3110,27 +3110,25 @@ static int read_thread(void *arg)
goto fail;
}
}
- if (eof) {
- if (is->video_stream >= 0)
- packet_queue_put_nullpacket(&is->videoq, is->video_stream);
- if (is->audio_stream >= 0)
- packet_queue_put_nullpacket(&is->audioq, is->audio_stream);
- if (is->subtitle_stream >= 0)
- packet_queue_put_nullpacket(&is->subtitleq, is->subtitle_stream);
- SDL_Delay(10);
- eof=0;
- continue;
- }
ret = av_read_frame(ic, pkt);
if (ret < 0) {
- if (ret == AVERROR_EOF || avio_feof(ic->pb))
+ if ((ret == AVERROR_EOF || avio_feof(ic->pb)) && !eof) {
+ if (is->video_stream >= 0)
+ packet_queue_put_nullpacket(&is->videoq, is->video_stream);
+ if (is->audio_stream >= 0)
+ packet_queue_put_nullpacket(&is->audioq, is->audio_stream);
+ if (is->subtitle_stream >= 0)
+ packet_queue_put_nullpacket(&is->subtitleq, is->subtitle_stream);
eof = 1;
+ }
if (ic->pb && ic->pb->error)
break;
SDL_LockMutex(wait_mutex);
SDL_CondWaitTimeout(is->continue_read_thread, wait_mutex, 10);
SDL_UnlockMutex(wait_mutex);
continue;
+ } else {
+ eof = 0;
}
/* check if packet is in play range specified by user, then queue, otherwise discard */
stream_start_time = ic->streams[pkt->stream_index]->start_time;