查看应用类日志,无ERROR报错、无解码结果数据输出,另外,在运行应用程序的Linux服务器上执行top命令,该应用进程的cpu占用率持续升高。
按照VDEC视频解码的接口调用逻辑:由用户提前创建一个单独的线程,并自定义线程函数,在线程函数内调用aclrtProcessReport接口,通过该接口配置超时时间,等待指定的超时时间后,触发回调函数,获取解码结果数据。
void *ThreadFunc(aclrtContext sharedContext)
{
if (sharedContext == nullptr) {
ERROR_LOG("sharedContext can not be nullptr");
return ((void*)(-1));
}
INFO_LOG("use shared context for this thread");
aclError ret = aclrtSetCurrentContext(sharedContext);
if (ret != ACL_SUCCESS) {
ERROR_LOG("aclrtSetCurrentContext failed, errorCode = %d", static_cast<int32_t>(ret));
return ((void*)(-1));
}
INFO_LOG("thread start ");
while (runFlag) {
// Notice: timeout 1000ms
(void)aclrtProcessReport(1000);
}
return (void*)0;
}示例代码如下:
while (runFlag) {
// Notice: timeout 1000ms
aclError ret = aclrtProcessReport(1000);
printf("aclrtProcessReport failed, ret=%d.\n", ret);
}在终端屏幕重复出现以下打印信息,表示调用aclrtProcessReport接口失败:
aclrtProcessReport failed, ret = 107012
查阅该接口的返回值说明,107012表示线程未订阅或重复订阅。
参见VDEC的VDEC视频解码或者参考Link上的VDEC功能样例开发VDEC功能。
其中,需关注以下注意点: