华为昇腾310B1平台视频解码失败[ERROR] Send frame to vdec failed, errorno:507018

华为昇腾310B1平台视频解码失败[ERROR] Send frame to vdec failed, errorno:507018
目录1 [ERROR] Send frame to vdec failed, errorno:5070182 bug解决尝试13 bug解决尝试24 最终解决方法参考文献1 [ERROR] Send frame to vdec failed, errorno:507018某项目中的代码运行报错 [ERROR] Send frame to vdec failed, errorno:507018AclLiteError VdecHelper::Process(shared_ptrFrameData frameData, void* userData) { // create input desc AclLiteError atlRet CreateInputStreamDesc(frameData); if (atlRet ! ACLLITE_OK) { ACLLITE_LOG_ERROR(Create stream desc failed); return atlRet; } if (!frameData-isFinished) { // create out desc atlRet 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 decode ret 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.comhttps://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 size ret acldvppSetStreamDescData(streamInputDesc_, inBufferDev); ret acldvppSetStreamDescSize(streamInputDesc_, inBufferSize); // Device memory g_picOutBufferDev is used to store output data decoded by VDEC ret acldvppMalloc(g_picOutBufferDev, dataSize); // Create output image description information, set the image description information properties // picOutputDesc_ is acldvppPicDesc picOutputDesc_ acldvppCreatePicDesc(); ret acldvppSetPicDescData(picOutputDesc_, g_picOutBufferDev); ret acldvppSetPicDescSize(picOutputDesc_, dataSize); ret acldvppSetPicDescFormat(picOutputDesc_, static_castacldvppPixelFormat(format_)); /* Perform video stream decoding. After decoding each frame of data, the system automatically calls callback callback function to write the decoded data to the file, and then timely release relevant 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.comhttps://gitee.com/ascend/samples/tree/master/cplusplus/level1_single_api/7_dvpp/vdec_sample我试了下这个发现是可以没报错那么需要将我的工程中的解码代码全都替换成这个sample的这些接口需要把解码代码重写。另外下图是这个sample对应的解码原理参考文献华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云samples: CANN Samples - Gitee.comsamples: CANN Samples - Gitee.com昇腾社区-官网丨昇腾万里 让智能无所不及