Mercurial > libavcodec.hg
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(;;) { |
