@ -31,6 +31,7 @@
# include "bytestream.h"
# include "get_bits.h"
# include "dsputil.h"
# include "thread.h"
enum {
PRED_NONE = 0 ,
@ -366,15 +367,17 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac
int ret ;
if ( c - > pic . data [ 0 ] )
avctx - > release_buffer ( avctx , & c - > pic ) ;
ff_thread_ release_buffer( avctx , & c - > pic ) ;
c - > pic . reference = 1 ;
c - > pic . buffer_hints = FF_BUFFER_HINTS_VALID ;
if ( ( ret = avctx - > get_buffer ( avctx , & c - > pic ) ) < 0 ) {
if ( ( ret = ff_thread_ get_buffer( avctx , & c - > pic ) ) < 0 ) {
av_log ( avctx , AV_LOG_ERROR , " get_buffer() failed \n " ) ;
return ret ;
}
ff_thread_finish_setup ( avctx ) ;
/* parse plane structure to retrieve frame flags and validate slice offsets */
ptr = buf ;
for ( i = 0 ; i < c - > planes ; i + + ) {
@ -557,7 +560,7 @@ static av_cold int decode_end(AVCodecContext *avctx)
UtvideoContext * const c = avctx - > priv_data ;
if ( c - > pic . data [ 0 ] )
avctx - > release_buffer ( avctx , & c - > pic ) ;
ff_thread_ release_buffer( avctx , & c - > pic ) ;
av_freep ( & c - > slice_bits ) ;
@ -572,7 +575,7 @@ AVCodec ff_utvideo_decoder = {
. init = decode_init ,
. close = decode_end ,
. decode = decode_frame ,
. capabilities = CODEC_CAP_DR1 ,
. capabilities = CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS ,
. long_name = NULL_IF_CONFIG_SMALL ( " Ut Video " ) ,
} ;