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