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>
This commit is contained in:
parent
cc4741888d
commit
7ba7277775
22
ffplay.c
22
ffplay.c
@ -3110,27 +3110,25 @@ static int read_thread(void *arg)
|
|||||||
goto fail;
|
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);
|
ret = av_read_frame(ic, pkt);
|
||||||
if (ret < 0) {
|
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;
|
eof = 1;
|
||||||
|
}
|
||||||
if (ic->pb && ic->pb->error)
|
if (ic->pb && ic->pb->error)
|
||||||
break;
|
break;
|
||||||
SDL_LockMutex(wait_mutex);
|
SDL_LockMutex(wait_mutex);
|
||||||
SDL_CondWaitTimeout(is->continue_read_thread, wait_mutex, 10);
|
SDL_CondWaitTimeout(is->continue_read_thread, wait_mutex, 10);
|
||||||
SDL_UnlockMutex(wait_mutex);
|
SDL_UnlockMutex(wait_mutex);
|
||||||
continue;
|
continue;
|
||||||
|
} else {
|
||||||
|
eof = 0;
|
||||||
}
|
}
|
||||||
/* check if packet is in play range specified by user, then queue, otherwise discard */
|
/* check if packet is in play range specified by user, then queue, otherwise discard */
|
||||||
stream_start_time = ic->streams[pkt->stream_index]->start_time;
|
stream_start_time = ic->streams[pkt->stream_index]->start_time;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user