Commit fc5c49ab authored by Michael Niedermayer's avatar Michael Niedermayer

mpeg4videodec: Fix division by zero in mpeg4_decode_sprite_trajectory()

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 43abef9f
...@@ -160,7 +160,7 @@ static inline int mpeg4_is_resync(MpegEncContext *s){ ...@@ -160,7 +160,7 @@ static inline int mpeg4_is_resync(MpegEncContext *s){
return 0; return 0;
} }
static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb) static int 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;
...@@ -176,6 +176,9 @@ static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb ...@@ -176,6 +176,9 @@ static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb
int h= s->height; int h= s->height;
int min_ab; int min_ab;
if(w<=0 || h<=0)
return -1;
for(i=0; i<s->num_sprite_warping_points; i++){ for(i=0; i<s->num_sprite_warping_points; i++){
int length; int length;
int x=0, y=0; int x=0, y=0;
...@@ -348,6 +351,7 @@ static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb ...@@ -348,6 +351,7 @@ static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb
} }
s->real_sprite_warping_points= s->num_sprite_warping_points; s->real_sprite_warping_points= s->num_sprite_warping_points;
} }
return 0;
} }
/** /**
...@@ -411,7 +415,8 @@ int mpeg4_decode_video_packet_header(MpegEncContext *s) ...@@ -411,7 +415,8 @@ 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 don't just ignore everything //FIXME don't just ignore everything
if(s->pict_type == AV_PICTURE_TYPE_S && s->vol_sprite_usage==GMC_SPRITE){ if(s->pict_type == AV_PICTURE_TYPE_S && s->vol_sprite_usage==GMC_SPRITE){
mpeg4_decode_sprite_trajectory(s, &s->gb); if(mpeg4_decode_sprite_trajectory(s, &s->gb) < 0)
return -1;
av_log(s->avctx, AV_LOG_ERROR, "untested\n"); av_log(s->avctx, AV_LOG_ERROR, "untested\n");
} }
...@@ -2051,7 +2056,8 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){ ...@@ -2051,7 +2056,8 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){
} }
if(s->pict_type == AV_PICTURE_TYPE_S && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){ if(s->pict_type == AV_PICTURE_TYPE_S && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
mpeg4_decode_sprite_trajectory(s, gb); if(mpeg4_decode_sprite_trajectory(s, gb) < 0)
return -1;
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");
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment