summaryrefslogtreecommitdiff
path: root/libavcodec/h263.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-08-02 20:27:46 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-08-02 20:27:46 +0000
commitd930ef19ea14c7fd43c7ad0a4184a9b55c8fdd76 (patch)
tree9800f022cdf5a8b97c6a8b1686a620e450480b29 /libavcodec/h263.c
parentfc2bb4f44dac9c4fa4b8d9dc3509818c9dcfd8ac (diff)
fixing mpeg4 mpeg quantizers
Originally committed as revision 836 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263.c')
-rw-r--r--libavcodec/h263.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index 3b183830b9..666105e9fe 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -1452,9 +1452,11 @@ void mpeg4_pred_ac(MpegEncContext * s, INT16 *block, int n,
/* left copy */
for(i=1;i<8;i++)
ac_val1[i] = block[block_permute_op(i * 8)];
+
/* top copy */
for(i=1;i<8;i++)
ac_val1[8 + i] = block[block_permute_op(i)];
+
}
static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n,
@@ -2641,6 +2643,7 @@ int h263_decode_mb(MpegEncContext *s,
case 0: /* direct */
mx = h263_decode_motion(s, 0, 1);
my = h263_decode_motion(s, 0, 1);
+ PRINT_MB_TYPE("S");
case 4: /* direct with mx=my=0 */
s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
xy= s->block_index[0];
@@ -2659,7 +2662,7 @@ int h263_decode_mb(MpegEncContext *s,
s->mv[0][0][1] =
s->mv[1][0][0] =
s->mv[1][0][1] = 1000;*/
- PRINT_MB_TYPE("D");
+ if(mb_type==4) PRINT_MB_TYPE("D");
break;
case 1:
s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD;
@@ -2701,13 +2704,14 @@ int h263_decode_mb(MpegEncContext *s,
dquant = cbpc & 4;
s->mb_intra = 1;
intra:
- PRINT_MB_TYPE("I");
s->ac_pred = 0;
if (s->h263_pred || s->h263_aic) {
s->ac_pred = get_bits1(&s->gb);
if (s->ac_pred && s->h263_aic)
s->h263_aic_dir = get_bits1(&s->gb);
}
+ PRINT_MB_TYPE(s->ac_pred ? "A" : "I");
+
cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
if(cbpy<0) return -1;
cbp = (cbpc & 3) | (cbpy << 2);
@@ -2995,10 +2999,16 @@ static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
return 0;
}
rl = &rl_inter;
- rl_vlc = rl_inter.rl_vlc[s->qscale];
scan_table = zigzag_direct;
- qmul = s->qscale << 1;
- qadd = (s->qscale - 1) | 1;
+ if(s->mpeg_quant){
+ qmul=1;
+ qadd=0;
+ rl_vlc = rl_inter.rl_vlc[0];
+ }else{
+ qmul = s->qscale << 1;
+ qadd = (s->qscale - 1) | 1;
+ rl_vlc = rl_inter.rl_vlc[s->qscale];
+ }
}
{
OPEN_READER(re, &s->gb);
@@ -3615,8 +3625,9 @@ int mpeg4_decode_picture_header(MpegEncContext * s)
// FIXME a bunch of grayscale shape things
- if(get_bits1(&s->gb)){ /* vol_quant_type */
+ if((s->mpeg_quant=get_bits1(&s->gb))){ /* vol_quant_type */
int i, j, v;
+
/* load default matrixes */
for(i=0; i<64; i++){
v= ff_mpeg4_default_intra_matrix[i];
@@ -3659,11 +3670,8 @@ int mpeg4_decode_picture_header(MpegEncContext * s)
}
}
- s->dct_unquantize= s->dct_unquantize_mpeg2;
-
// FIXME a bunch of grayscale shape things
- }else
- s->dct_unquantize= s->dct_unquantize_h263;
+ }
if(vo_ver_id != 1)
s->quarter_sample= get_bits1(&s->gb);
@@ -3758,7 +3766,6 @@ int mpeg4_decode_picture_header(MpegEncContext * s)
s->low_delay=0;
}
// printf("pic: %d, qpel:%d\n", s->pict_type, s->quarter_sample);
-//printf("%d", s->pict_type);
time_incr=0;
while (get_bits1(&s->gb) != 0)
time_incr++;