diff options
author | zhaoxiu.zeng <zhaoxiu.zeng@gmail.com> | 2015-02-13 00:03:21 +0800 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-02-13 14:47:58 +0100 |
commit | b4b9a64bdb61dee30008b1e089ab58ca631100e5 (patch) | |
tree | 53769389ac888a7ac4b47c775218e866422f9aa5 | |
parent | b39ac9d210df05c92e57df04ace61f90d6f3b5bd (diff) | |
download | ffmpeg-b4b9a64bdb61dee30008b1e089ab58ca631100e5.tar.gz |
avcodec/vc1: simplify vc1_split()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/vc1_parser.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/libavcodec/vc1_parser.c b/libavcodec/vc1_parser.c index 3a2308ecc6..b2ba7b6160 100644 --- a/libavcodec/vc1_parser.c +++ b/libavcodec/vc1_parser.c @@ -29,6 +29,7 @@ #include "parser.h" #include "vc1.h" #include "get_bits.h" +#include "internal.h" /** The maximum number of bytes of a sequence, entry point or * frame header whose values we pay any attention to */ @@ -250,20 +251,18 @@ static int vc1_parse(AVCodecParserContext *s, static int vc1_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size) { - int i; - uint32_t state= -1; - int charged=0; + uint32_t state = -1; + int charged = 0; + const uint8_t *ptr = buf, *end = buf + buf_size; - for(i=0; i<buf_size; i++){ - state= (state<<8) | buf[i]; - if(IS_MARKER(state)){ - if(state == VC1_CODE_SEQHDR || state == VC1_CODE_ENTRYPOINT){ - charged=1; - }else if(charged){ - return i-3; - } - } + while (ptr < end) { + ptr = avpriv_find_start_code(ptr, end, &state); + if (state == VC1_CODE_SEQHDR || state == VC1_CODE_ENTRYPOINT) { + charged = 1; + } else if (charged && IS_MARKER(state)) + return ptr - 4 - buf; } + return 0; } |