华为昇腾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

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

相关推荐
唐诺2 小时前
几种广泛使用的 C++ 编译器
c++·编译器
冷眼看人间恩怨3 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
红龙创客3 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
Lenyiin3 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
yuanbenshidiaos5 小时前
c++---------数据类型
java·jvm·c++
十年一梦实验室5 小时前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
taoyong0015 小时前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
这是我585 小时前
C++打小怪游戏
c++·其他·游戏·visual studio·小怪·大型·怪物
fpcc5 小时前
跟我学c++中级篇——C++中的缓存利用
c++·缓存
呆萌很6 小时前
C++ 集合 list 使用
c++