comparison h263.c @ 1064:b32afefe7d33 libavcodec

* UINTX -> uintx_t INTX -> intx_t
author kabi
date Tue, 11 Feb 2003 16:35:48 +0000
parents bb5de8a59da8
children a5be963709d1
comparison
equal deleted inserted replaced
1063:fdeac9642346 1064:b32afefe7d33
59 static void h263_encode_block(MpegEncContext * s, DCTELEM * block, 59 static void h263_encode_block(MpegEncContext * s, DCTELEM * block,
60 int n); 60 int n);
61 static void h263_encode_motion(MpegEncContext * s, int val, int fcode); 61 static void h263_encode_motion(MpegEncContext * s, int val, int fcode);
62 static void h263p_encode_umotion(MpegEncContext * s, int val); 62 static void h263p_encode_umotion(MpegEncContext * s, int val);
63 static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, 63 static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block,
64 int n, int dc, UINT8 *scan_table, 64 int n, int dc, uint8_t *scan_table,
65 PutBitContext *dc_pb, PutBitContext *ac_pb); 65 PutBitContext *dc_pb, PutBitContext *ac_pb);
66 #endif 66 #endif
67 67
68 static int h263_decode_motion(MpegEncContext * s, int pred, int fcode); 68 static int h263_decode_motion(MpegEncContext * s, int pred, int fcode);
69 static int h263p_decode_umotion(MpegEncContext * s, int pred); 69 static int h263p_decode_umotion(MpegEncContext * s, int pred);
70 static int h263_decode_block(MpegEncContext * s, DCTELEM * block, 70 static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
71 int n, int coded); 71 int n, int coded);
72 static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr); 72 static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr);
73 static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block, 73 static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
74 int n, int coded, int intra); 74 int n, int coded, int intra);
75 static int h263_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr); 75 static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr);
76 static void mpeg4_inv_pred_ac(MpegEncContext * s, DCTELEM *block, int n, 76 static void mpeg4_inv_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
77 int dir); 77 int dir);
78 static void mpeg4_decode_sprite_trajectory(MpegEncContext * s); 78 static void mpeg4_decode_sprite_trajectory(MpegEncContext * s);
79 static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr); 79 static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr, int *dir_ptr);
80 80
81 extern UINT32 inverse[256]; 81 extern uint32_t inverse[256];
82 82
83 static UINT8 uni_DCtab_lum_len[512]; 83 static uint8_t uni_DCtab_lum_len[512];
84 static UINT8 uni_DCtab_chrom_len[512]; 84 static uint8_t uni_DCtab_chrom_len[512];
85 static UINT16 uni_DCtab_lum_bits[512]; 85 static uint16_t uni_DCtab_lum_bits[512];
86 static UINT16 uni_DCtab_chrom_bits[512]; 86 static uint16_t uni_DCtab_chrom_bits[512];
87 87
88 #ifdef CONFIG_ENCODERS 88 #ifdef CONFIG_ENCODERS
89 static UINT16 (*mv_penalty)[MAX_MV*2+1]= NULL; 89 static uint16_t (*mv_penalty)[MAX_MV*2+1]= NULL;
90 static UINT8 fcode_tab[MAX_MV*2+1]; 90 static uint8_t fcode_tab[MAX_MV*2+1];
91 static UINT8 umv_fcode_tab[MAX_MV*2+1]; 91 static uint8_t umv_fcode_tab[MAX_MV*2+1];
92 92
93 static uint32_t uni_mpeg4_intra_rl_bits[64*64*2*2]; 93 static uint32_t uni_mpeg4_intra_rl_bits[64*64*2*2];
94 static uint8_t uni_mpeg4_intra_rl_len [64*64*2*2]; 94 static uint8_t uni_mpeg4_intra_rl_len [64*64*2*2];
95 static uint32_t uni_mpeg4_inter_rl_bits[64*64*2*2]; 95 static uint32_t uni_mpeg4_inter_rl_bits[64*64*2*2];
96 static uint8_t uni_mpeg4_inter_rl_len [64*64*2*2]; 96 static uint8_t uni_mpeg4_inter_rl_len [64*64*2*2];
159 /* Update the pointer to last GOB */ 159 /* Update the pointer to last GOB */
160 s->ptr_lastgob = pbBufPtr(&s->pb); 160 s->ptr_lastgob = pbBufPtr(&s->pb);
161 s->gob_number = 0; 161 s->gob_number = 0;
162 162
163 put_bits(&s->pb, 22, 0x20); /* PSC */ 163 put_bits(&s->pb, 22, 0x20); /* PSC */
164 put_bits(&s->pb, 8, (((INT64)s->picture_number * 30 * FRAME_RATE_BASE) / 164 put_bits(&s->pb, 8, (((int64_t)s->picture_number * 30 * FRAME_RATE_BASE) /
165 s->frame_rate) & 0xff); 165 s->frame_rate) & 0xff);
166 166
167 put_bits(&s->pb, 1, 1); /* marker */ 167 put_bits(&s->pb, 1, 1); /* marker */
168 put_bits(&s->pb, 1, 0); /* h263 id */ 168 put_bits(&s->pb, 1, 0); /* h263 id */
169 put_bits(&s->pb, 1, 0); /* split screen off */ 169 put_bits(&s->pb, 1, 0); /* split screen off */
278 int score0=0, score1=0; 278 int score0=0, score1=0;
279 int i, n; 279 int i, n;
280 int8_t * const qscale_table= s->current_picture.qscale_table; 280 int8_t * const qscale_table= s->current_picture.qscale_table;
281 281
282 for(n=0; n<6; n++){ 282 for(n=0; n<6; n++){
283 INT16 *ac_val, *ac_val1; 283 int16_t *ac_val, *ac_val1;
284 284
285 ac_val = s->ac_val[0][0] + s->block_index[n] * 16; 285 ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
286 ac_val1= ac_val; 286 ac_val1= ac_val;
287 if(dir[n]){ 287 if(dir[n]){
288 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width; 288 const int xy= s->mb_x + s->mb_y*s->mb_width - s->mb_width;
726 } else { 726 } else {
727 int cbp; 727 int cbp;
728 int dc_diff[6]; //dc values with the dc prediction subtracted 728 int dc_diff[6]; //dc values with the dc prediction subtracted
729 int dir[6]; //prediction direction 729 int dir[6]; //prediction direction
730 int zigzag_last_index[6]; 730 int zigzag_last_index[6];
731 UINT8 *scan_table[6]; 731 uint8_t *scan_table[6];
732 int i; 732 int i;
733 733
734 for(i=0; i<6; i++){ 734 for(i=0; i<6; i++){
735 const int level= block[i][0]; 735 const int level= block[i][0];
736 UINT16 *dc_ptr; 736 uint16_t *dc_ptr;
737 737
738 dc_diff[i]= level - ff_mpeg4_pred_dc(s, i, &dc_ptr, &dir[i]); 738 dc_diff[i]= level - ff_mpeg4_pred_dc(s, i, &dc_ptr, &dir[i]);
739 if (i < 4) { 739 if (i < 4) {
740 *dc_ptr = level * s->y_dc_scale; 740 *dc_ptr = level * s->y_dc_scale;
741 } else { 741 } else {
745 745
746 s->ac_pred= decide_ac_pred(s, block, dir); 746 s->ac_pred= decide_ac_pred(s, block, dir);
747 747
748 if(s->ac_pred){ 748 if(s->ac_pred){
749 for(i=0; i<6; i++){ 749 for(i=0; i<6; i++){
750 UINT8 *st; 750 uint8_t *st;
751 int last_index; 751 int last_index;
752 752
753 mpeg4_inv_pred_ac(s, block[i], i, dir[i]); 753 mpeg4_inv_pred_ac(s, block[i], i, dir[i]);
754 if (dir[i]==0) st = s->intra_v_scantable.permutated; /* left */ 754 if (dir[i]==0) st = s->intra_v_scantable.permutated; /* left */
755 else st = s->intra_h_scantable.permutated; /* top */ 755 else st = s->intra_h_scantable.permutated; /* top */
815 815
816 /* restore ac coeffs & last_index stuff if we messed them up with the prediction */ 816 /* restore ac coeffs & last_index stuff if we messed them up with the prediction */
817 if(s->ac_pred){ 817 if(s->ac_pred){
818 for(i=0; i<6; i++){ 818 for(i=0; i<6; i++){
819 int j; 819 int j;
820 INT16 *ac_val; 820 int16_t *ac_val;
821 821
822 ac_val = s->ac_val[0][0] + s->block_index[i] * 16; 822 ac_val = s->ac_val[0][0] + s->block_index[i] * 16;
823 823
824 if(dir[i]){ 824 if(dir[i]){
825 for(j=1; j<8; j++) 825 for(j=1; j<8; j++)
837 void h263_encode_mb(MpegEncContext * s, 837 void h263_encode_mb(MpegEncContext * s,
838 DCTELEM block[6][64], 838 DCTELEM block[6][64],
839 int motion_x, int motion_y) 839 int motion_x, int motion_y)
840 { 840 {
841 int cbpc, cbpy, i, cbp, pred_x, pred_y; 841 int cbpc, cbpy, i, cbp, pred_x, pred_y;
842 INT16 pred_dc; 842 int16_t pred_dc;
843 INT16 rec_intradc[6]; 843 int16_t rec_intradc[6];
844 UINT16 *dc_ptr[6]; 844 uint16_t *dc_ptr[6];
845 const int dquant_code[5]= {1,0,9,2,3}; 845 const int dquant_code[5]= {1,0,9,2,3};
846 846
847 //printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y); 847 //printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
848 if (!s->mb_intra) { 848 if (!s->mb_intra) {
849 /* compute cbp */ 849 /* compute cbp */
888 888
889 cbp = 0; 889 cbp = 0;
890 for(i=0; i<6; i++) { 890 for(i=0; i<6; i++) {
891 /* Predict DC */ 891 /* Predict DC */
892 if (s->h263_aic && s->mb_intra) { 892 if (s->h263_aic && s->mb_intra) {
893 INT16 level = block[i][0]; 893 int16_t level = block[i][0];
894 894
895 pred_dc = h263_pred_dc(s, i, &dc_ptr[i]); 895 pred_dc = h263_pred_dc(s, i, &dc_ptr[i]);
896 level -= pred_dc; 896 level -= pred_dc;
897 /* Quant */ 897 /* Quant */
898 if (level < 0) 898 if (level < 0)
963 } 963 }
964 } 964 }
965 } 965 }
966 #endif 966 #endif
967 967
968 static int h263_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr) 968 static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr)
969 { 969 {
970 int x, y, wrap, a, c, pred_dc, scale; 970 int x, y, wrap, a, c, pred_dc, scale;
971 INT16 *dc_val, *ac_val; 971 int16_t *dc_val, *ac_val;
972 972
973 /* find prediction */ 973 /* find prediction */
974 if (n < 4) { 974 if (n < 4) {
975 x = 2 * s->mb_x + 1 + (n & 1); 975 x = 2 * s->mb_x + 1 + (n & 1);
976 y = 2 * s->mb_y + 1 + ((n & 2) >> 1); 976 y = 2 * s->mb_y + 1 + ((n & 2) >> 1);
1012 1012
1013 1013
1014 static void h263_pred_acdc(MpegEncContext * s, DCTELEM *block, int n) 1014 static void h263_pred_acdc(MpegEncContext * s, DCTELEM *block, int n)
1015 { 1015 {
1016 int x, y, wrap, a, c, pred_dc, scale, i; 1016 int x, y, wrap, a, c, pred_dc, scale, i;
1017 INT16 *dc_val, *ac_val, *ac_val1; 1017 int16_t *dc_val, *ac_val, *ac_val1;
1018 1018
1019 /* find prediction */ 1019 /* find prediction */
1020 if (n < 4) { 1020 if (n < 4) {
1021 x = 2 * s->mb_x + 1 + (n & 1); 1021 x = 2 * s->mb_x + 1 + (n & 1);
1022 y = 2 * s->mb_y + 1 + ((n & 2) >> 1); 1022 y = 2 * s->mb_y + 1 + ((n & 2) >> 1);
1093 /* top copy */ 1093 /* top copy */
1094 for(i=1;i<8;i++) 1094 for(i=1;i<8;i++)
1095 ac_val1[8 + i] = block[s->idct_permutation[i ]]; 1095 ac_val1[8 + i] = block[s->idct_permutation[i ]];
1096 } 1096 }
1097 1097
1098 INT16 *h263_pred_motion(MpegEncContext * s, int block, 1098 int16_t *h263_pred_motion(MpegEncContext * s, int block,
1099 int *px, int *py) 1099 int *px, int *py)
1100 { 1100 {
1101 int xy, wrap; 1101 int xy, wrap;
1102 INT16 *A, *B, *C, *mot_val; 1102 int16_t *A, *B, *C, *mot_val;
1103 static const int off[4]= {2, 1, 1, -1}; 1103 static const int off[4]= {2, 1, 1, -1};
1104 1104
1105 wrap = s->block_wrap[0]; 1105 wrap = s->block_wrap[0];
1106 xy = s->block_index[block]; 1106 xy = s->block_index[block];
1107 1107
1247 { 1247 {
1248 int f_code; 1248 int f_code;
1249 int mv; 1249 int mv;
1250 1250
1251 if(mv_penalty==NULL) 1251 if(mv_penalty==NULL)
1252 mv_penalty= av_mallocz( sizeof(UINT16)*(MAX_FCODE+1)*(2*MAX_MV+1) ); 1252 mv_penalty= av_mallocz( sizeof(uint16_t)*(MAX_FCODE+1)*(2*MAX_MV+1) );
1253 1253
1254 for(f_code=1; f_code<=MAX_FCODE; f_code++){ 1254 for(f_code=1; f_code<=MAX_FCODE; f_code++){
1255 for(mv=-MAX_MV; mv<=MAX_MV; mv++){ 1255 for(mv=-MAX_MV; mv<=MAX_MV; mv++){
1256 int len; 1256 int len;
1257 1257
1341 1341
1342 } 1342 }
1343 } 1343 }
1344 1344
1345 #ifdef CONFIG_ENCODERS 1345 #ifdef CONFIG_ENCODERS
1346 static void init_uni_mpeg4_rl_tab(RLTable *rl, UINT32 *bits_tab, UINT8 *len_tab){ 1346 static void init_uni_mpeg4_rl_tab(RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab){
1347 int slevel, run, last; 1347 int slevel, run, last;
1348 1348
1349 assert(MAX_LEVEL >= 64); 1349 assert(MAX_LEVEL >= 64);
1350 assert(MAX_RUN >= 63); 1350 assert(MAX_RUN >= 63);
1351 1351
1573 } 1573 }
1574 1574
1575 if(s->current_picture.pts) 1575 if(s->current_picture.pts)
1576 s->time= (s->current_picture.pts*s->time_increment_resolution + 500*1000)/(1000*1000); 1576 s->time= (s->current_picture.pts*s->time_increment_resolution + 500*1000)/(1000*1000);
1577 else 1577 else
1578 s->time= picture_number*(INT64)FRAME_RATE_BASE*s->time_increment_resolution/s->frame_rate; 1578 s->time= picture_number*(int64_t)FRAME_RATE_BASE*s->time_increment_resolution/s->frame_rate;
1579 time_div= s->time/s->time_increment_resolution; 1579 time_div= s->time/s->time_increment_resolution;
1580 time_mod= s->time%s->time_increment_resolution; 1580 time_mod= s->time%s->time_increment_resolution;
1581 1581
1582 if(s->pict_type==B_TYPE){ 1582 if(s->pict_type==B_TYPE){
1583 s->pb_time= s->pp_time - (s->last_non_b_time - s->time); 1583 s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
1819 * @param n block index (0-3 are luma, 4-5 are chroma) 1819 * @param n block index (0-3 are luma, 4-5 are chroma)
1820 * @param dc_val_ptr a pointer to the dc_val entry for the current MB will be stored here 1820 * @param dc_val_ptr a pointer to the dc_val entry for the current MB will be stored here
1821 * @param dir_ptr pointer to an integer where the prediction direction will be stored 1821 * @param dir_ptr pointer to an integer where the prediction direction will be stored
1822 * @return the quantized predicted dc 1822 * @return the quantized predicted dc
1823 */ 1823 */
1824 static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, UINT16 **dc_val_ptr, int *dir_ptr) 1824 static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr, int *dir_ptr)
1825 { 1825 {
1826 int a, b, c, wrap, pred, scale; 1826 int a, b, c, wrap, pred, scale;
1827 UINT16 *dc_val; 1827 uint16_t *dc_val;
1828 int dummy; 1828 int dummy;
1829 1829
1830 /* find prediction */ 1830 /* find prediction */
1831 if (n < 4) { 1831 if (n < 4) {
1832 scale = s->y_dc_scale; 1832 scale = s->y_dc_scale;
1885 */ 1885 */
1886 void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n, 1886 void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
1887 int dir) 1887 int dir)
1888 { 1888 {
1889 int i; 1889 int i;
1890 INT16 *ac_val, *ac_val1; 1890 int16_t *ac_val, *ac_val1;
1891 int8_t * const qscale_table= s->current_picture.qscale_table; 1891 int8_t * const qscale_table= s->current_picture.qscale_table;
1892 1892
1893 /* find prediction */ 1893 /* find prediction */
1894 ac_val = s->ac_val[0][0] + s->block_index[n] * 16; 1894 ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
1895 ac_val1 = ac_val; 1895 ac_val1 = ac_val;
1940 1940
1941 static void mpeg4_inv_pred_ac(MpegEncContext * s, DCTELEM *block, int n, 1941 static void mpeg4_inv_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
1942 int dir) 1942 int dir)
1943 { 1943 {
1944 int i; 1944 int i;
1945 INT16 *ac_val; 1945 int16_t *ac_val;
1946 int8_t * const qscale_table= s->current_picture.qscale_table; 1946 int8_t * const qscale_table= s->current_picture.qscale_table;
1947 1947
1948 /* find prediction */ 1948 /* find prediction */
1949 ac_val = s->ac_val[0][0] + s->block_index[n] * 16; 1949 ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
1950 1950
2029 /** 2029 /**
2030 * encodes a 8x8 block 2030 * encodes a 8x8 block
2031 * @param n block index (0-3 are luma, 4-5 are chroma) 2031 * @param n block index (0-3 are luma, 4-5 are chroma)
2032 */ 2032 */
2033 static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n, int intra_dc, 2033 static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
2034 UINT8 *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb) 2034 uint8_t *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
2035 { 2035 {
2036 int i, last_non_zero; 2036 int i, last_non_zero;
2037 #if 0 //variables for the outcommented version 2037 #if 0 //variables for the outcommented version
2038 int code, sign, last; 2038 int code, sign, last;
2039 #endif 2039 #endif
2040 const RLTable *rl; 2040 const RLTable *rl;
2041 UINT32 *bits_tab; 2041 uint32_t *bits_tab;
2042 UINT8 *len_tab; 2042 uint8_t *len_tab;
2043 const int last_index = s->block_last_index[n]; 2043 const int last_index = s->block_last_index[n];
2044 2044
2045 if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away 2045 if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away
2046 /* mpeg4 based DC predictor */ 2046 /* mpeg4 based DC predictor */
2047 mpeg4_encode_dc(dc_pb, intra_dc, n); 2047 mpeg4_encode_dc(dc_pb, intra_dc, n);
2145 } 2145 }
2146 #endif 2146 #endif
2147 } 2147 }
2148 2148
2149 static inline int mpeg4_get_block_length(MpegEncContext * s, DCTELEM * block, int n, int intra_dc, 2149 static inline int mpeg4_get_block_length(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
2150 UINT8 *scan_table) 2150 uint8_t *scan_table)
2151 { 2151 {
2152 int i, last_non_zero; 2152 int i, last_non_zero;
2153 const RLTable *rl; 2153 const RLTable *rl;
2154 UINT8 *len_tab; 2154 uint8_t *len_tab;
2155 const int last_index = s->block_last_index[n]; 2155 const int last_index = s->block_last_index[n];
2156 int len=0; 2156 int len=0;
2157 2157
2158 if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away 2158 if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away
2159 /* mpeg4 based DC predictor */ 2159 /* mpeg4 based DC predictor */
2562 memsetw(s->dc_val[1] + c_xy, 1024, c_wrap+1); 2562 memsetw(s->dc_val[1] + c_xy, 1024, c_wrap+1);
2563 memsetw(s->dc_val[2] + c_xy, 1024, c_wrap+1); 2563 memsetw(s->dc_val[2] + c_xy, 1024, c_wrap+1);
2564 #endif 2564 #endif
2565 2565
2566 /* clean AC */ 2566 /* clean AC */
2567 memset(s->ac_val[0] + l_xy, 0, (l_wrap*2+1)*16*sizeof(INT16)); 2567 memset(s->ac_val[0] + l_xy, 0, (l_wrap*2+1)*16*sizeof(int16_t));
2568 memset(s->ac_val[1] + c_xy, 0, (c_wrap +1)*16*sizeof(INT16)); 2568 memset(s->ac_val[1] + c_xy, 0, (c_wrap +1)*16*sizeof(int16_t));
2569 memset(s->ac_val[2] + c_xy, 0, (c_wrap +1)*16*sizeof(INT16)); 2569 memset(s->ac_val[2] + c_xy, 0, (c_wrap +1)*16*sizeof(int16_t));
2570 2570
2571 /* clean MV */ 2571 /* clean MV */
2572 // we cant clear the MVs as they might be needed by a b frame 2572 // we cant clear the MVs as they might be needed by a b frame
2573 // memset(s->motion_val + l_xy, 0, (l_wrap*2+1)*2*sizeof(INT16)); 2573 // memset(s->motion_val + l_xy, 0, (l_wrap*2+1)*2*sizeof(int16_t));
2574 // memset(s->motion_val, 0, 2*sizeof(INT16)*(2 + s->mb_width*2)*(2 + s->mb_height*2)); 2574 // memset(s->motion_val, 0, 2*sizeof(int16_t)*(2 + s->mb_width*2)*(2 + s->mb_height*2));
2575 s->last_mv[0][0][0]= 2575 s->last_mv[0][0][0]=
2576 s->last_mv[0][0][1]= 2576 s->last_mv[0][0][1]=
2577 s->last_mv[1][0][0]= 2577 s->last_mv[1][0][0]=
2578 s->last_mv[1][0][1]= 0; 2578 s->last_mv[1][0][1]= 0;
2579 } 2579 }
2669 * decodes first partition. 2669 * decodes first partition.
2670 * @return number of MBs decoded or <0 if an error occured 2670 * @return number of MBs decoded or <0 if an error occured
2671 */ 2671 */
2672 static int mpeg4_decode_partition_a(MpegEncContext *s){ 2672 static int mpeg4_decode_partition_a(MpegEncContext *s){
2673 int mb_num; 2673 int mb_num;
2674 static const INT8 quant_tab[4] = { -1, -2, 1, 2 }; 2674 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
2675 2675
2676 /* decode first partition */ 2676 /* decode first partition */
2677 mb_num=0; 2677 mb_num=0;
2678 s->first_slice_line=1; 2678 s->first_slice_line=1;
2679 for(; s->mb_y<s->mb_height; s->mb_y++){ 2679 for(; s->mb_y<s->mb_height; s->mb_y++){
2727 s->pred_dir_table[xy]= dir; 2727 s->pred_dir_table[xy]= dir;
2728 2728
2729 s->error_status_table[xy]= AC_ERROR; 2729 s->error_status_table[xy]= AC_ERROR;
2730 }else{ /* P/S_TYPE */ 2730 }else{ /* P/S_TYPE */
2731 int mx, my, pred_x, pred_y, bits; 2731 int mx, my, pred_x, pred_y, bits;
2732 INT16 * const mot_val= s->motion_val[s->block_index[0]]; 2732 int16_t * const mot_val= s->motion_val[s->block_index[0]];
2733 const int stride= s->block_wrap[0]*2; 2733 const int stride= s->block_wrap[0]*2;
2734 2734
2735 bits= show_bits(&s->gb, 17); 2735 bits= show_bits(&s->gb, 17);
2736 if(bits==MOTION_MARKER){ 2736 if(bits==MOTION_MARKER){
2737 return mb_num-1; 2737 return mb_num-1;
2815 } else { 2815 } else {
2816 int i; 2816 int i;
2817 PRINT_MB_TYPE("4"); 2817 PRINT_MB_TYPE("4");
2818 s->mb_type[xy]= MB_TYPE_INTER4V; 2818 s->mb_type[xy]= MB_TYPE_INTER4V;
2819 for(i=0;i<4;i++) { 2819 for(i=0;i<4;i++) {
2820 INT16 *mot_val= h263_pred_motion(s, i, &pred_x, &pred_y); 2820 int16_t *mot_val= h263_pred_motion(s, i, &pred_x, &pred_y);
2821 mx = h263_decode_motion(s, pred_x, s->f_code); 2821 mx = h263_decode_motion(s, pred_x, s->f_code);
2822 if (mx >= 0xffff) 2822 if (mx >= 0xffff)
2823 return -1; 2823 return -1;
2824 2824
2825 my = h263_decode_motion(s, pred_y, s->f_code); 2825 my = h263_decode_motion(s, pred_y, s->f_code);
2843 * decode second partition. 2843 * decode second partition.
2844 * @return <0 if an error occured 2844 * @return <0 if an error occured
2845 */ 2845 */
2846 static int mpeg4_decode_partition_b(MpegEncContext *s, int mb_count){ 2846 static int mpeg4_decode_partition_b(MpegEncContext *s, int mb_count){
2847 int mb_num=0; 2847 int mb_num=0;
2848 static const INT8 quant_tab[4] = { -1, -2, 1, 2 }; 2848 static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
2849 2849
2850 s->mb_x= s->resync_mb_x; 2850 s->mb_x= s->resync_mb_x;
2851 s->first_slice_line=1; 2851 s->first_slice_line=1;
2852 for(s->mb_y= s->resync_mb_y; mb_num < mb_count; s->mb_y++){ 2852 for(s->mb_y= s->resync_mb_y; mb_num < mb_count; s->mb_y++){
2853 ff_init_block_index(s); 2853 ff_init_block_index(s);
3071 3071
3072 int ff_h263_decode_mb(MpegEncContext *s, 3072 int ff_h263_decode_mb(MpegEncContext *s,
3073 DCTELEM block[6][64]) 3073 DCTELEM block[6][64])
3074 { 3074 {
3075 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant; 3075 int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
3076 INT16 *mot_val; 3076 int16_t *mot_val;
3077 static INT8 quant_tab[4] = { -1, -2, 1, 2 }; 3077 static int8_t quant_tab[4] = { -1, -2, 1, 2 };
3078 3078
3079 s->error_status_table[s->mb_x + s->mb_y*s->mb_width]= 0; 3079 s->error_status_table[s->mb_x + s->mb_y*s->mb_width]= 0;
3080 3080
3081 if(s->mb_x==0) PRINT_MB_TYPE("\n"); 3081 if(s->mb_x==0) PRINT_MB_TYPE("\n");
3082 3082
3214 } 3214 }
3215 } else if(s->pict_type==B_TYPE) { 3215 } else if(s->pict_type==B_TYPE) {
3216 int modb1; // first bit of modb 3216 int modb1; // first bit of modb
3217 int modb2; // second bit of modb 3217 int modb2; // second bit of modb
3218 int mb_type; 3218 int mb_type;
3219 int xy;
3220 3219
3221 s->mb_intra = 0; //B-frames never contain intra blocks 3220 s->mb_intra = 0; //B-frames never contain intra blocks
3222 s->mcsel=0; // ... true gmc blocks 3221 s->mcsel=0; // ... true gmc blocks
3223 3222
3224 if(s->mb_x==0){ 3223 if(s->mb_x==0){
3499 static int h263_decode_block(MpegEncContext * s, DCTELEM * block, 3498 static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
3500 int n, int coded) 3499 int n, int coded)
3501 { 3500 {
3502 int code, level, i, j, last, run; 3501 int code, level, i, j, last, run;
3503 RLTable *rl = &rl_inter; 3502 RLTable *rl = &rl_inter;
3504 const UINT8 *scan_table; 3503 const uint8_t *scan_table;
3505 3504
3506 scan_table = s->intra_scantable.permutated; 3505 scan_table = s->intra_scantable.permutated;
3507 if (s->h263_aic && s->mb_intra) { 3506 if (s->h263_aic && s->mb_intra) {
3508 rl = &rl_intra_aic; 3507 rl = &rl_intra_aic;
3509 i = 0; 3508 i = 0;
3554 } 3553 }
3555 if (code == rl->n) { 3554 if (code == rl->n) {
3556 /* escape */ 3555 /* escape */
3557 last = get_bits1(&s->gb); 3556 last = get_bits1(&s->gb);
3558 run = get_bits(&s->gb, 6); 3557 run = get_bits(&s->gb, 6);
3559 level = (INT8)get_bits(&s->gb, 8); 3558 level = (int8_t)get_bits(&s->gb, 8);
3560 if (s->h263_rv10 && level == -128) { 3559 if (s->h263_rv10 && level == -128) {
3561 /* XXX: should patch encoder too */ 3560 /* XXX: should patch encoder too */
3562 level = get_bits(&s->gb, 12); 3561 level = get_bits(&s->gb, 12);
3563 level= (level + ((-1)<<11)) ^ ((-1)<<11); //sign extension 3562 level= (level + ((-1)<<11)) ^ ((-1)<<11); //sign extension
3564 } 3563 }
3596 * @return the quantized dc 3595 * @return the quantized dc
3597 */ 3596 */
3598 static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) 3597 static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
3599 { 3598 {
3600 int level, pred, code; 3599 int level, pred, code;
3601 UINT16 *dc_val; 3600 uint16_t *dc_val;
3602 3601
3603 if (n < 4) 3602 if (n < 4)
3604 code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1); 3603 code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1);
3605 else 3604 else
3606 code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1); 3605 code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1);
3655 { 3654 {
3656 int level, i, last, run; 3655 int level, i, last, run;
3657 int dc_pred_dir; 3656 int dc_pred_dir;
3658 RLTable * rl; 3657 RLTable * rl;
3659 RL_VLC_ELEM * rl_vlc; 3658 RL_VLC_ELEM * rl_vlc;
3660 const UINT8 * scan_table; 3659 const uint8_t * scan_table;
3661 int qmul, qadd; 3660 int qmul, qadd;
3662 3661
3663 if(intra) { 3662 if(intra) {
3664 /* DC coef */ 3663 /* DC coef */
3665 if(s->partitioned_frame){ 3664 if(s->partitioned_frame){