|
|
|
@ -3358,6 +3358,7 @@ fail: |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if HAVE_THREADS |
|
|
|
|
static int hevc_update_thread_context(AVCodecContext *dst, |
|
|
|
|
const AVCodecContext *src) |
|
|
|
|
{ |
|
|
|
@ -3439,6 +3440,7 @@ static int hevc_update_thread_context(AVCodecContext *dst, |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static av_cold int hevc_decode_init(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
@ -3478,6 +3480,7 @@ static av_cold int hevc_decode_init(AVCodecContext *avctx) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if HAVE_THREADS |
|
|
|
|
static av_cold int hevc_init_thread_copy(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
|
HEVCContext *s = avctx->priv_data; |
|
|
|
@ -3491,6 +3494,7 @@ static av_cold int hevc_init_thread_copy(AVCodecContext *avctx) |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
static void hevc_decode_flush(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
@ -3529,8 +3533,8 @@ AVCodec ff_hevc_decoder = { |
|
|
|
|
.close = hevc_decode_free, |
|
|
|
|
.decode = hevc_decode_frame, |
|
|
|
|
.flush = hevc_decode_flush, |
|
|
|
|
.update_thread_context = hevc_update_thread_context, |
|
|
|
|
.init_thread_copy = hevc_init_thread_copy, |
|
|
|
|
.update_thread_context = ONLY_IF_THREADS_ENABLED(hevc_update_thread_context), |
|
|
|
|
.init_thread_copy = ONLY_IF_THREADS_ENABLED(hevc_init_thread_copy), |
|
|
|
|
.capabilities = 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 | FF_CODEC_CAP_EXPORTS_CROPPING, |
|
|
|
|