|
|
|
@ -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; |
|
|
|
|