@ -57,6 +57,7 @@ typedef struct TsccContext {
unsigned char * decomp_buf ;
unsigned char * decomp_buf ;
GetByteContext gb ;
GetByteContext gb ;
int height ;
int height ;
int zlib_init_ok ;
z_stream zstream ;
z_stream zstream ;
uint32_t pal [ 256 ] ;
uint32_t pal [ 256 ] ;
@ -128,8 +129,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
c - > height = avctx - > height ;
c - > height = avctx - > height ;
// Needed if zlib unused or init aborted before inflateInit
memset ( & c - > zstream , 0 , sizeof ( z_stream ) ) ;
switch ( avctx - > bits_per_coded_sample ) {
switch ( avctx - > bits_per_coded_sample ) {
case 8 : avctx - > pix_fmt = AV_PIX_FMT_PAL8 ; break ;
case 8 : avctx - > pix_fmt = AV_PIX_FMT_PAL8 ; break ;
case 16 : avctx - > pix_fmt = AV_PIX_FMT_RGB555 ; break ;
case 16 : avctx - > pix_fmt = AV_PIX_FMT_RGB555 ; break ;
@ -160,6 +159,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
av_log ( avctx , AV_LOG_ERROR , " Inflate init error: %d \n " , zret ) ;
av_log ( avctx , AV_LOG_ERROR , " Inflate init error: %d \n " , zret ) ;
return AVERROR_UNKNOWN ;
return AVERROR_UNKNOWN ;
}
}
c - > zlib_init_ok = 1 ;
c - > frame = av_frame_alloc ( ) ;
c - > frame = av_frame_alloc ( ) ;
if ( ! c - > frame )
if ( ! c - > frame )
@ -175,7 +175,8 @@ static av_cold int decode_end(AVCodecContext *avctx)
av_freep ( & c - > decomp_buf ) ;
av_freep ( & c - > decomp_buf ) ;
av_frame_free ( & c - > frame ) ;
av_frame_free ( & c - > frame ) ;
inflateEnd ( & c - > zstream ) ;
if ( c - > zlib_init_ok )
inflateEnd ( & c - > zstream ) ;
return 0 ;
return 0 ;
}
}