1 MPSoC Video Codec Unit提供详细说明-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MPSoC Video Codec Unit提供详细说明

YCqV_FPGA_EETre 来源:赛灵思中文社区论坛 作者:付汉杰 2021-05-28 15:09 次阅读

Xilinx提供超低延时编解码方案,并提供了全套软件。MPSoC Video Codec Unit提供了详细说明。其中的底层应用软件是VCU Control-Software(Ctrl-SW)。

本文主要说明为Ctrl-SW增加功能,支持不同Stride/Pitch(步长)的YUV文件的编码。

1.1. VCU输入和输出格式

Video Codec Unit(VCU) 输入和输出都是是NV12/NV16格式的视频,Y分量存放在一块连续内存区,UV分量交替存放在Y分量后面的连续内存。具体信息,可以参考VCU Product Guide中的“Source Frame Format”和“Memory Format”。

1.2. VCU内存的pitch

视频数据在内存区中存放时,两行之间的数据可以有间隔。对于每个像素的Y分量用8-bit表示的图像,每个像素的Y分量对应内存的一个字节,图像Y分量的每一行对应的内存大小就是其宽度代表的字节数。比如1920x1080,每一行图像的Y分量需要1920字节内存。如果以2048字节来存储一行1920x1080的图像数据,则在前面存放图像数据,后面的数据被VCU忽略。也可以参考PG252的“Figure 7: Frame Buffer Pitch”。

02

NEWS

输入文件分辨率

与视频数据在内存区中存放一样,视频数据在文件中存放时也有类似的情况。

Ctrl-SW假设输入文件的分辨率一般和实际图像分辨率一致,也就是pitch和图像宽度一致。但是实际应用时,输入文件的分辨率、实际图像分辨率并不一致。在文件里,有一部分数据是真实图像数据,有一部分是无用数据。比如有YUV NV12文件的文件分辨率是3840x1080,实际图像的分辨率是1920x1080。每一行的数据中,只有前面1920字节是有效图像数据,后面的1920字节是冗余数据。

03

NEWS

代码

为了支持这种场景,需要修改代码。Ctrl-SW的读YUV文件的代码,在文件YuvIO.cpp里的函数ReadOneFrameYuv()里。下面是基于Ctrl-SW 2020.2的修改。

首先定义一个全局变量,用于存储输入文件的Stride/Pitch(步长)。

int gi_encoder_input_stride=0;

接下来增加的ctrlsw_encoder的命令行选项。这样命令行选项里可以对图像步长gi_encoder_input_stride赋值。

opt.addInt(“--input-stride”, &gi_encoder_input_stride, “Stride in input YUV file.”);

最后修改函数ReadOneFrameYuv()。原来的代码,直接使用真实图像宽度计算YUV文件里每行的数据的字节数,代码是“uRowSizeLuma = GetIOLumaRowSize(tFourCC, tDim.iWidth)”。修改后的代码,使用真实图像宽度作为YUV文件里图像步长iYuvStride的缺省值。另外增加代码,检查命令行选项里赋值的图像步长gi_encoder_input_stride。如果gi_encoder_input_stride不为0,则将gi_encoder_input_stride赋值给图像步长iYuvStride。接下来使用图像步长iYuvStride计算YUV文件里,每行的数据的字节数。

bool ReadOneFrameYuv(std::ifstream& File, AL_TBuffer* pBuf, bool bLoop)

