时由于新版本加入一个新参数async_depth,取值范围为:(1,INT_MAX)参数位于QSVContext::async_depth,
这个参数用于设置解码深度,数值越高,解码数据的延迟越高。
async_depth默认为4,这也是我解码时,老是第4帧数据压入才会有一帧真确解码输出的原因,
将其设置为1,则能表现为输入的每一帧I帧都能立即解码输出。
av_opt_set(context->priv_data, "async_depth", "1", 0);
若设置无效,请将此调用在avcodec_open2函数的前后都调用一次尝试。
我的一段代码如下
context->field_order = AV_FIELD_PROGRESSIVE;
av_opt_set(context->priv_data, "async_depth", "1", 0);
av_opt_set(context->priv_data, "gpu_copy", "on", 0);
//av_opt_set(context->priv_data, "load_plugin", "hevc_sw", 0);
frame = av_frame_alloc();
if (!frame)
return false;
int ret = avcodec_open2(context, codec, NULL);
if (ret < 0)
return false;
av_opt_set(context->priv_data, "async_depth", "1", 0);
av_opt_set(context->priv_data, "gpu_copy", "on", 0);
//av_opt_set(context->priv_data, "load_plugin", "hevc_sw", 0);
context->field_order = AV_FIELD_PROGRESSIVE;