diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c index a88469a146..5bd3f1349b 100644 --- a/libavcodec/cinepak.c +++ b/libavcodec/cinepak.c @@ -366,10 +366,13 @@ static int cinepak_decode (CinepakContext *s) return AVERROR_INVALIDDATA; s->strips[i].id = s->data[0]; - s->strips[i].y1 = y0; - s->strips[i].x1 = 0; - s->strips[i].y2 = y0 + AV_RB16 (&s->data[8]); - s->strips[i].x2 = s->avctx->width; +/* zero y1 means "relative to the previous stripe" */ + if (!(s->strips[i].y1 = AV_RB16 (&s->data[4]))) + s->strips[i].y2 = (s->strips[i].y1 = y0) + AV_RB16 (&s->data[8]); + else + s->strips[i].y2 = AV_RB16 (&s->data[8]); + s->strips[i].x1 = AV_RB16 (&s->data[6]); + s->strips[i].x2 = AV_RB16 (&s->data[10]); if (s->strips[i].id == 0x10) s->frame.key_frame = 1;