Mercurial > libavcodec.hg
comparison h263.c @ 591:d3f374218030 libavcodec
fixing mpeg4 mpeg quantizers
author | michaelni |
---|---|
date | Fri, 02 Aug 2002 20:27:46 +0000 |
parents | 5132a4ee50cd |
children | d5d0c11ea4cf |
comparison
equal
deleted
inserted
replaced
590:3f8824eb4690 | 591:d3f374218030 |
---|---|
1450 } | 1450 } |
1451 } | 1451 } |
1452 /* left copy */ | 1452 /* left copy */ |
1453 for(i=1;i<8;i++) | 1453 for(i=1;i<8;i++) |
1454 ac_val1[i] = block[block_permute_op(i * 8)]; | 1454 ac_val1[i] = block[block_permute_op(i * 8)]; |
1455 | |
1455 /* top copy */ | 1456 /* top copy */ |
1456 for(i=1;i<8;i++) | 1457 for(i=1;i<8;i++) |
1457 ac_val1[8 + i] = block[block_permute_op(i)]; | 1458 ac_val1[8 + i] = block[block_permute_op(i)]; |
1459 | |
1458 } | 1460 } |
1459 | 1461 |
1460 static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n, | 1462 static void mpeg4_inv_pred_ac(MpegEncContext * s, INT16 *block, int n, |
1461 int dir) | 1463 int dir) |
1462 { | 1464 { |
2639 switch(mb_type) | 2641 switch(mb_type) |
2640 { | 2642 { |
2641 case 0: /* direct */ | 2643 case 0: /* direct */ |
2642 mx = h263_decode_motion(s, 0, 1); | 2644 mx = h263_decode_motion(s, 0, 1); |
2643 my = h263_decode_motion(s, 0, 1); | 2645 my = h263_decode_motion(s, 0, 1); |
2646 PRINT_MB_TYPE("S"); | |
2644 case 4: /* direct with mx=my=0 */ | 2647 case 4: /* direct with mx=my=0 */ |
2645 s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT; | 2648 s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT; |
2646 xy= s->block_index[0]; | 2649 xy= s->block_index[0]; |
2647 time_pp= s->pp_time; | 2650 time_pp= s->pp_time; |
2648 time_pb= time_pp - s->bp_time; | 2651 time_pb= time_pp - s->bp_time; |
2657 : s->motion_val[xy][1]*(time_pb - time_pp)/time_pp + my; | 2660 : s->motion_val[xy][1]*(time_pb - time_pp)/time_pp + my; |
2658 /* s->mv[0][0][0] = | 2661 /* s->mv[0][0][0] = |
2659 s->mv[0][0][1] = | 2662 s->mv[0][0][1] = |
2660 s->mv[1][0][0] = | 2663 s->mv[1][0][0] = |
2661 s->mv[1][0][1] = 1000;*/ | 2664 s->mv[1][0][1] = 1000;*/ |
2662 PRINT_MB_TYPE("D"); | 2665 if(mb_type==4) PRINT_MB_TYPE("D"); |
2663 break; | 2666 break; |
2664 case 1: | 2667 case 1: |
2665 s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD; | 2668 s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD; |
2666 mx = h263_decode_motion(s, s->last_mv[0][0][0], s->f_code); | 2669 mx = h263_decode_motion(s, s->last_mv[0][0][0], s->f_code); |
2667 my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code); | 2670 my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code); |
2699 if (cbpc < 0) | 2702 if (cbpc < 0) |
2700 return -1; | 2703 return -1; |
2701 dquant = cbpc & 4; | 2704 dquant = cbpc & 4; |
2702 s->mb_intra = 1; | 2705 s->mb_intra = 1; |
2703 intra: | 2706 intra: |
2704 PRINT_MB_TYPE("I"); | |
2705 s->ac_pred = 0; | 2707 s->ac_pred = 0; |
2706 if (s->h263_pred || s->h263_aic) { | 2708 if (s->h263_pred || s->h263_aic) { |
2707 s->ac_pred = get_bits1(&s->gb); | 2709 s->ac_pred = get_bits1(&s->gb); |
2708 if (s->ac_pred && s->h263_aic) | 2710 if (s->ac_pred && s->h263_aic) |
2709 s->h263_aic_dir = get_bits1(&s->gb); | 2711 s->h263_aic_dir = get_bits1(&s->gb); |
2710 } | 2712 } |
2713 PRINT_MB_TYPE(s->ac_pred ? "A" : "I"); | |
2714 | |
2711 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); | 2715 cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1); |
2712 if(cbpy<0) return -1; | 2716 if(cbpy<0) return -1; |
2713 cbp = (cbpc & 3) | (cbpy << 2); | 2717 cbp = (cbpc & 3) | (cbpy << 2); |
2714 if (dquant) { | 2718 if (dquant) { |
2715 s->qscale += quant_tab[get_bits(&s->gb, 2)]; | 2719 s->qscale += quant_tab[get_bits(&s->gb, 2)]; |
2993 if (!coded) { | 2997 if (!coded) { |
2994 s->block_last_index[n] = i; | 2998 s->block_last_index[n] = i; |
2995 return 0; | 2999 return 0; |
2996 } | 3000 } |
2997 rl = &rl_inter; | 3001 rl = &rl_inter; |
2998 rl_vlc = rl_inter.rl_vlc[s->qscale]; | |
2999 scan_table = zigzag_direct; | 3002 scan_table = zigzag_direct; |
3000 qmul = s->qscale << 1; | 3003 if(s->mpeg_quant){ |
3001 qadd = (s->qscale - 1) | 1; | 3004 qmul=1; |
3005 qadd=0; | |
3006 rl_vlc = rl_inter.rl_vlc[0]; | |
3007 }else{ | |
3008 qmul = s->qscale << 1; | |
3009 qadd = (s->qscale - 1) | 1; | |
3010 rl_vlc = rl_inter.rl_vlc[s->qscale]; | |
3011 } | |
3002 } | 3012 } |
3003 { | 3013 { |
3004 OPEN_READER(re, &s->gb); | 3014 OPEN_READER(re, &s->gb); |
3005 for(;;) { | 3015 for(;;) { |
3006 UPDATE_CACHE(re, &s->gb); | 3016 UPDATE_CACHE(re, &s->gb); |
3613 s->quant_precision = 5; | 3623 s->quant_precision = 5; |
3614 } | 3624 } |
3615 | 3625 |
3616 // FIXME a bunch of grayscale shape things | 3626 // FIXME a bunch of grayscale shape things |
3617 | 3627 |
3618 if(get_bits1(&s->gb)){ /* vol_quant_type */ | 3628 if((s->mpeg_quant=get_bits1(&s->gb))){ /* vol_quant_type */ |
3619 int i, j, v; | 3629 int i, j, v; |
3630 | |
3620 /* load default matrixes */ | 3631 /* load default matrixes */ |
3621 for(i=0; i<64; i++){ | 3632 for(i=0; i<64; i++){ |
3622 v= ff_mpeg4_default_intra_matrix[i]; | 3633 v= ff_mpeg4_default_intra_matrix[i]; |
3623 s->intra_matrix[i]= v; | 3634 s->intra_matrix[i]= v; |
3624 s->chroma_intra_matrix[i]= v; | 3635 s->chroma_intra_matrix[i]= v; |
3657 s->inter_matrix[j]= v; | 3668 s->inter_matrix[j]= v; |
3658 s->chroma_inter_matrix[j]= v; | 3669 s->chroma_inter_matrix[j]= v; |
3659 } | 3670 } |
3660 } | 3671 } |
3661 | 3672 |
3662 s->dct_unquantize= s->dct_unquantize_mpeg2; | |
3663 | |
3664 // FIXME a bunch of grayscale shape things | 3673 // FIXME a bunch of grayscale shape things |
3665 }else | 3674 } |
3666 s->dct_unquantize= s->dct_unquantize_h263; | |
3667 | 3675 |
3668 if(vo_ver_id != 1) | 3676 if(vo_ver_id != 1) |
3669 s->quarter_sample= get_bits1(&s->gb); | 3677 s->quarter_sample= get_bits1(&s->gb); |
3670 else s->quarter_sample=0; | 3678 else s->quarter_sample=0; |
3671 | 3679 |
3756 if(s->pict_type==B_TYPE && s->low_delay && s->vol_control_parameters==0){ | 3764 if(s->pict_type==B_TYPE && s->low_delay && s->vol_control_parameters==0){ |
3757 printf("low_delay flag set, but shouldnt, clearing it\n"); | 3765 printf("low_delay flag set, but shouldnt, clearing it\n"); |
3758 s->low_delay=0; | 3766 s->low_delay=0; |
3759 } | 3767 } |
3760 // printf("pic: %d, qpel:%d\n", s->pict_type, s->quarter_sample); | 3768 // printf("pic: %d, qpel:%d\n", s->pict_type, s->quarter_sample); |
3761 //printf("%d", s->pict_type); | |
3762 time_incr=0; | 3769 time_incr=0; |
3763 while (get_bits1(&s->gb) != 0) | 3770 while (get_bits1(&s->gb) != 0) |
3764 time_incr++; | 3771 time_incr++; |
3765 | 3772 |
3766 check_marker(&s->gb, "before time_increment"); | 3773 check_marker(&s->gb, "before time_increment"); |