From e6c0297f1ca2234477aafc62e76a6428c56595d7 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 10 Jan 2004 22:36:35 +0000 Subject: [PATCH] fixing some seek failure issues Originally committed as revision 2688 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffplay.c | 13 +++++++------ libavformat/avidec.c | 4 +++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ffplay.c b/ffplay.c index c5c2ca1349..6fbb91e158 100644 --- a/ffplay.c +++ b/ffplay.c @@ -1406,15 +1406,16 @@ static int decode_thread(void *arg) #endif if (is->seek_req) { /* XXX: must lock decoder threads */ - if (is->audio_stream >= 0) { - packet_queue_flush(&is->audioq); - } - if (is->video_stream >= 0) { - packet_queue_flush(&is->videoq); - } ret = av_seek_frame(is->ic, -1, is->seek_pos); if (ret < 0) { fprintf(stderr, "%s: error while seeking\n", is->ic->filename); + }else{ + if (is->audio_stream >= 0) { + packet_queue_flush(&is->audioq); + } + if (is->video_stream >= 0) { + packet_queue_flush(&is->videoq); + } } is->seek_req = 0; } diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 551e906cd4..361a52ff36 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -496,7 +496,8 @@ static int avi_load_index(AVFormatContext *s) AVIContext *avi = s->priv_data; ByteIOContext *pb = &s->pb; uint32_t tag, size; - + offset_t pos= url_ftell(pb); + url_fseek(pb, avi->movi_end, SEEK_SET); #ifdef DEBUG_SEEK printf("movi_end=0x%llx\n", avi->movi_end); @@ -529,6 +530,7 @@ static int avi_load_index(AVFormatContext *s) } } the_end: + url_fseek(pb, pos, SEEK_SET); return 0; }