comparison h263.c @ 661:a0901e38c564 libavcodec

fixing interlaced mpeg4 decoding
author michaelni
date Thu, 12 Sep 2002 18:28:17 +0000
parents b8e268337a1d
children 5a158f0d1981
comparison
equal deleted inserted replaced
660:b8e268337a1d 661:a0901e38c564
2720 my = h263_decode_motion(s, pred_y/2, s->f_code); 2720 my = h263_decode_motion(s, pred_y/2, s->f_code);
2721 if (my >= 0xffff) 2721 if (my >= 0xffff)
2722 return -1; 2722 return -1;
2723 2723
2724 s->mv[0][i][0] = mx; 2724 s->mv[0][i][0] = mx;
2725 s->mv[0][i][1] = my*2; 2725 s->mv[0][i][1] = my;
2726 } 2726 }
2727 }else{ 2727 }else{
2728 PRINT_MB_TYPE("P"); 2728 PRINT_MB_TYPE("P");
2729 /* 16x16 motion prediction */ 2729 /* 16x16 motion prediction */
2730 s->mv_type = MV_TYPE_16X16; 2730 s->mv_type = MV_TYPE_16X16;
3192 i = 0; 3192 i = 0;
3193 if (!coded) 3193 if (!coded)
3194 goto not_coded; 3194 goto not_coded;
3195 rl = &rl_intra; 3195 rl = &rl_intra;
3196 rl_vlc = rl_intra.rl_vlc[0]; 3196 rl_vlc = rl_intra.rl_vlc[0];
3197 if (s->ac_pred) { 3197 if(s->alternate_scan)
3198 scan_table = ff_alternate_vertical_scan; /* left */
3199 else if (s->ac_pred) {
3198 if (dc_pred_dir == 0) 3200 if (dc_pred_dir == 0)
3199 scan_table = ff_alternate_vertical_scan; /* left */ 3201 scan_table = ff_alternate_vertical_scan; /* left */
3200 else 3202 else
3201 scan_table = ff_alternate_horizontal_scan; /* top */ 3203 scan_table = ff_alternate_horizontal_scan; /* top */
3202 } else { 3204 } else {
3209 if (!coded) { 3211 if (!coded) {
3210 s->block_last_index[n] = i; 3212 s->block_last_index[n] = i;
3211 return 0; 3213 return 0;
3212 } 3214 }
3213 rl = &rl_inter; 3215 rl = &rl_inter;
3214 scan_table = zigzag_direct; 3216
3217 if(s->alternate_scan)
3218 scan_table = ff_alternate_vertical_scan; /* left */
3219 else
3220 scan_table = zigzag_direct;
3221
3215 if(s->mpeg_quant){ 3222 if(s->mpeg_quant){
3216 qmul=1; 3223 qmul=1;
3217 qadd=0; 3224 qadd=0;
3218 rl_vlc = rl_inter.rl_vlc[0]; 3225 rl_vlc = rl_inter.rl_vlc[0];
3219 }else{ 3226 }else{
4052 t=get_bits(&s->gb, 3); /* intra dc VLC threshold */ 4059 t=get_bits(&s->gb, 3); /* intra dc VLC threshold */
4053 //printf("threshold %d\n", t); 4060 //printf("threshold %d\n", t);
4054 if(!s->progressive_sequence){ 4061 if(!s->progressive_sequence){
4055 s->top_field_first= get_bits1(&s->gb); 4062 s->top_field_first= get_bits1(&s->gb);
4056 s->alternate_scan= get_bits1(&s->gb); 4063 s->alternate_scan= get_bits1(&s->gb);
4057 //printf("top:%d alt:%d\n", s->top_field_first, s->alternate_scan); 4064 }else
4058 } 4065 s->alternate_scan= 0;
4059 } 4066 }
4060 4067
4061 if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){ 4068 if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
4062 if(s->num_sprite_warping_points){ 4069 if(s->num_sprite_warping_points){
4063 mpeg4_decode_sprite_trajectory(s); 4070 mpeg4_decode_sprite_trajectory(s);
4088 if (s->pict_type == B_TYPE) { 4095 if (s->pict_type == B_TYPE) {
4089 s->b_code = get_bits(&s->gb, 3); 4096 s->b_code = get_bits(&s->gb, 3);
4090 }else 4097 }else
4091 s->b_code=1; 4098 s->b_code=1;
4092 4099
4093 //printf("quant:%d fcode:%d bcode:%d type:%d size:%d\n", s->qscale, s->f_code, s->b_code, s->pict_type, s->gb.size); 4100 //printf("qpuant:%d fcode:%d bcode:%d type:%d size:%d pro:%d alt:%d\n",
4101 // s->qscale, s->f_code, s->b_code, s->pict_type, s->gb.size,s->progressive_sequence, s->alternate_scan);
4094 if(!s->scalability){ 4102 if(!s->scalability){
4095 if (s->shape!=RECT_SHAPE && s->pict_type!=I_TYPE) { 4103 if (s->shape!=RECT_SHAPE && s->pict_type!=I_TYPE) {
4096 skip_bits1(&s->gb); // vop shape coding type 4104 skip_bits1(&s->gb); // vop shape coding type
4097 } 4105 }
4098 }else{ 4106 }else{