Commit a2a98637 authored by Kostya Shishkov's avatar Kostya Shishkov

Factorize stream reading in TM2 decoder

Originally committed as revision 16917 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 3ffabd4e
...@@ -757,13 +757,17 @@ static int tm2_decode_blocks(TM2Context *ctx, AVFrame *p) ...@@ -757,13 +757,17 @@ static int tm2_decode_blocks(TM2Context *ctx, AVFrame *p)
return keyframe; return keyframe;
} }
static const int tm2_stream_order[TM2_NUM_STREAMS] = {
TM2_C_HI, TM2_C_LO, TM2_L_HI, TM2_L_LO, TM2_UPD, TM2_MOT, TM2_TYPE
};
static int decode_frame(AVCodecContext *avctx, static int decode_frame(AVCodecContext *avctx,
void *data, int *data_size, void *data, int *data_size,
const uint8_t *buf, int buf_size) const uint8_t *buf, int buf_size)
{ {
TM2Context * const l = avctx->priv_data; TM2Context * const l = avctx->priv_data;
AVFrame * const p= (AVFrame*)&l->pic; AVFrame * const p= (AVFrame*)&l->pic;
int skip, t; int i, skip, t;
p->reference = 1; p->reference = 1;
p->buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE; p->buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;
...@@ -778,33 +782,13 @@ static int decode_frame(AVCodecContext *avctx, ...@@ -778,33 +782,13 @@ static int decode_frame(AVCodecContext *avctx,
if(skip == -1) if(skip == -1)
return -1; return -1;
t = tm2_read_stream(l, buf + skip, TM2_C_HI); for(i = 0; i < TM2_NUM_STREAMS; i++){
if(t == -1) t = tm2_read_stream(l, buf + skip, tm2_stream_order[i]);
return -1; if(t == -1){
skip += t; return -1;
t = tm2_read_stream(l, buf + skip, TM2_C_LO); }
if(t == -1) skip += t;
return -1; }
skip += t;
t = tm2_read_stream(l, buf + skip, TM2_L_HI);
if(t == -1)
return -1;
skip += t;
t = tm2_read_stream(l, buf + skip, TM2_L_LO);
if(t == -1)
return -1;
skip += t;
t = tm2_read_stream(l, buf + skip, TM2_UPD);
if(t == -1)
return -1;
skip += t;
t = tm2_read_stream(l, buf + skip, TM2_MOT);
if(t == -1)
return -1;
skip += t;
t = tm2_read_stream(l, buf + skip, TM2_TYPE);
if(t == -1)
return -1;
p->key_frame = tm2_decode_blocks(l, p); p->key_frame = tm2_decode_blocks(l, p);
if(p->key_frame) if(p->key_frame)
p->pict_type = FF_I_TYPE; p->pict_type = FF_I_TYPE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment