@ -145,6 +145,7 @@ static int decode_frame(AVCodecContext *avctx,
GetByteContext gbc ;
int colors ;
int w , h , ret ;
int ver ;
bytestream2_init ( & gbc , avpkt - > data , avpkt - > size ) ;
if ( bytestream2_get_bytes_left ( & gbc ) > = 552
@ -153,6 +154,8 @@ static int decode_frame(AVCodecContext *avctx,
)
bytestream2_skip ( & gbc , 512 ) ;
ver = check_header ( gbc . buffer , bytestream2_get_bytes_left ( & gbc ) ) ;
/* smallest PICT header */
if ( bytestream2_get_bytes_left ( & gbc ) < 40 ) {
av_log ( avctx , AV_LOG_ERROR , " Frame is too small %d \n " ,
@ -170,12 +173,15 @@ static int decode_frame(AVCodecContext *avctx,
/* version 1 is identified by 0x1101
* it uses byte - aligned opcodes rather than word - aligned */
if ( bytestream2_get_be32 ( & gbc ) ! = 0x001102FF ) {
if ( ver = = 1 ) {
avpriv_request_sample ( avctx , " QuickDraw version 1 " ) ;
return AVERROR_PATCHWELCOME ;
} else if ( ver ! = 2 ) {
avpriv_request_sample ( avctx , " QuickDraw version unknown (%X) " , bytestream2_get_be32 ( & gbc ) ) ;
return AVERROR_PATCHWELCOME ;
}
bytestream2_skip ( & gbc , 26 ) ;
bytestream2_skip ( & gbc , 4 + 26 ) ;
while ( bytestream2_get_bytes_left ( & gbc ) > = 4 ) {
int bppcnt , bpp ;