{

if(!pBuf || !File.is_open())

throw std::runtime_error(“invalid argument”);

if((File.peek() == EOF) && !bLoop)

return false;

TFourCC tFourCC = AL_PixMapBuffer_GetFourCC(pBuf);

AL_TDimension tDim = AL_PixMapBuffer_GetDimension(pBuf);

int32_t iYuvStride = tDim.iWidth;

if( 0 != gi_encoder_input_stride )

{

iYuvStride = gi_encoder_input_stride;

LogVerbose(“New YUV width size:%d at %s:%d.

”, iYuvStride, __func__, __LINE__ );

}

//uint32_t uRowSizeLuma = GetIOLumaRowSize(tFourCC, tDim.iWidth);

uint32_t uRowSizeLuma = GetIOLumaRowSize(tFourCC, iYuvStride);

LogVerbose(“YUV Luma row size:%d at %s:%d.

”, uRowSizeLuma, __func__, __LINE__ );

ReadFile(File, pBuf, uRowSizeLuma, tDim.iHeight);

if((File.rdstate() & std::failbit) && bLoop)

{

File.clear();

File.seekg(0, std::beg);

ReadFile(File, pBuf, uRowSizeLuma, tDim.iHeight);

}

if(File.rdstate() & std::failbit)

throw std::runtime_error(“not enough data for a complete frame”);

return true;

}

其它的代码,不需要修改。

注意,YUV文件里图像步长(stride/pitch),要不小于内存里的图像步长(stride/pitch)。因此,测试时,同时使用了选项“--stride”和选项“--input-stride”。

04

NEWS

测试

测试了输入分辨率是3840x1080的NV12 yuv文件,编码图像分辨率1920x1080,得到了正确的265文件。命令如下:

有意思的是,结合选项“--stride”、选项“--stride-height”、和选项“--input-stride”,相等于在编码前对图像实现了裁剪(crop)功能。

05

NEWS

其它 5.1. 命令行选项

“--input-width”和“--input-height”

Ctrl-SW 2020.2里有两个命令行选项,“--input-width”,和“--input-height”。这两个选用用于指定实际图像分辨率,可以取代配置文件里的图像分辨率。这个选项并不能指定输入文件的分辨率。

opt.addInt(“--input-width”, &cfg.MainInput.FileInfo.PictWidth, “Specifies YUV input width”);

opt.addInt(“--input-height”, &cfg.MainInput.FileInfo.PictHeight, “Specifies YUV input height”);

06

NEWS

未来工作

未来可以继续测试NV16的图像,也可以测试其它分辨率的图像。

原文标题:【工程师分享】MPSoC VCU Ctrl-SW 2020.2 编码不同Stride的YUV文件

文章出处:【微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3019

    浏览量

    74001
  • VCU
    VCU
    +关注

    关注

    17

    文章

    80

    浏览量

    20544

