diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2006-11-16 10:20:29 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2006-11-16 10:20:29 +0000 |
commit | 0a3b575bc7b474967f6fca53754f34b71ee172fb (patch) | |
tree | ad36aac8d6337813e652951f0ebbbb38ab5a42c1 /libavformat | |
parent | c873bc17bf6da4d82897033aa97cda3d9fe5683f (diff) | |
download | ffmpeg-0a3b575bc7b474967f6fca53754f34b71ee172fb.tar.gz |
skip non keyframes after seeking between syncpoint and the first keyframe
Originally committed as revision 7099 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/nutdec.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index 96538e5496..32af334a15 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -704,11 +704,15 @@ static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code){ if(size < 0) return -1; + if (flags & FLAG_KEY) + nut->stream[stream_id].skip_until_key_frame=0; + discard= s->streams[ stream_id ]->discard; last_IP_pts= s->streams[ stream_id ]->last_IP_pts; if( (discard >= AVDISCARD_NONKEY && !(flags & FLAG_KEY)) ||(discard >= AVDISCARD_BIDIR && last_IP_pts != AV_NOPTS_VALUE && last_IP_pts > pts) - || discard >= AVDISCARD_ALL){ + || discard >= AVDISCARD_ALL + || nut->stream[stream_id].skip_until_key_frame){ url_fskip(bc, size); return 1; } @@ -813,6 +817,7 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flag syncpoint_t nopts_sp= {.ts= AV_NOPTS_VALUE, .back_ptr= AV_NOPTS_VALUE}; syncpoint_t *sp, *next_node[2]= {&nopts_sp, &nopts_sp}; int64_t pos, pos2, ts; + int i; if(st->index_entries){ int index= av_index_search_timestamp(st, pts, flags); @@ -851,6 +856,9 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flag if(pos2 > pos || pos2 + 15 < pos){ av_log(NULL, AV_LOG_ERROR, "no syncpoint at backptr pos\n"); } + for(i=0; i<s->nb_streams; i++) + nut->stream[i].skip_until_key_frame=1; + return 0; } |