comparison h263.c @ 1914:8337c46a5abe libavcodec

gmc segfault fix
author michael
date Fri, 02 Apr 2004 16:21:55 +0000
parents 351e996f29d9
children e5b0b33cf8aa
comparison
equal deleted inserted replaced
1913:486236d25f89 1914:8337c46a5abe
73 static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr); 73 static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr);
74 #ifdef CONFIG_ENCODERS 74 #ifdef CONFIG_ENCODERS
75 static void mpeg4_encode_visual_object_header(MpegEncContext * s); 75 static void mpeg4_encode_visual_object_header(MpegEncContext * s);
76 static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number); 76 static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number);
77 #endif //CONFIG_ENCODERS 77 #endif //CONFIG_ENCODERS
78 static void mpeg4_decode_sprite_trajectory(MpegEncContext * s); 78 static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb);
79 static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, uint16_t **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 #ifdef CONFIG_ENCODERS 81 #ifdef CONFIG_ENCODERS
82 static uint8_t uni_DCtab_lum_len[512]; 82 static uint8_t uni_DCtab_lum_len[512];
83 static uint8_t uni_DCtab_chrom_len[512]; 83 static uint8_t uni_DCtab_chrom_len[512];
3164 3164
3165 if(s->shape != BIN_ONLY_SHAPE){ 3165 if(s->shape != BIN_ONLY_SHAPE){
3166 skip_bits(&s->gb, 3); /* intra dc vlc threshold */ 3166 skip_bits(&s->gb, 3); /* intra dc vlc threshold */
3167 //FIXME dont just ignore everything 3167 //FIXME dont just ignore everything
3168 if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){ 3168 if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
3169 mpeg4_decode_sprite_trajectory(s); 3169 mpeg4_decode_sprite_trajectory(s, &s->gb);
3170 av_log(s->avctx, AV_LOG_ERROR, "untested\n"); 3170 av_log(s->avctx, AV_LOG_ERROR, "untested\n");
3171 } 3171 }
3172 3172
3173 //FIXME reduced res stuff here 3173 //FIXME reduced res stuff here
3174 3174
5184 #endif 5184 #endif
5185 5185
5186 return 0; 5186 return 0;
5187 } 5187 }
5188 5188
5189 static void mpeg4_decode_sprite_trajectory(MpegEncContext * s) 5189 static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb)
5190 { 5190 {
5191 int i; 5191 int i;
5192 int a= 2<<s->sprite_warping_accuracy; 5192 int a= 2<<s->sprite_warping_accuracy;
5193 int rho= 3-s->sprite_warping_accuracy; 5193 int rho= 3-s->sprite_warping_accuracy;
5194 int r=16/a; 5194 int r=16/a;
5204 5204
5205 for(i=0; i<s->num_sprite_warping_points; i++){ 5205 for(i=0; i<s->num_sprite_warping_points; i++){
5206 int length; 5206 int length;
5207 int x=0, y=0; 5207 int x=0, y=0;
5208 5208
5209 length= get_vlc(&s->gb, &sprite_trajectory); 5209 length= get_vlc(gb, &sprite_trajectory);
5210 if(length){ 5210 if(length){
5211 x= get_xbits(&s->gb, length); 5211 x= get_xbits(gb, length);
5212 } 5212 }
5213 if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(&s->gb); /* marker bit */ 5213 if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(gb); /* marker bit */
5214 5214
5215 length= get_vlc(&s->gb, &sprite_trajectory); 5215 length= get_vlc(gb, &sprite_trajectory);
5216 if(length){ 5216 if(length){
5217 y=get_xbits(&s->gb, length); 5217 y=get_xbits(gb, length);
5218 } 5218 }
5219 skip_bits1(&s->gb); /* marker bit */ 5219 skip_bits1(gb); /* marker bit */
5220 //printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy); 5220 //printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy);
5221 d[i][0]= x; 5221 d[i][0]= x;
5222 d[i][1]= y; 5222 d[i][1]= y;
5223 } 5223 }
5224 5224
5843 ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan); 5843 ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan);
5844 ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan); 5844 ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
5845 } 5845 }
5846 5846
5847 if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){ 5847 if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
5848 mpeg4_decode_sprite_trajectory(s); 5848 mpeg4_decode_sprite_trajectory(s, gb);
5849 if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n"); 5849 if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n");
5850 if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n"); 5850 if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n");
5851 } 5851 }
5852 5852
5853 if (s->shape != BIN_ONLY_SHAPE) { 5853 if (s->shape != BIN_ONLY_SHAPE) {