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