summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/cinepak.c
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2005-10-23 02:11:16 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2005-10-23 02:11:16 +0000
commit712a40b59a0f451a558d88db1f9f124463016f97 (patch)
tree82bc80e9b7a5ba09c01acf205c8ac1e20c44914f /src/libffmpeg/libavcodec/cinepak.c
parent640063a719556f8569fe848528b39660c6fc31a6 (diff)
downloadxine-lib-712a40b59a0f451a558d88db1f9f124463016f97.tar.gz
xine-lib-712a40b59a0f451a558d88db1f9f124463016f97.tar.bz2
big ffmpeg update
it is likely to break, so please keep both pieces CVS patchset: 7767 CVS date: 2005/10/23 02:11:16
Diffstat (limited to 'src/libffmpeg/libavcodec/cinepak.c')
-rw-r--r--src/libffmpeg/libavcodec/cinepak.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/libffmpeg/libavcodec/cinepak.c b/src/libffmpeg/libavcodec/cinepak.c
index 3b00a1605..d1e1f0ec1 100644
--- a/src/libffmpeg/libavcodec/cinepak.c
+++ b/src/libffmpeg/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;