525
/* Encoding of a block. Very similar to MPEG4 except for a different
526
escape coding (same as H263) and more vlc tables.
528
static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n)
530
int level, run, last, i, j, last_index;
531
int last_non_zero, sign, slevel;
532
int code, run_diff, dc_pred_dir;
534
const uint8_t *scantable;
538
msmpeg4_encode_dc(s, block[0], n, &dc_pred_dir);
541
rl = &rl_table[s->rl_table_index];
543
rl = &rl_table[3 + s->rl_chroma_table_index];
546
scantable= s->intra_scantable.permutated;
547
set_stat(ST_INTRA_AC);
550
rl = &rl_table[3 + s->rl_table_index];
551
if(s->msmpeg4_version<=2)
555
scantable= s->inter_scantable.permutated;
556
set_stat(ST_INTER_AC);
559
/* recalculate block_last_index for M$ wmv1 */
560
if(s->msmpeg4_version>=4 && s->block_last_index[n]>0){
561
for(last_index=63; last_index>=0; last_index--){
562
if(block[scantable[last_index]]) break;
564
s->block_last_index[n]= last_index;
566
last_index = s->block_last_index[n];
568
last_non_zero = i - 1;
569
for (; i <= last_index; i++) {
573
run = i - last_non_zero - 1;
574
last = (i == last_index);
582
if(level<=MAX_LEVEL && run<=MAX_RUN){
583
s->ac_stats[s->mb_intra][n>3][level][run][last]++;
587
s->ac_stats[s->mb_intra][n>3][40][63][0]++; //esc3 like
589
code = get_rl_index(rl, last, run, level);
590
put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
594
level1 = level - rl->max_level[last][run];
597
code = get_rl_index(rl, last, run, level1);
600
put_bits(&s->pb, 1, 0);
601
if (level > MAX_LEVEL)
603
run1 = run - rl->max_run[last][level] - run_diff;
606
code = get_rl_index(rl, last, run1, level);
610
put_bits(&s->pb, 1, 0);
611
put_bits(&s->pb, 1, last);
612
if(s->msmpeg4_version>=4){
613
if(s->esc3_level_length==0){
614
s->esc3_level_length=8;
615
s->esc3_run_length= 6;
617
put_bits(&s->pb, 6, 3);
619
put_bits(&s->pb, 8, 3);
621
put_bits(&s->pb, s->esc3_run_length, run);
622
put_bits(&s->pb, 1, sign);
623
put_bits(&s->pb, s->esc3_level_length, level);
625
put_bits(&s->pb, 6, run);
626
put_bits(&s->pb, 8, slevel & 0xff);
630
put_bits(&s->pb, 1, 1);
631
put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
632
put_bits(&s->pb, 1, sign);
636
put_bits(&s->pb, 1, 1);
637
put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
638
put_bits(&s->pb, 1, sign);
641
put_bits(&s->pb, 1, sign);
648
536
void msmpeg4_encode_mb(MpegEncContext * s,
649
537
DCTELEM block[6][64],
650
538
int motion_x, int motion_y)
915
/* Encoding of a block. Very similar to MPEG4 except for a different
916
escape coding (same as H263) and more vlc tables.
918
static inline void msmpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n)
920
int level, run, last, i, j, last_index;
921
int last_non_zero, sign, slevel;
922
int code, run_diff, dc_pred_dir;
924
const uint8_t *scantable;
928
msmpeg4_encode_dc(s, block[0], n, &dc_pred_dir);
931
rl = &rl_table[s->rl_table_index];
933
rl = &rl_table[3 + s->rl_chroma_table_index];
936
scantable= s->intra_scantable.permutated;
937
set_stat(ST_INTRA_AC);
940
rl = &rl_table[3 + s->rl_table_index];
941
if(s->msmpeg4_version<=2)
945
scantable= s->inter_scantable.permutated;
946
set_stat(ST_INTER_AC);
949
/* recalculate block_last_index for M$ wmv1 */
950
if(s->msmpeg4_version>=4 && s->block_last_index[n]>0){
951
for(last_index=63; last_index>=0; last_index--){
952
if(block[scantable[last_index]]) break;
954
s->block_last_index[n]= last_index;
956
last_index = s->block_last_index[n];
958
last_non_zero = i - 1;
959
for (; i <= last_index; i++) {
963
run = i - last_non_zero - 1;
964
last = (i == last_index);
972
if(level<=MAX_LEVEL && run<=MAX_RUN){
973
s->ac_stats[s->mb_intra][n>3][level][run][last]++;
977
s->ac_stats[s->mb_intra][n>3][40][63][0]++; //esc3 like
979
code = get_rl_index(rl, last, run, level);
980
put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
984
level1 = level - rl->max_level[last][run];
987
code = get_rl_index(rl, last, run, level1);
990
put_bits(&s->pb, 1, 0);
991
if (level > MAX_LEVEL)
993
run1 = run - rl->max_run[last][level] - run_diff;
996
code = get_rl_index(rl, last, run1, level);
1000
put_bits(&s->pb, 1, 0);
1001
put_bits(&s->pb, 1, last);
1002
if(s->msmpeg4_version>=4){
1003
if(s->esc3_level_length==0){
1004
s->esc3_level_length=8;
1005
s->esc3_run_length= 6;
1007
put_bits(&s->pb, 6, 3);
1009
put_bits(&s->pb, 8, 3);
1011
put_bits(&s->pb, s->esc3_run_length, run);
1012
put_bits(&s->pb, 1, sign);
1013
put_bits(&s->pb, s->esc3_level_length, level);
1015
put_bits(&s->pb, 6, run);
1016
put_bits(&s->pb, 8, slevel & 0xff);
1020
put_bits(&s->pb, 1, 1);
1021
put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
1022
put_bits(&s->pb, 1, sign);
1026
put_bits(&s->pb, 1, 1);
1027
put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
1028
put_bits(&s->pb, 1, sign);
1031
put_bits(&s->pb, 1, sign);
1028
1038
/****************************************/
1029
1039
/* decoding stuff */
1031
1041
static VLC mb_non_intra_vlc[4];
1032
static VLC mb_intra_vlc;
1033
static VLC dc_lum_vlc[2];
1034
static VLC dc_chroma_vlc[2];
1042
VLC ff_msmp4_mb_i_vlc;
1043
VLC ff_msmp4_dc_luma_vlc[2];
1044
VLC ff_msmp4_dc_chroma_vlc[2];
1035
1045
static VLC v2_dc_lum_vlc;
1036
1046
static VLC v2_dc_chroma_vlc;
1037
1047
static VLC cbpy_vlc;
1112
1122
for(i=0;i<NB_RL_TABLES;i++) {
1113
init_rl(&rl_table[i]);
1114
init_vlc_rl(&rl_table[i]);
1123
init_rl(&rl_table[i], 1);
1124
init_vlc_rl(&rl_table[i], 1);
1116
1126
for(i=0;i<2;i++) {
1117
1127
mv = &mv_tables[i];
1118
1128
init_vlc(&mv->vlc, MV_VLC_BITS, mv->n + 1,
1119
1129
mv->table_mv_bits, 1, 1,
1120
mv->table_mv_code, 2, 2);
1130
mv->table_mv_code, 2, 2, 1);
1123
init_vlc(&dc_lum_vlc[0], DC_VLC_BITS, 120,
1124
&table0_dc_lum[0][1], 8, 4,
1125
&table0_dc_lum[0][0], 8, 4);
1126
init_vlc(&dc_chroma_vlc[0], DC_VLC_BITS, 120,
1127
&table0_dc_chroma[0][1], 8, 4,
1128
&table0_dc_chroma[0][0], 8, 4);
1129
init_vlc(&dc_lum_vlc[1], DC_VLC_BITS, 120,
1130
&table1_dc_lum[0][1], 8, 4,
1131
&table1_dc_lum[0][0], 8, 4);
1132
init_vlc(&dc_chroma_vlc[1], DC_VLC_BITS, 120,
1133
&table1_dc_chroma[0][1], 8, 4,
1134
&table1_dc_chroma[0][0], 8, 4);
1133
init_vlc(&ff_msmp4_dc_luma_vlc[0], DC_VLC_BITS, 120,
1134
&ff_table0_dc_lum[0][1], 8, 4,
1135
&ff_table0_dc_lum[0][0], 8, 4, 1);
1136
init_vlc(&ff_msmp4_dc_chroma_vlc[0], DC_VLC_BITS, 120,
1137
&ff_table0_dc_chroma[0][1], 8, 4,
1138
&ff_table0_dc_chroma[0][0], 8, 4, 1);
1139
init_vlc(&ff_msmp4_dc_luma_vlc[1], DC_VLC_BITS, 120,
1140
&ff_table1_dc_lum[0][1], 8, 4,
1141
&ff_table1_dc_lum[0][0], 8, 4, 1);
1142
init_vlc(&ff_msmp4_dc_chroma_vlc[1], DC_VLC_BITS, 120,
1143
&ff_table1_dc_chroma[0][1], 8, 4,
1144
&ff_table1_dc_chroma[0][0], 8, 4, 1);
1136
1146
init_vlc(&v2_dc_lum_vlc, DC_VLC_BITS, 512,
1137
1147
&v2_dc_lum_table[0][1], 8, 4,
1138
&v2_dc_lum_table[0][0], 8, 4);
1148
&v2_dc_lum_table[0][0], 8, 4, 1);
1139
1149
init_vlc(&v2_dc_chroma_vlc, DC_VLC_BITS, 512,
1140
1150
&v2_dc_chroma_table[0][1], 8, 4,
1141
&v2_dc_chroma_table[0][0], 8, 4);
1151
&v2_dc_chroma_table[0][0], 8, 4, 1);
1143
1153
init_vlc(&cbpy_vlc, CBPY_VLC_BITS, 16,
1144
1154
&cbpy_tab[0][1], 2, 1,
1145
&cbpy_tab[0][0], 2, 1);
1155
&cbpy_tab[0][0], 2, 1, 1);
1146
1156
init_vlc(&v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4,
1147
1157
&v2_intra_cbpc[0][1], 2, 1,
1148
&v2_intra_cbpc[0][0], 2, 1);
1158
&v2_intra_cbpc[0][0], 2, 1, 1);
1149
1159
init_vlc(&v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8,
1150
1160
&v2_mb_type[0][1], 2, 1,
1151
&v2_mb_type[0][0], 2, 1);
1161
&v2_mb_type[0][0], 2, 1, 1);
1152
1162
init_vlc(&v2_mv_vlc, V2_MV_VLC_BITS, 33,
1153
1163
&mvtab[0][1], 2, 1,
1154
&mvtab[0][0], 2, 1);
1164
&mvtab[0][0], 2, 1, 1);
1156
1166
for(i=0; i<4; i++){
1157
1167
init_vlc(&mb_non_intra_vlc[i], MB_NON_INTRA_VLC_BITS, 128,
1158
1168
&wmv2_inter_table[i][0][1], 8, 4,
1159
&wmv2_inter_table[i][0][0], 8, 4); //FIXME name?
1169
&wmv2_inter_table[i][0][0], 8, 4, 1); //FIXME name?
1162
init_vlc(&mb_intra_vlc, MB_INTRA_VLC_BITS, 64,
1163
&table_mb_intra[0][1], 4, 2,
1164
&table_mb_intra[0][0], 4, 2);
1172
init_vlc(&ff_msmp4_mb_i_vlc, MB_INTRA_VLC_BITS, 64,
1173
&ff_msmp4_mb_i_table[0][1], 4, 2,
1174
&ff_msmp4_mb_i_table[0][0], 4, 2, 1);
1166
1176
init_vlc(&v1_intra_cbpc_vlc, V1_INTRA_CBPC_VLC_BITS, 8,
1167
1177
intra_MCBPC_bits, 1, 1,
1168
intra_MCBPC_code, 1, 1);
1178
intra_MCBPC_code, 1, 1, 1);
1169
1179
init_vlc(&v1_inter_cbpc_vlc, V1_INTER_CBPC_VLC_BITS, 25,
1170
1180
inter_MCBPC_bits, 1, 1,
1171
inter_MCBPC_code, 1, 1);
1181
inter_MCBPC_code, 1, 1, 1);
1173
1183
init_vlc(&inter_intra_vlc, INTER_INTRA_VLC_BITS, 4,
1174
1184
&table_inter_intra[0][1], 2, 1,
1175
&table_inter_intra[0][0], 2, 1);
1185
&table_inter_intra[0][0], 2, 1, 1);
1178
1188
switch(s->msmpeg4_version){
1482
static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1486
if (s->pict_type == P_TYPE) {
1487
if (s->use_skip_mb_code) {
1488
if (get_bits1(&s->gb)) {
1492
s->block_last_index[i] = -1;
1493
s->mv_dir = MV_DIR_FORWARD;
1494
s->mv_type = MV_TYPE_16X16;
1502
if(s->msmpeg4_version==2)
1503
code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1);
1505
code = get_vlc2(&s->gb, v1_inter_cbpc_vlc.table, V1_INTER_CBPC_VLC_BITS, 3);
1506
if(code<0 || code>7){
1507
av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y);
1511
s->mb_intra = code >>2;
1516
if(s->msmpeg4_version==2)
1517
cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1);
1519
cbp= get_vlc2(&s->gb, v1_intra_cbpc_vlc.table, V1_INTRA_CBPC_VLC_BITS, 1);
1521
av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1529
cbpy= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1531
av_log(s->avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1536
if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C;
1538
h263_pred_motion(s, 0, 0, &mx, &my);
1539
mx= msmpeg4v2_decode_motion(s, mx, 1);
1540
my= msmpeg4v2_decode_motion(s, my, 1);
1542
s->mv_dir = MV_DIR_FORWARD;
1543
s->mv_type = MV_TYPE_16X16;
1544
s->mv[0][0][0] = mx;
1545
s->mv[0][0][1] = my;
1547
if(s->msmpeg4_version==2){
1548
s->ac_pred = get_bits1(&s->gb);
1549
cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1552
cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1553
if(s->pict_type==P_TYPE) cbp^=0x3C;
1557
s->dsp.clear_blocks(s->block[0]);
1558
for (i = 0; i < 6; i++) {
1559
if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1561
av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1568
static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1572
uint32_t * const mb_type_ptr= &s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ];
1574
if (s->pict_type == P_TYPE) {
1575
set_stat(ST_INTER_MB);
1576
if (s->use_skip_mb_code) {
1577
if (get_bits1(&s->gb)) {
1581
s->block_last_index[i] = -1;
1582
s->mv_dir = MV_DIR_FORWARD;
1583
s->mv_type = MV_TYPE_16X16;
1587
*mb_type_ptr = MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
1593
code = get_vlc2(&s->gb, mb_non_intra_vlc[DEFAULT_INTER_INDEX].table, MB_NON_INTRA_VLC_BITS, 3);
1596
//s->mb_intra = (code & 0x40) ? 0 : 1;
1597
s->mb_intra = (~code & 0x40) >> 6;
1601
set_stat(ST_INTRA_MB);
1603
code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MB_INTRA_VLC_BITS, 2);
1606
/* predict coded block pattern */
1609
int val = ((code >> (5 - i)) & 1);
1611
int pred = coded_block_pred(s, i, &coded_val);
1615
cbp |= val << (5 - i);
1621
//printf("P at %d %d\n", s->mb_x, s->mb_y);
1622
if(s->per_mb_rl_table && cbp){
1623
s->rl_table_index = decode012(&s->gb);
1624
s->rl_chroma_table_index = s->rl_table_index;
1627
h263_pred_motion(s, 0, 0, &mx, &my);
1628
if (msmpeg4_decode_motion(s, &mx, &my) < 0)
1630
s->mv_dir = MV_DIR_FORWARD;
1631
s->mv_type = MV_TYPE_16X16;
1632
s->mv[0][0][0] = mx;
1633
s->mv[0][0][1] = my;
1634
*mb_type_ptr = MB_TYPE_L0 | MB_TYPE_16x16;
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));
1637
set_stat(ST_INTRA_MB);
1638
s->ac_pred = get_bits1(&s->gb);
1639
*mb_type_ptr = MB_TYPE_INTRA;
1640
if(s->inter_intra_pred){
1641
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);
1644
if(s->per_mb_rl_table && cbp){
1645
s->rl_table_index = decode012(&s->gb);
1646
s->rl_chroma_table_index = s->rl_table_index;
1650
s->dsp.clear_blocks(s->block[0]);
1651
for (i = 0; i < 6; i++) {
1652
if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1654
av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1480
1661
//#define ERROR_DETAILS
1481
1662
static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
1482
1663
int n, int coded, const uint8_t *scan_table)
1653
1834
SKIP_BITS(re, &s->gb, 2);
1655
GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2);
1836
GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
1656
1837
i+= run + rl->max_run[run>>7][level/qmul] + run_diff; //FIXME opt indexing
1657
1838
level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1658
1839
LAST_SKIP_BITS(re, &s->gb, 1);
1659
1840
#ifdef ERROR_DETAILS
1661
fprintf(stderr, "illegal vlc code in ESC2 level=%d\n", level);
1842
av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC2 level=%d\n", level);
1662
1843
else if((i>62 && i<192) || i>192+63)
1663
fprintf(stderr, "run overflow in ESC2 i=%d run=%d level=%d\n", i, run, level);
1844
av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC2 i=%d run=%d level=%d\n", i, run, level);
1672
1853
SKIP_BITS(re, &s->gb, 1);
1674
GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2);
1855
GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
1676
1857
level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
1677
1858
level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
1678
1859
LAST_SKIP_BITS(re, &s->gb, 1);
1679
1860
#ifdef ERROR_DETAILS
1681
fprintf(stderr, "illegal vlc code in ESC1 level=%d\n", level);
1862
av_log(s->avctx, AV_LOG_ERROR, "illegal vlc code in ESC1 level=%d\n", level);
1682
1863
else if((i>62 && i<192) || i>192+63)
1683
fprintf(stderr, "run overflow in ESC1 i=%d run=%d level=%d\n", i, run, level);
1864
av_log(s->avctx, AV_LOG_ERROR, "run overflow in ESC1 i=%d run=%d level=%d\n", i, run, level);
1731
static int msmpeg4v12_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1735
if (s->pict_type == P_TYPE) {
1736
if (s->use_skip_mb_code) {
1737
if (get_bits1(&s->gb)) {
1741
s->block_last_index[i] = -1;
1742
s->mv_dir = MV_DIR_FORWARD;
1743
s->mv_type = MV_TYPE_16X16;
1751
if(s->msmpeg4_version==2)
1752
code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1);
1754
code = get_vlc2(&s->gb, v1_inter_cbpc_vlc.table, V1_INTER_CBPC_VLC_BITS, 3);
1755
if(code<0 || code>7){
1756
av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", code, s->mb_x, s->mb_y);
1760
s->mb_intra = code >>2;
1765
if(s->msmpeg4_version==2)
1766
cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1);
1768
cbp= get_vlc2(&s->gb, v1_intra_cbpc_vlc.table, V1_INTRA_CBPC_VLC_BITS, 1);
1770
av_log(s->avctx, AV_LOG_ERROR, "cbpc %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1778
cbpy= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
1780
av_log(s->avctx, AV_LOG_ERROR, "cbpy %d invalid at %d %d\n", cbp, s->mb_x, s->mb_y);
1785
if(s->msmpeg4_version==1 || (cbp&3) != 3) cbp^= 0x3C;
1787
h263_pred_motion(s, 0, 0, &mx, &my);
1788
mx= msmpeg4v2_decode_motion(s, mx, 1);
1789
my= msmpeg4v2_decode_motion(s, my, 1);
1791
s->mv_dir = MV_DIR_FORWARD;
1792
s->mv_type = MV_TYPE_16X16;
1793
s->mv[0][0][0] = mx;
1794
s->mv[0][0][1] = my;
1796
if(s->msmpeg4_version==2){
1797
s->ac_pred = get_bits1(&s->gb);
1798
cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1801
cbp|= get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1)<<2; //FIXME check errors
1802
if(s->pict_type==P_TYPE) cbp^=0x3C;
1806
for (i = 0; i < 6; i++) {
1807
if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1809
av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1816
static int msmpeg4v34_decode_mb(MpegEncContext *s, DCTELEM block[6][64])
1820
uint32_t * const mb_type_ptr= &s->current_picture.mb_type[ s->mb_x + s->mb_y*s->mb_stride ];
1822
if (s->pict_type == P_TYPE) {
1823
set_stat(ST_INTER_MB);
1824
if (s->use_skip_mb_code) {
1825
if (get_bits1(&s->gb)) {
1829
s->block_last_index[i] = -1;
1830
s->mv_dir = MV_DIR_FORWARD;
1831
s->mv_type = MV_TYPE_16X16;
1835
*mb_type_ptr = MB_TYPE_SKIP | MB_TYPE_L0 | MB_TYPE_16x16;
1841
code = get_vlc2(&s->gb, mb_non_intra_vlc[DEFAULT_INTER_INDEX].table, MB_NON_INTRA_VLC_BITS, 3);
1844
//s->mb_intra = (code & 0x40) ? 0 : 1;
1845
s->mb_intra = (~code & 0x40) >> 6;
1849
set_stat(ST_INTRA_MB);
1851
code = get_vlc2(&s->gb, mb_intra_vlc.table, MB_INTRA_VLC_BITS, 2);
1854
/* predict coded block pattern */
1857
int val = ((code >> (5 - i)) & 1);
1859
int pred = coded_block_pred(s, i, &coded_val);
1863
cbp |= val << (5 - i);
1869
//printf("P at %d %d\n", s->mb_x, s->mb_y);
1870
if(s->per_mb_rl_table && cbp){
1871
s->rl_table_index = decode012(&s->gb);
1872
s->rl_chroma_table_index = s->rl_table_index;
1875
h263_pred_motion(s, 0, 0, &mx, &my);
1876
if (msmpeg4_decode_motion(s, &mx, &my) < 0)
1878
s->mv_dir = MV_DIR_FORWARD;
1879
s->mv_type = MV_TYPE_16X16;
1880
s->mv[0][0][0] = mx;
1881
s->mv[0][0][1] = my;
1882
*mb_type_ptr = MB_TYPE_L0 | MB_TYPE_16x16;
1884
//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));
1885
set_stat(ST_INTRA_MB);
1886
s->ac_pred = get_bits1(&s->gb);
1887
*mb_type_ptr = MB_TYPE_INTRA;
1888
if(s->inter_intra_pred){
1889
s->h263_aic_dir= get_vlc2(&s->gb, inter_intra_vlc.table, INTER_INTRA_VLC_BITS, 1);
1890
// printf("%d%d %d %d/", s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y);
1892
if(s->per_mb_rl_table && cbp){
1893
s->rl_table_index = decode012(&s->gb);
1894
s->rl_chroma_table_index = s->rl_table_index;
1898
for (i = 0; i < 6; i++) {
1899
if (msmpeg4_decode_block(s, block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
1901
av_log(s->avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n", s->mb_x, s->mb_y, i);
1909
1912
static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
1911
1914
int level, pred;