@ -606,6 +606,8 @@ static int h264_init_context(AVCodecContext *avctx, H264Context *h)
return 0 ;
}
static AVOnce h264_vlc_init = AV_ONCE_INIT ;
av_cold int ff_h264_decode_init ( AVCodecContext * avctx )
{
H264Context * h = avctx - > priv_data ;
@ -619,7 +621,11 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
if ( ! avctx - > has_b_frames )
h - > low_delay = 1 ;
ff_h264_decode_init_vlc ( ) ;
ret = ff_thread_once ( & h264_vlc_init , ff_h264_decode_init_vlc ) ;
if ( ret ! = 0 ) {
av_log ( avctx , AV_LOG_ERROR , " pthread_once has failed. " ) ;
return AVERROR_UNKNOWN ;
}
if ( avctx - > codec_id = = AV_CODEC_ID_H264 ) {
if ( avctx - > ticks_per_frame = = 1 )
@ -1801,6 +1807,7 @@ AVCodec ff_h264_decoder = {
. capabilities = /*AV_CODEC_CAP_DRAW_HORIZ_BAND |*/ AV_CODEC_CAP_DR1 |
AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_FRAME_THREADS ,
. caps_internal = FF_CODEC_CAP_INIT_THREADSAFE ,
. flush = flush_dpb ,
. init_thread_copy = ONLY_IF_THREADS_ENABLED ( decode_init_thread_copy ) ,
. update_thread_context = ONLY_IF_THREADS_ENABLED ( ff_h264_update_thread_context ) ,