gmc segfault fix

Originally committed as revision 2945 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2004-04-02 16:21:55 +00:00
parent d298185c73
commit 3f9d89c696

View File

@ -75,7 +75,7 @@ static int h263_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr);
static void mpeg4_encode_visual_object_header(MpegEncContext * s); static void mpeg4_encode_visual_object_header(MpegEncContext * s);
static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number); static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number);
#endif //CONFIG_ENCODERS #endif //CONFIG_ENCODERS
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s); static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb);
static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr, int *dir_ptr); static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, uint16_t **dc_val_ptr, int *dir_ptr);
#ifdef CONFIG_ENCODERS #ifdef CONFIG_ENCODERS
@ -3166,7 +3166,7 @@ static int mpeg4_decode_video_packet_header(MpegEncContext *s)
skip_bits(&s->gb, 3); /* intra dc vlc threshold */ skip_bits(&s->gb, 3); /* intra dc vlc threshold */
//FIXME dont just ignore everything //FIXME dont just ignore everything
if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){ if(s->pict_type == S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
mpeg4_decode_sprite_trajectory(s); mpeg4_decode_sprite_trajectory(s, &s->gb);
av_log(s->avctx, AV_LOG_ERROR, "untested\n"); av_log(s->avctx, AV_LOG_ERROR, "untested\n");
} }
@ -5186,7 +5186,7 @@ int h263_decode_picture_header(MpegEncContext *s)
return 0; return 0;
} }
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s) static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb)
{ {
int i; int i;
int a= 2<<s->sprite_warping_accuracy; int a= 2<<s->sprite_warping_accuracy;
@ -5206,17 +5206,17 @@ static void mpeg4_decode_sprite_trajectory(MpegEncContext * s)
int length; int length;
int x=0, y=0; int x=0, y=0;
length= get_vlc(&s->gb, &sprite_trajectory); length= get_vlc(gb, &sprite_trajectory);
if(length){ if(length){
x= get_xbits(&s->gb, length); x= get_xbits(gb, length);
} }
if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(&s->gb); /* marker bit */ if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(gb); /* marker bit */
length= get_vlc(&s->gb, &sprite_trajectory); length= get_vlc(gb, &sprite_trajectory);
if(length){ if(length){
y=get_xbits(&s->gb, length); y=get_xbits(gb, length);
} }
skip_bits1(&s->gb); /* marker bit */ skip_bits1(gb); /* marker bit */
//printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy); //printf("%d %d %d %d\n", x, y, i, s->sprite_warping_accuracy);
d[i][0]= x; d[i][0]= x;
d[i][1]= y; d[i][1]= y;
@ -5845,7 +5845,7 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){
} }
if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){ if(s->pict_type == S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
mpeg4_decode_sprite_trajectory(s); mpeg4_decode_sprite_trajectory(s, gb);
if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n"); if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n");
if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n"); if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n");
} }