Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoru-bo1b@0w.se <u-bo1b@0w.se>2013-02-18 23:47:45 +0400
committerMichael Niedermayer <michaelni@gmx.at>2013-02-20 07:14:04 +0400
commit8d1dd5bd5040bdea9770bd3f5ceb5aab670655d9 (patch)
tree7f0ac80cc6f04dc927603adf4c1f03dcbc6cb89a /libavcodec/cinepak.c
parenta3adbedf9b631554a5d0332805ea81313e5bc76f (diff)
cinepak: More correct Cinepak decoder.
change the treatment of the strip y coordinates which previously did not follow the description (nor did it behave like the binary decoder on files with absolute strip offsets). Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/cinepak.c')
-rw-r--r--libavcodec/cinepak.c11
1 files changed, 7 insertions, 4 deletions
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;