diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2010-07-01 13:50:15 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2010-07-01 13:50:15 +0000 |
commit | 8a472821a4713dbfd150460fc203190e7c055141 (patch) | |
tree | 6520becbb167214b9dd4a117eb93a4a7bd24eef6 /libavformat/avidec.c | |
parent | 2cbd734a384377f664945fe43c2d44b79f6020d2 (diff) | |
download | ffmpeg-streaming-8a472821a4713dbfd150460fc203190e7c055141.zip ffmpeg-streaming-8a472821a4713dbfd150460fc203190e7c055141.tar.gz |
Factorize get_duration() out of 4 places of the avi demuxer.
Originally committed as revision 23934 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/avidec.c')
-rw-r--r-- | libavformat/avidec.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 7dc528a..9037650 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -89,6 +89,13 @@ static void print_tag(const char *str, unsigned int tag, int size) } #endif +static inline int get_duration(AVIStream *ast, int len){ + if(ast->sample_size){ + return len; + }else + return 1; +} + static int get_riff(AVFormatContext *s, ByteIOContext *pb) { AVIContext *avi = s->priv_data; @@ -175,10 +182,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ if(last_pos != pos && (len || !ast->sample_size)) av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0); - if(ast->sample_size) - ast->cum_len += len; - else - ast->cum_len ++; + ast->cum_len += get_duration(ast, len); last_pos= pos; }else{ int64_t offset, pos; @@ -821,10 +825,7 @@ resync: } else { pkt->flags |= AV_PKT_FLAG_KEY; } - if(ast->sample_size) - ast->frame_offset += pkt->size; - else - ast->frame_offset++; + ast->frame_offset += get_duration(ast, pkt->size); } ast->remaining -= size; if(!ast->remaining){ @@ -906,8 +907,7 @@ resync: if( (st->discard >= AVDISCARD_DEFAULT && size==0) /*|| (st->discard >= AVDISCARD_NONKEY && !(pkt->flags & AV_PKT_FLAG_KEY))*/ //FIXME needs a little reordering || st->discard >= AVDISCARD_ALL){ - if(ast->sample_size) ast->frame_offset += size; - else ast->frame_offset++; + ast->frame_offset += get_duration(ast, size); url_fskip(pb, size); goto resync; } @@ -1000,10 +1000,7 @@ static int avi_read_idx1(AVFormatContext *s, int size) avi->non_interleaved= 1; else if(len || !ast->sample_size) av_add_index_entry(st, pos, ast->cum_len, len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0); - if(ast->sample_size) - ast->cum_len += len; - else - ast->cum_len ++; + ast->cum_len += get_duration(ast, len); last_pos= pos; } return 0; |