目录
1 [ERROR] Send frame to vdec failed, errorno:507018
2 bug解决尝试1
3 bug解决尝试2
4 最终解决方法
参考文献:
1 [ERROR] Send frame to vdec failed, errorno:507018
某项目中的代码运行报错 [ERROR] Send frame to vdec failed, errorno:507018
AclLiteError VdecHelper::Process(shared_ptr<FrameData> frameData, void* userData) {// create input descAclLiteError atlRet = CreateInputStreamDesc(frameData);if (atlRet != ACLLITE_OK) {ACLLITE_LOG_ERROR("Create stream desc failed");return atlRet;}if (!frameData->isFinished) {// create out descatlRet = CreateOutputPicDesc(outputPicSize_.load());if (atlRet != ACLLITE_OK) {ACLLITE_LOG_ERROR("Create pic desc failed");return atlRet;}}else {outputPicDesc_ = acldvppCreatePicDesc();if (outputPicDesc_ == nullptr) {ACLLITE_LOG_ERROR("Create vdec output pic desc failed");return ACLLITE_ERROR_CREATE_PIC_DESC;}}// send data to dvpp vdec to decoderet = aclvdecSendFrame(vdecChannelDesc_, inputStreamDesc_,outputPicDesc_, nullptr, userData);if (ret != ACL_SUCCESS) {ACLLITE_LOG_ERROR("Send frame to vdec failed, errorno:%d", ret);return ACLLITE_ERROR_VDEC_SEND_FRAME;}return ACLLITE_OK;}void VdecHelper::SetOutputPicSize(uint32_t picSize) {if (picSize < outputPicSize_.load()) {outputPicSize_.store(picSize);}}
用vscode调试发现
发现正常和报错时的一些变量也没什么区别,
2 bug解决尝试1
然后网上搜507018的错误码,找到如下链接昇腾社区-官网丨昇腾万里 让智能无所不及
这上面就是说每次都要重新配置描述类型,但是我看了下我的代码里面已经是每次都重新配置描述类型了,该方法行不通。
3 bug解决尝试2
不知道怎么做了,去下载华为官方的sample,然后先跑demo试试,去下载samples: CANN Samples - Gitee.com
https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/0_data_process
然后编译运行这个samples-master/cplusplus/level2_simple_inference/0_data_process/vdec
在代码中增加这一行打印
while (restLen > 0) {//INFO_LOG("------------------------- ");// inBufferDev means the memory for input video data by Device, and inBufferSize means the memory sizeret = acldvppSetStreamDescData(streamInputDesc_, inBufferDev);ret = acldvppSetStreamDescSize(streamInputDesc_, inBufferSize);// Device memory g_picOutBufferDev is used to store output data decoded by VDECret = acldvppMalloc(&g_picOutBufferDev, dataSize);// Create output image description information, set the image description information properties// picOutputDesc_ is acldvppPicDescpicOutputDesc_ = acldvppCreatePicDesc();ret = acldvppSetPicDescData(picOutputDesc_, g_picOutBufferDev);ret = acldvppSetPicDescSize(picOutputDesc_, dataSize);ret = acldvppSetPicDescFormat(picOutputDesc_, static_cast<acldvppPixelFormat>(format_));/* Perform video stream decoding. After decoding each frame of data, the system automaticallycalls callback callback function to write the decoded data to the file, and then timely releaserelevant resources */ret = aclvdecSendFrame(vdecChannelDesc_, streamInputDesc_, picOutputDesc_, nullptr, nullptr);printf("ret =================%d\n", ret);restLen = restLen - 1;}
运行结果如下
demo报同样的错误,但是我发现如果原视频用华为的std::string filePath = "../data/vdec_h265_1frame_rabbit_1280x720.h265"就不报错,换成我自己的几个视频就报错。
4 最终解决方法
华为技术支持让试试:samples: CANN Samples - Gitee.com
https://gitee.com/ascend/samples/tree/master/cplusplus/level1_single_api/7_dvpp/vdec_sample
我试了下这个,发现是可以,没报错,那么需要将我的工程中的解码代码全都替换成这个sample的这些接口,需要把解码代码重写。
另外下图是这个sample对应的解码原理
参考文献:
华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云
samples: CANN Samples - Gitee.com
samples: CANN Samples - Gitee.com
昇腾社区-官网丨昇腾万里 让智能无所不及