原文标题:【工程师分享】MPSoC VCU Ctrl-SW 2020.2 编码不同Stride的YUV文件

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    车载应用中的高品质,高性能音频CODEC解决方案

    。 伴随着汽车电子进入“智能座舱”时代,汽车智能化趋势成为行业热点,车载应用对音频产品的技术提供商提出越来越高的功能要求。 新唐科技的CODEC路线图如下: *SR: Sampling Rate 新唐科技严格执行汽车行业规范标准,为车载应用
    的头像 发表于 11-28 16:21 352次阅读
    车载应用中的高品质,高性能音频<b class='flag-5'>CODEC</b>解决方案

    基于PYNQ和机器学习探索MPSOC笔记

    引言:《Exploring Zynq MPSoC With PYNQ and Machine Learning Applications》是当年Zynq Book(ZYNQ-7000)的升级版本,在
    的头像 发表于 11-16 11:32 277次阅读
    基于PYNQ和机器学习探索<b class='flag-5'>MPSOC</b>笔记

    在米尔电子MPSOC实现12G SDI视频采集H.265压缩SGMII万兆以太网推流

    同时广播多个视频源的4K UHD广播应用来说非常有用。这种多任务处理能力使得MPSoC成为多媒体中心和视频服务器的理想选择。4.灵活性和可扩展性:MPSoC的可编程逻辑(PL)提供了任意到任意高速视频
    发表于 11-01 16:56

    请问是否有TLV320AIC3104音频codec的驱动源码?

    请问是否有TLV320AIC3104 这款音频codec的驱动源码?分别驱动耳机,麦克风Codec说明,谢谢
    发表于 10-25 06:53

    C6748做主提供codec时钟,请问MCASP边沿触发应该怎么设置?

    我们公司一个音频的项目,基本架构是c6748加AIC3106。后来换了一个codec,这个新的codec是cs4272,这是一个24bit的codec,前一段时间问了芯片原厂,原厂建议暂时用
    发表于 10-21 07:03

    在米尔电子MPSOC实现12G SDI视频采集H.265压缩SGMII万兆以太网推流

    MPSoC的可编程逻辑(PL)提供了任意到任意高速视频/音频接口的灵活性,可以为多媒体管道带来定制图像及视频处理功能的差异化效果。这种可编程性使得系统能够适应不断变化的音视频广播需求。 专用硬件加速
    发表于 10-14 17:42

    使用TPS65086x PMIC为Xilinx Zynq UltraScale MPSoC供电

    德赢Vwin官网 网站提供《使用TPS65086x PMIC为Xilinx Zynq UltraScale MPSoC供电.pdf》资料免费下载
    发表于 09-21 11:11 0次下载
    使用TPS65086x PMIC为Xilinx Zynq UltraScale <b class='flag-5'>MPSoC</b>供电

    使用提供的esp_audio_codec 的库组件时,不能将AAC音频解码回PCM音频,为什么?

    使用提供的esp_audio_codec 的库组件时,能够将PCM音频编码为AAC音频,但是不能将AAC音频解码回PCM音频,是为什么导致的呀
    发表于 06-05 06:39

    网线接线标准详细说明

    在网络通信中,网线接线标准至关重要,它确保了网络设备的正确连接和高效通信。以下是关于网线接线标准的详细说明: 一、线序标准 网线的线序标准主要有两种,即EIA/TIA的568A和568B标准。 标准
    的头像 发表于 05-15 10:34 3069次阅读

    适用于 Xilinx® MPSoC 和 FPGA的可配置多轨PMU TPS650864数据表

    德赢Vwin官网 网站提供《适用于 Xilinx® MPSoC 和 FPGA的可配置多轨PMU TPS650864数据表.pdf》资料免费下载
    发表于 04-01 09:58 0次下载
    适用于 Xilinx® <b class='flag-5'>MPSoC</b> 和 FPGA的可配置多轨PMU TPS650864数据表

    3KW工业变频器电路设计方案详细说明

    3KW工业变频器电路设计方案详细说明
    的头像 发表于 03-19 08:33 926次阅读
    3KW工业变频器电路设计方案<b class='flag-5'>详细说明</b>

    浅谈S-VIDEO接口静电浪涌防护

    代,比如HDMI、DVI等。现在S-video接口广泛应用于电视、监视器、摄像机、录像机等视频设备中,提供了比传统的复合视频接口更好的视频质量
    的头像 发表于 03-07 08:02 695次阅读
    浅谈S-<b class='flag-5'>VIDEO</b>接口静电浪涌防护

    适用于 Xilinx® MPSoC 和 FPGA 的可配置多轨PMU TPS650864数据表

    德赢Vwin官网 网站提供《适用于 Xilinx® MPSoC 和 FPGA 的可配置多轨PMU TPS650864数据表.pdf》资料免费下载
    发表于 03-06 17:07 0次下载
    适用于 Xilinx® <b class='flag-5'>MPSoC</b> 和 FPGA 的可配置多轨PMU TPS650864数据表

    电源模块外壳材质详细说明 保护散热绝缘 AC电源模块

    电源模块外壳材质详细说明 保护散热绝缘 AC电源模块 BOSHIDA 选择电源模块外壳材质时,需要考虑以下几个因素: 保护性能:外壳材质需要具有足够的强度和硬度,能够保护电源模块内部的电路和元件不受
    的头像 发表于 02-20 09:03 699次阅读

    鸿蒙ArkUI开发-Video组件的使用

    以视频功能为例,在应用开发过程中,我们需要通过ArkUI提供Video组件为应用增加基础的视频播放功能。借助Video组件,我们可以实现视频的播放功能并控制其播放状态。常见的视频播放场景包括观看网络上的较为流行的短视频,也包括
    的头像 发表于 01-23 16:59 1324次阅读
    鸿蒙ArkUI开发-<b class='flag-5'>Video</b>组件的使用