aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2008-04-03 18:25:07 +0000
committerMichael Niedermayer <michaelni@gmx.at>2008-04-03 18:25:07 +0000
commit7f8ef97534d8f5f8f78216fb46f829ec14418d1b (patch)
tree118c64fb1f34f3586f15aa014791ba1981bcd611
parent60080b0805b5eba528ee443b3808af91b8605a66 (diff)
downloadffmpeg-7f8ef97534d8f5f8f78216fb46f829ec14418d1b.tar.gz
Factorize code a little.
Originally committed as revision 12674 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/mpeg12.c26
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){