From af9da83b0e1192ae6163633f66c420a332e2932c Mon Sep 17 00:00:00 2001
From: Mike Melanson <mike@multimedia.cx>
Date: Sun, 14 Aug 2005 18:39:59 +0000
Subject: [PATCH] automatically detect Cinepak data from Sega FILM/CPK files

Originally committed as revision 4525 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavcodec/cinepak.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c
index 3b00a1605d3..d1e1f0ec161 100644
--- a/libavcodec/cinepak.c
+++ b/libavcodec/cinepak.c
@@ -316,13 +316,22 @@ static int cinepak_decode (CinepakContext *s)
     uint8_t      *eod = (s->data + s->size);
     int           i, result, strip_size, frame_flags, num_strips;
     int           y0 = 0;
+    int           encoded_buf_size;
+    /* if true, Cinepak data is from a Sega FILM/CPK file */
+    int           sega_film_data = 0;
 
     if (s->size < 10)
         return -1;
 
     frame_flags = s->data[0];
     num_strips  = BE_16 (&s->data[8]);
-    s->data    += 10;
+    encoded_buf_size = BE_16 (&s->data[2]);
+    if (encoded_buf_size != s->size)
+        sega_film_data = 1;
+    if (sega_film_data)
+        s->data    += 12;
+    else
+        s->data    += 10;
 
     if (num_strips > MAX_STRIPS)
         num_strips = MAX_STRIPS;
-- 
GitLab