diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c index 5074f4a64a..e5ffbbf1b8 100644 --- a/libavcodec/pthread.c +++ b/libavcodec/pthread.c @@ -1146,23 +1146,16 @@ static void validate_thread_parameters(AVCodecContext *avctx) int ff_thread_init(AVCodecContext *avctx) { - if (avctx->thread_opaque) { - av_log(avctx, AV_LOG_ERROR, "avcodec_thread_init is ignored after avcodec_open\n"); - return -1; - } - #if HAVE_W32THREADS w32thread_init(); #endif - if (avctx->codec) { validate_thread_parameters(avctx); if (avctx->active_thread_type&FF_THREAD_SLICE) return thread_init(avctx); else if (avctx->active_thread_type&FF_THREAD_FRAME) return frame_thread_init(avctx); - } return 0; } diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 573bba6342..25c6386aae 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -1173,7 +1173,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code goto free_and_end; } - if (HAVE_THREADS && !avctx->thread_opaque + if (HAVE_THREADS && !(avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) { ret = ff_thread_init(avctx); if (ret < 0) {