//用来判断是帧还是片线程初始化
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) {
//有效的线程参数,将会设置avctx->active_thread_type,进而判断进入下面if的哪个条件
validate_thread_parameters(avctx);// 查看FFmepg 多线程解码历程 - 1:validate_thread_parameters 讲解
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); //下一篇讲解frame_thread_init的具体内容
}
return 0;
}
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) {
//有效的线程参数,将会设置avctx->active_thread_type,进而判断进入下面if的哪个条件
validate_thread_parameters(avctx);// 查看FFmepg 多线程解码历程 - 1:validate_thread_parameters 讲解
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); //下一篇讲解frame_thread_init的具体内容
}
return 0;
}