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

目录

[1 ERROR Send frame to vdec failed, errorno:507018](#1 [ERROR] Send frame to vdec failed, errorno:507018)

[2 bug解决尝试1](#2 bug解决尝试1)

[3 bug解决尝试2](#3 bug解决尝试2)

[4 最终解决方法](#4 最终解决方法)

参考文献:


1 ERROR Send frame to vdec failed, errorno:507018

某项目中的代码运行报错 ERROR Send frame to vdec failed, errorno:507018

cpp 复制代码
    AclLiteError VdecHelper::Process(shared_ptr<FrameData> 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.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

在代码中增加这一行打印

cpp 复制代码
    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_cast<acldvppPixelFormat>(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.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

昇腾社区-官网丨昇腾万里 让智能无所不及

相关推荐
左手の明天6 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
青少儿编程课堂7 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i7 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
无名猿9 小时前
shared_ptr 完全指南:引用计数、控制块与开销
c++·性能优化·内存管理·标准库·现代c++
xailorliu11 小时前
SLIC_超像素算法
c++·opencv·目标检测·机器学习·计算机视觉
苏打豆12 小时前
CRISP源码阅读——基于ROS2力矩反馈控制器与速度加速度零空间
c++·线性代数·算法·矩阵·机器人
小小龙学IT13 小时前
snap7 开源西门子 S7 通信协议库深度解析
c++·开源
小溪学编程13 小时前
从 C++ 的规范变迁看语言发展
jvm·c++·面试
ShineWinsu14 小时前
对于Redis:string类型的解析
java·c++·redis·分布式·缓存·面试·string