comparison msmpeg4.c @ 3454:de0ed6497a13 libavcodec

remove STATS code (probably hasnt been used for years ..., and its not completely clear what it was good for anyway)
author michael
date Sun, 09 Jul 2006 10:33:49 +0000
parents 87187ebe2c28
children 1843a85123b7
comparison
equal deleted inserted replaced
3453:e3f5377bddb2 3454:de0ed6497a13
87 87
88 #ifdef CONFIG_ENCODERS //strangely gcc includes this even if its not references 88 #ifdef CONFIG_ENCODERS //strangely gcc includes this even if its not references
89 static uint8_t rl_length[NB_RL_TABLES][MAX_LEVEL+1][MAX_RUN+1][2]; 89 static uint8_t rl_length[NB_RL_TABLES][MAX_LEVEL+1][MAX_RUN+1][2];
90 #endif //CONFIG_ENCODERS 90 #endif //CONFIG_ENCODERS
91 91
92 #ifdef STATS
93
94 const char *st_names[ST_NB] = {
95 "unknown",
96 "dc",
97 "intra_ac",
98 "inter_ac",
99 "intra_mb",
100 "inter_mb",
101 "mv",
102 };
103
104 int st_current_index = 0;
105 unsigned int st_bit_counts[ST_NB];
106 unsigned int st_out_bit_counts[ST_NB];
107
108 #define set_stat(var) st_current_index = var;
109
110 void print_stats(void)
111 {
112 unsigned int total;
113 int i;
114
115 printf("Input:\n");
116 total = 0;
117 for(i=0;i<ST_NB;i++)
118 total += st_bit_counts[i];
119 if (total == 0)
120 total = 1;
121 for(i=0;i<ST_NB;i++) {
122 printf("%-10s : %10.1f %5.1f%%\n",
123 st_names[i],
124 (double)st_bit_counts[i] / 8.0,
125 (double)st_bit_counts[i] * 100.0 / total);
126 }
127 printf("%-10s : %10.1f %5.1f%%\n",
128 "total",
129 (double)total / 8.0,
130 100.0);
131
132 printf("Output:\n");
133 total = 0;
134 for(i=0;i<ST_NB;i++)
135 total += st_out_bit_counts[i];
136 if (total == 0)
137 total = 1;
138 for(i=0;i<ST_NB;i++) {
139 printf("%-10s : %10.1f %5.1f%%\n",
140 st_names[i],
141 (double)st_out_bit_counts[i] / 8.0,
142 (double)st_out_bit_counts[i] * 100.0 / total);
143 }
144 printf("%-10s : %10.1f %5.1f%%\n",
145 "total",
146 (double)total / 8.0,
147 100.0);
148 }
149
150 #else
151
152 #define set_stat(var)
153
154 #endif
155
156 static void common_init(MpegEncContext * s) 92 static void common_init(MpegEncContext * s)
157 { 93 {
158 static int inited=0; 94 static int inited=0;
159 95
160 switch(s->msmpeg4_version){ 96 switch(s->msmpeg4_version){
507 av_log(s->avctx, AV_LOG_ERROR, "error mx=%d my=%d\n", mx, my); 443 av_log(s->avctx, AV_LOG_ERROR, "error mx=%d my=%d\n", mx, my);
508 #endif 444 #endif
509 mv = &mv_tables[s->mv_table_index]; 445 mv = &mv_tables[s->mv_table_index];
510 446
511 code = mv->table_mv_index[(mx << 6) | my]; 447 code = mv->table_mv_index[(mx << 6) | my];
512 set_stat(ST_MV);
513 put_bits(&s->pb, 448 put_bits(&s->pb,
514 mv->table_mv_bits[code], 449 mv->table_mv_bits[code],
515 mv->table_mv_code[code]); 450 mv->table_mv_code[code]);
516 if (code == mv->n) { 451 if (code == mv->n) {
517 /* escape : code litterally */ 452 /* escape : code litterally */
543 478
544 handle_slices(s); 479 handle_slices(s);
545 480
546 if (!s->mb_intra) { 481 if (!s->mb_intra) {
547 /* compute cbp */ 482 /* compute cbp */
548 set_stat(ST_INTER_MB);
549 cbp = 0; 483 cbp = 0;
550 for (i = 0; i < 6; i++) { 484 for (i = 0; i < 6; i++) {
551 if (s->block_last_index[i] >= 0) 485 if (s->block_last_index[i] >= 0)
552 cbp |= 1 << (5 - i); 486 cbp |= 1 << (5 - i);
553 } 487 }
634 put_bits(&s->pb, 568 put_bits(&s->pb,
635 cbpy_tab[cbp>>2][1], 569 cbpy_tab[cbp>>2][1],
636 cbpy_tab[cbp>>2][0]); 570 cbpy_tab[cbp>>2][0]);
637 }else{ 571 }else{
638 if (s->pict_type == I_TYPE) { 572 if (s->pict_type == I_TYPE) {
639 set_stat(ST_INTRA_MB);
640 put_bits(&s->pb, 573 put_bits(&s->pb,
641 ff_msmp4_mb_i_table[coded_cbp][1], ff_msmp4_mb_i_table[coded_cbp][0]); 574 ff_msmp4_mb_i_table[coded_cbp][1], ff_msmp4_mb_i_table[coded_cbp][0]);
642 } else { 575 } else {
643 if (s->use_skip_mb_code) 576 if (s->use_skip_mb_code)
644 put_bits(&s->pb, 1, 0); /* mb coded */ 577 put_bits(&s->pb, 1, 0); /* mb coded */
645 put_bits(&s->pb, 578 put_bits(&s->pb,
646 table_mb_non_intra[cbp][1], 579 table_mb_non_intra[cbp][1],
647 table_mb_non_intra[cbp][0]); 580 table_mb_non_intra[cbp][0]);
648 } 581 }
649 set_stat(ST_INTRA_MB);
650 put_bits(&s->pb, 1, 0); /* no AC prediction yet */ 582 put_bits(&s->pb, 1, 0); /* no AC prediction yet */
651 if(s->inter_intra_pred){ 583 if(s->inter_intra_pred){
652 s->h263_aic_dir=0; 584 s->h263_aic_dir=0;
653 put_bits(&s->pb, table_inter_intra[s->h263_aic_dir][1], table_inter_intra[s->h263_aic_dir][0]); 585 put_bits(&s->pb, table_inter_intra[s->h263_aic_dir][1], table_inter_intra[s->h263_aic_dir][0]);
654 } 586 }
922 int code, run_diff, dc_pred_dir; 854 int code, run_diff, dc_pred_dir;
923 const RLTable *rl; 855 const RLTable *rl;
924 const uint8_t *scantable; 856 const uint8_t *scantable;
925 857
926 if (s->mb_intra) { 858 if (s->mb_intra) {
927 set_stat(ST_DC);
928 msmpeg4_encode_dc(s, block[0], n, &dc_pred_dir); 859 msmpeg4_encode_dc(s, block[0], n, &dc_pred_dir);
929 i = 1; 860 i = 1;
930 if (n < 4) { 861 if (n < 4) {
931 rl = &rl_table[s->rl_table_index]; 862 rl = &rl_table[s->rl_table_index];
932 } else { 863 } else {
933 rl = &rl_table[3 + s->rl_chroma_table_index]; 864 rl = &rl_table[3 + s->rl_chroma_table_index];
934 } 865 }
935 run_diff = 0; 866 run_diff = 0;
936 scantable= s->intra_scantable.permutated; 867 scantable= s->intra_scantable.permutated;
937 set_stat(ST_INTRA_AC);
938 } else { 868 } else {
939 i = 0; 869 i = 0;
940 rl = &rl_table[3 + s->rl_table_index]; 870 rl = &rl_table[3 + s->rl_table_index];
941 if(s->msmpeg4_version<=2) 871 if(s->msmpeg4_version<=2)
942 run_diff = 0; 872 run_diff = 0;
943 else 873 else
944 run_diff = 1; 874 run_diff = 1;
945 scantable= s->inter_scantable.permutated; 875 scantable= s->inter_scantable.permutated;
946 set_stat(ST_INTER_AC);
947 } 876 }
948 877
949 /* recalculate block_last_index for M$ wmv1 */ 878 /* recalculate block_last_index for M$ wmv1 */
950 if(s->msmpeg4_version>=4 && s->block_last_index[n]>0){ 879 if(s->msmpeg4_version>=4 && s->block_last_index[n]>0){
951 for(last_index=63; last_index>=0; last_index--){ 880 for(last_index=63; last_index>=0; last_index--){
1570 int cbp, code, i; 1499 int cbp, code, i;
1571 uint8_t *coded_val; 1500 uint8_t *coded_val;
1572 uint32_t * const mb_type_ptr= &s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ]; 1501 uint32_t * const mb_type_ptr= &s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ];
1573 1502
1574 if (s->pict_type == P_TYPE) { 1503 if (s->pict_type == P_TYPE) {
1575 set_stat(ST_INTER_MB);
1576 if (s->use_skip_mb_code) { 1504 if (s->use_skip_mb_code) {
1577 if (get_bits1(&s->gb)) { 1505 if (get_bits1(&s->gb)) {
1578 /* skip mb */ 1506 /* skip mb */
1579 s->mb_intra = 0; 1507 s->mb_intra = 0;
1580 for(i=0;i<6;i++) 1508 for(i=0;i<6;i++)
1596 //s->mb_intra = (code & 0x40) ? 0 : 1; 1524 //s->mb_intra = (code & 0x40) ? 0 : 1;
1597 s->mb_intra = (~code & 0x40) >> 6; 1525 s->mb_intra = (~code & 0x40) >> 6;
1598 1526
1599 cbp = code & 0x3f; 1527 cbp = code & 0x3f;
1600 } else { 1528 } else {
1601 set_stat(ST_INTRA_MB);
1602 s->mb_intra = 1; 1529 s->mb_intra = 1;
1603 code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2); 1530 code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2);
1604 if (code < 0) 1531 if (code < 0)
1605 return -1; 1532 return -1;
1606 /* predict coded block pattern */ 1533 /* predict coded block pattern */
1621 //printf("P at %d %d\n", s->mb_x, s->mb_y); 1548 //printf("P at %d %d\n", s->mb_x, s->mb_y);
1622 if(s->per_mb_rl_table && cbp){ 1549 if(s->per_mb_rl_table && cbp){
1623 s->rl_table_index = decode012(&s->gb); 1550 s->rl_table_index = decode012(&s->gb);
1624 s->rl_chroma_table_index = s->rl_table_index; 1551 s->rl_chroma_table_index = s->rl_table_index;
1625 } 1552 }
1626 set_stat(ST_MV);
1627 h263_pred_motion(s, 0, 0, &mx, &my); 1553 h263_pred_motion(s, 0, 0, &mx, &my);
1628 if (msmpeg4_decode_motion(s, &mx, &my) < 0) 1554 if (msmpeg4_decode_motion(s, &mx, &my) < 0)
1629 return -1; 1555 return -1;
1630 s->mv_dir = MV_DIR_FORWARD; 1556 s->mv_dir = MV_DIR_FORWARD;
1631 s->mv_type = MV_TYPE_16X16; 1557 s->mv_type = MV_TYPE_16X16;
1632 s->mv[0][0][0] = mx; 1558 s->mv[0][0][0] = mx;
1633 s->mv[0][0][1] = my; 1559 s->mv[0][0][1] = my;
1634 *mb_type_ptr = MB_TYPE_L0 | MB_TYPE_16x16; 1560 *mb_type_ptr = MB_TYPE_L0 | MB_TYPE_16x16;
1635 } else { 1561 } else {
1636 //printf("I at %d %d %d %06X\n", s->mb_x, s->mb_y, ((cbp&3)? 1 : 0) +((cbp&0x3C)? 2 : 0), show_bits(&s->gb, 24)); 1562 //printf("I at %d %d %d %06X\n", s->mb_x, s->mb_y, ((cbp&3)? 1 : 0) +((cbp&0x3C)? 2 : 0), show_bits(&s->gb, 24));
1637 set_stat(ST_INTRA_MB);
1638 s->ac_pred = get_bits1(&s->gb); 1563 s->ac_pred = get_bits1(&s->gb);
1639 *mb_type_ptr = MB_TYPE_INTRA; 1564 *mb_type_ptr = MB_TYPE_INTRA;
1640 if(s->inter_intra_pred){ 1565 if(s->inter_intra_pred){
1641 s->h263_aic_dir= get_vlc2(&s->gb, inter_intra_vlc.table, INTER_INTRA_VLC_BITS, 1); 1566 s->h263_aic_dir= get_vlc2(&s->gb, inter_intra_vlc.table, INTER_INTRA_VLC_BITS, 1);
1642 // printf("%d%d %d %d/", s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y); 1567 // printf("%d%d %d %d/", s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y);
1671 if (s->mb_intra) { 1596 if (s->mb_intra) {
1672 qmul=1; 1597 qmul=1;
1673 qadd=0; 1598 qadd=0;
1674 1599
1675 /* DC coef */ 1600 /* DC coef */
1676 set_stat(ST_DC);
1677 level = msmpeg4_decode_dc(s, n, &dc_pred_dir); 1601 level = msmpeg4_decode_dc(s, n, &dc_pred_dir);
1678 1602
1679 if (level < 0){ 1603 if (level < 0){
1680 av_log(s->avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, s->qscale); 1604 av_log(s->avctx, AV_LOG_ERROR, "dc overflow- block: %d qscale: %d//\n", n, s->qscale);
1681 if(s->inter_intra_pred) level=0; 1605 if(s->inter_intra_pred) level=0;
1707 else 1631 else
1708 scan_table = s->intra_h_scantable.permutated; /* top */ 1632 scan_table = s->intra_h_scantable.permutated; /* top */
1709 } else { 1633 } else {
1710 scan_table = s->intra_scantable.permutated; 1634 scan_table = s->intra_scantable.permutated;
1711 } 1635 }
1712 set_stat(ST_INTRA_AC);
1713 rl_vlc= rl->rl_vlc[0]; 1636 rl_vlc= rl->rl_vlc[0];
1714 } else { 1637 } else {
1715 qmul = s->qscale << 1; 1638 qmul = s->qscale << 1;
1716 qadd = (s->qscale - 1) | 1; 1639 qadd = (s->qscale - 1) | 1;
1717 i = -1; 1640 i = -1;
1726 s->block_last_index[n] = i; 1649 s->block_last_index[n] = i;
1727 return 0; 1650 return 0;
1728 } 1651 }
1729 if(!scan_table) 1652 if(!scan_table)
1730 scan_table = s->inter_scantable.permutated; 1653 scan_table = s->inter_scantable.permutated;
1731 set_stat(ST_INTER_AC);
1732 rl_vlc= rl->rl_vlc[s->qscale]; 1654 rl_vlc= rl->rl_vlc[s->qscale];
1733 } 1655 }
1734 { 1656 {
1735 OPEN_READER(re, &s->gb); 1657 OPEN_READER(re, &s->gb);
1736 for(;;) { 1658 for(;;) {