Browse Source

msmpeg4v2 header parser & some dump bits code behind #if 0

Originally committed as revision 368 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Michael Niedermayer 23 years ago
parent
commit
7f89b6fbdc
1 changed files with 57 additions and 1 deletions
  1. +57
    -1
      libavcodec/msmpeg4.c

+ 57
- 1
libavcodec/msmpeg4.c View File

@@ -670,7 +670,7 @@ static int decode012(GetBitContext *gb)
return get_bits1(gb) + 1;
}

int msmpeg4_decode_picture_header(MpegEncContext * s)
int msmpeg4v2_decode_picture_header(MpegEncContext * s)
{
int code;

@@ -681,6 +681,62 @@ int msmpeg4_decode_picture_header(MpegEncContext * s)

s->qscale = get_bits(&s->gb, 5);

if (s->pict_type == I_TYPE) {
code = get_bits(&s->gb, 5);
/* 0x17: one slice, 0x18: three slices */
/* XXX: implement it */
//printf("%d %d %d\n", code, s->slice_height, s->first_slice_line);
if (code < 0x17)
return -1;
s->slice_height = s->mb_height / (code - 0x16);
/* s->rl_chroma_table_index = decode012(&s->gb);
s->rl_table_index = decode012(&s->gb);

s->dc_table_index = get_bits1(&s->gb);*/
s->no_rounding = 1;
} else {
s->use_skip_mb_code = get_bits1(&s->gb);
/* s->rl_table_index = decode012(&s->gb);
s->rl_chroma_table_index = s->rl_table_index;

s->dc_table_index = get_bits1(&s->gb);

s->mv_table_index = get_bits1(&s->gb);*/
if(s->flipflop_rounding){
s->no_rounding ^= 1;
}else{
s->no_rounding = 0;
}
// printf("%d", s->no_rounding);
}

printf("%s q:%d s:%X ", s->pict_type == I_TYPE ? "I" : "P" , s->qscale,
s->pict_type == I_TYPE ? code : s->use_skip_mb_code);

return 0;
}

int msmpeg4_decode_picture_header(MpegEncContext * s)
{
int code;
#if 0
{
int i;
msmpeg4v2_decode_picture_header(s);
for(i=0; i<s->gb.size*8; i++)
printf("%d", get_bits1(&s->gb));
printf("END\n");
return -1;
}
#endif
s->pict_type = get_bits(&s->gb, 2) + 1;
if (s->pict_type != I_TYPE &&
s->pict_type != P_TYPE)
return -1;

s->qscale = get_bits(&s->gb, 5);

if (s->pict_type == I_TYPE) {
code = get_bits(&s->gb, 5);
/* 0x17: one slice, 0x18: three slices */


Loading…
Cancel
Save