前段时间基于FFMpeg 写了一个软编软解的 模块 供业务层调用,即利用CPU来做 不需要依赖于特定硬件

最近 又来了一个需求需要基于寒武纪MLU270 来做视频编解码 ,摸索了三四天 发现一个奇怪的现象就是,正常解码没有问题, 但是编码的时候 如果不改变分辨率 可以正常编码 ,

但是如果改变了分辨率发现编出来的数据不对 不能正常播放,最终和寒武纪的人员确认

CNCodec 只能做编解码 不能做视频缩放 ,如果需要做视频缩放需要 自己处理 或者调用CNCV 来实现 ,

ffmpeg-mlu的描述说明里面有 :

如下 :

集成了cambricon 硬件平台的 ffmpeg版本下载ffmpeg-mlu下载

ffmpeg with cambricon​​​​​​

之前没怎么接触过寒武纪平台

发现了和ffmpeg不一样的地方

ffmpeg解码之后 得到yuv数据 直接送给下一步编码就可以了

但是寒武纪的解码之后 得到一个cnvideoDecOutput 的数据结构

得到的这个数据你并不能直接拿来用

根据官方提供的sample大概可以理解为,解码出来的这个数据是放在板卡里面的内存里面的

我们要用的话需要将他从板卡的内存考到电脑的的内存  即从device 拷到 host

这个device就是指寒武纪硬件卡 ,host即指我们的电脑

编码的时候 又需要将host的内存拷到板卡的内存

还有一个就是根据官方文档说明:

解码出来的数据 必须调用

cnvideoDecAddReference 添加引用之后才能操作他

使用完毕之后 需要调用

cnvideoDecReleaseReference 删除引用 ,当引用计数为0 之后 内部会释放掉这块内存。

所以就会得到如下的代码:


static void decode_cb(void* data, void* param)
{cnvideoEncInput input;cncodecWorkInfo work_info;BOOL ret = 0;if (!data || !param){return;}QMCY_MLU270_CODEC *handle = (QMCY_MLU270_CODEC*)param;QMCY_MLU270_DECODER* pHandle = &handle->m_decoder;QMCY_MLU270_ENCODER* encoder = &handle->m_encoder;memset(&work_info, 0, sizeof(work_info));work_info.inMsg.instance = 0;work_info.inMsg.cardId = 0;work_info.inMsg.mode = 0;cnvideoDecOutput *output_frame = (cnvideoDecOutput*)data;ret = cnvideoDecAddReference(pHandle->decode_handle,&output_frame->frame);if(ret < 0){printf("cnvideoDecAddReference failed:ret is %d\n",ret);return;}//dumpSurfaceData(g_fileyuv,&output_frame->frame);//CopyFrame(&input.frame, frame);memset(&input, 0, sizeof(cnvideoEncInput));ret = cnvideoEncWaitAvailInputBuf(encoder->encode_handle, &input.frame, 3000);if (ret < 0) {printf("Call cnvideoEncWaitAvailInputBuf failed, ret(%d)\n", ret);return;}TranscodeDemoVirFrame src_frame(output_frame->frame.width, output_frame->frame.height,output_frame->frame.pixelFmt, output_frame->frame.planeNum,output_frame->frame.stride);// device to hostCopyDevFrame2VirFrame(&src_frame, &output_frame->frame);#if 0 //Does not supportret = cncodecImageTransform(&dst_frame, nullptr, &dst_frame, nullptr, CNCODEC_Filter_BiLinear, &work_info);if(ret != CNCODEC_SUCCESS){printf("cncodecImageTransform failed :%d\n",ret);}
#endif// host to deviceCopyVirFrame2DevFrame(&input.frame, &src_frame);src_frame.ReleaseDemoVirFrame();ret = cnvideoDecReleaseReference(pHandle->decode_handle, &output_frame->frame);if (ret < 0) {printf("Call cnvideoDecReleaseReference failed, ret(%d)\n", ret);return ;}input.pts =  encoder->packet_index++ % CNCODEC_PTS_MAX_VALUE;printf("Pts is %d \n",input.pts);ret = cnvideoEncFeedFrame(encoder->encode_handle, &input, 5000);if (ret < 0) {printf("Call CN_Encode_Feed_Frame failed, ret(%d)\n", ret);}}

基于寒武纪CNCodec 做视频编解码遇到的一些问题相关推荐

  1. 基于FFMPEG 的跨平台视频编解码研究

    第33卷 第11期 2011年11月 武 汉 理 工 大 学 学 报 JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11 췍췍췍췍췍췍췍췍췍췍췍췍췍췍 ...

  2. 一个做视频编解码的求职之路

    秋招于10月15号左右结束了,为大家分享一下做视频编解码方面的公司和我面过的企业,整个校招我大概面了13家左右的公司,在北京的公司,这是为了找找求职经验的,很遗憾的互联网公司一家没面过,秋招最失败的地 ...

  3. 视频编解码优化以及与AI的实践结合

    RealNetworks是流媒体类别的发明者,改变了音频和视频内容在各种设备和全世界消费的方式.在编解码市场的大环境下,RealNetworks推出了新一代的视频压缩算法RMHD,专为下一代的高清流媒 ...

  4. 回首十几年视频编解码之路

    最近读了大师兄悟空的一篇公众号文章,深有体会.其中有一段话: 非常同意,若非喜欢真的就放弃了. 引起了我的许多回忆,因此想要写这篇文字. 学习阶段 第一次接触视频编解码是研一的时候,当时导师有一个北京 ...

  5. 深入理解视频编解码技术----基于H.264标准及参考模型 读书笔记

    书名: <深入理解视频编解码技术--基于H.264标准及参考模型> 第一章 1.各种变换,如DCT, 离散傅里叶变换等,是为了变换到另一个域中,便于对图像进行压缩(如果加入预测,残差值会更 ...

  6. 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4

    前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...

  7. HTM-16.3+VSR3.5——基于MVD多视点视频编解码实验

    HTM-16.3+VSR3.5--基于MVD多视点视频编解码实验 ​ 帮学长跑多视点视频编解码的对比实验,遇到一些问题记录一下. 一.HTM16.3下载与编译 ​ HTM各个版本的码源可以在下面这个网 ...

  8. MPSOC VCU多路视频编解码(基于gstreamer)

    MPSOC VCU多路视频编解码 alvin.lu@avnet.com 2020.09.12 软件平台: Vivado 2019.1 PetaLinux 2019.1 Ubuntu16.04.6真机 ...

  9. AV1:为互联网提供开放、免费的视频编解码工具

    从学术研究到进入工业界,Zoe Liu一直在算法和音视频领域,目前在谷歌编解码团队为编解码器AV1做开发支持.Zoe畅谈了评定编解码器的标准,以及AV1的最新进度.本文是『下一代编码器』系列采访之一, ...

最新文章

  1. linux xz 解压initrd.img,2016-8-28 linux基础学习——压缩解压缩及归档 while脚本
  2. 用python画漂亮图片-python结合G2绘制精美图形
  3. rust(31)-枚举体
  4. C++11 - sizeof用于类成员
  5. 15_多子图-Subplot、Subplot: 使用多个figures和 axes、替代解决方案:
  6. 45岁,一个平凡大叔的异地打工生活
  7. java ee各类组件_在Java EE组件中使用骆驼路线
  8. 《鸿蒙理论知识05》HarmonyOS概述之下载与安装软件
  9. 可以使用中文作为变量名_次氯酸可以作为伤口消毒使用吗?
  10. .net面试题(会持续更新)
  11. 华为交换机 consolep密码和vty密码配置telnet,ssh
  12. 迅雷赚钱宝变砖TTL修复教程赚钱宝刷机
  13. 轮询机制是什么意思(通俗理解轮询)
  14. 位移的单位符号_位移传感器符号
  15. 子曰:中庸之为德也,其至矣乎!民鲜久矣。
  16. UI设计师、平面设计师常用的网站大全,初学者必备,大家都在用!
  17. 【C库函数】 strstr函数详解
  18. $refs 模拟点击
  19. 小程序textarea字体错位
  20. 南京移动开发者沙龙(创业邦+果合)

热门文章

  1. 德国海曼HTPA 32x32d热成像传感器代替MLX90640之传感器数据读取和计算
  2. python大数据运维常用脚本_python大数据运维
  3. python大数据读取分析_python 大数据读取
  4. 印象笔记终于支持 Markdown 了
  5. 计算机网络 5 - 链路层
  6. linux ppm转jpg_python将.ppm格式图片转换成.jpg格式文件的方法
  7. SQL语句中不完整数据的补足处理技巧
  8. 【OpenBMC 系列】2.OpenBMC镜像编译流程
  9. UNLIMITED TABLESPACE权限
  10. Oracle table move tablespace