diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-04-03 18:25:07 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2008-04-03 18:25:07 +0000 |
commit | 7f8ef97534d8f5f8f78216fb46f829ec14418d1b (patch) | |
tree | 118c64fb1f34f3586f15aa014791ba1981bcd611 | |
parent | 60080b0805b5eba528ee443b3808af91b8605a66 (diff) | |
download | ffmpeg-7f8ef97534d8f5f8f78216fb46f829ec14418d1b.tar.gz |
Factorize code a little.
Originally committed as revision 12674 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/mpeg12.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index e4cbcfe39e..4e2df3a1d0 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -2234,16 +2234,16 @@ int ff_mpeg1_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size) return END_NOT_FOUND; } +static int decode_chunks(AVCodecContext *avctx, + AVFrame *picture, int *data_size, + const uint8_t *buf, int buf_size); + /* handle buffering and image synchronisation */ static int mpeg_decode_frame(AVCodecContext *avctx, void *data, int *data_size, const uint8_t *buf, int buf_size) { Mpeg1Context *s = avctx->priv_data; - const uint8_t *buf_end; - const uint8_t *buf_ptr; - uint32_t start_code; - int ret, input_size; AVFrame *picture = data; MpegEncContext *s2 = &s->mpeg_enc_ctx; dprintf(avctx, "fill_buffer\n"); @@ -2266,9 +2266,6 @@ static int mpeg_decode_frame(AVCodecContext *avctx, return buf_size; } - buf_ptr = buf; - buf_end = buf + buf_size; - #if 0 if (s->repeat_field % 2 == 1) { s->repeat_field++; @@ -2286,9 +2283,22 @@ static int mpeg_decode_frame(AVCodecContext *avctx, s->slice_count= 0; + return decode_chunks(avctx, picture, data_size, buf, buf_size); +} + +static int decode_chunks(AVCodecContext *avctx, + AVFrame *picture, int *data_size, + const uint8_t *buf, int buf_size) +{ + Mpeg1Context *s = avctx->priv_data; + MpegEncContext *s2 = &s->mpeg_enc_ctx; + const uint8_t *buf_ptr = buf; + const uint8_t *buf_end = buf + buf_size; + int ret, input_size; + for(;;) { /* find start next code */ - start_code = -1; + uint32_t start_code = -1; buf_ptr = ff_find_start_code(buf_ptr,buf_end, &start_code); if (start_code > 0x1ff){ if(s2->pict_type != FF_B_TYPE || avctx->skip_frame <= AVDISCARD_DEFAULT){ |