[FFmpeg-soc] [soc]: r4377 - seek_api/mpeg.c
spyfeng
subversion at mplayerhq.hu
Wed Jun 3 20:09:37 CEST 2009
Author: spyfeng
Date: Wed Jun 3 20:09:37 2009
New Revision: 4377
Log:
check the target timestamp and returned timestamp before finding the keyframe
Modified:
seek_api/mpeg.c
Modified: seek_api/mpeg.c
==============================================================================
--- seek_api/mpeg.c Tue Jun 2 13:58:23 2009 (r4376)
+++ seek_api/mpeg.c Wed Jun 3 20:09:37 2009 (r4377)
@@ -605,6 +605,7 @@ static int mpegps_read_seek(struct AVFor
AVPacket pkt1, *pkt = &pkt1;
int64_t pos, pts, ret_ts, av_uninit(pos_min), av_uninit(pos_max), pos_limit = -1;
flags = flags | (ts - min_ts > (uint64_t)(max_ts - ts) ? AVSEEK_FLAG_BACKWARD : 0);
+
if (stream_index < 0){
stream_index= av_find_default_stream_index(s);
if(stream_index < 0)
@@ -651,6 +652,7 @@ static int mpegps_read_seek(struct AVFor
url_fseek(s->pb, pos, SEEK_SET);
av_log(s, AV_LOG_DEBUG, "the seek pos = %"PRId64"\n", pos);
+ if (ts >= ret_ts) {
// find the keyframe
for (;;) {
if (av_read_frame(s, pkt) < 0){
@@ -661,12 +663,12 @@ static int mpegps_read_seek(struct AVFor
if(pkt->flags&PKT_FLAG_KEY){
pos = pkt->pos;
pts= pkt->pts;
- av_log(s, AV_LOG_DEBUG, "keyframe pos = %"PRId64"\n", pos);
+ av_log(s, AV_LOG_DEBUG, "keyframe pos = %"PRId64" pts = %"PRId64"\n", pos, pts);
break;
}
}
-
- av_update_cur_dts(s, st, pts);
+ }
+ av_update_cur_dts(s, st, ret_ts);
return 0;
}
More information about the FFmpeg-soc
mailing list