diff options
author | Mike Melanson <mike@multimedia.cx> | 2011-11-15 23:06:48 -0800 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2011-11-16 10:50:52 +0200 |
commit | 747283a0788b088872ca58d3d15bb2ec5349dcb0 (patch) | |
tree | c30db0ee6204dd31c1a86da475976c9526bc5332 | |
parent | ffc638c283c3ad8a67bf9e3591ec6fa59209caea (diff) | |
download | ffmpeg-747283a0788b088872ca58d3d15bb2ec5349dcb0.tar.gz |
cinepak: Add another special case so that it can handle the following file:
http://samples.mplayerhq.hu/V-codecs/CVID/bad_cinepak_frame_size.mov
This fix works around another work around which handles a different type
of odd Cinepak data.
Thanks to Matthew Hoops (clone2727 - gmail.com) for the sample and fix.
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | libavcodec/cinepak.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c index c5d47be2ac..f8b5352e35 100644 --- a/libavcodec/cinepak.c +++ b/libavcodec/cinepak.c @@ -330,12 +330,13 @@ static int cinepak_decode (CinepakContext *s) /* if this is the first frame, check for deviant Sega FILM data */ if (s->sega_film_skip_bytes == -1) { - if (encoded_buf_size != s->size) { + if (encoded_buf_size != s->size && (s->size % encoded_buf_size) != 0) { /* If the encoded frame size differs from the frame size as indicated * by the container file, this data likely comes from a Sega FILM/CPK file. * If the frame header is followed by the bytes FE 00 00 06 00 00 then * this is probably one of the two known files that have 6 extra bytes - * after the frame header. Else, assume 2 extra bytes. */ + * after the frame header. Else, assume 2 extra bytes. The container + * size also cannot be a multiple of the encoded size. */ if (s->size >= 16 && (s->data[10] == 0xFE) && (s->data[11] == 0x00) && |