diff options
author | Marton Balint <cus@passwd.hu> | 2014-10-14 01:15:30 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2014-11-09 13:48:18 +0100 |
commit | 7ba727777587c1a83fb1f54bde5f960376e90dca (patch) | |
tree | 0151abc053449e4ebb3e1968c16b0acff2909df3 | |
parent | cc4741888d7fa74074a295158fcbb88475a08a88 (diff) | |
download | ffmpeg-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.c | 22 |
1 files changed, 10 insertions, 12 deletions
@@ -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; |