海思3559的stride与TCP的SIGPIPE

  

目录

 图像宽度

   stride的概念

   3559的stride一些要求

配置实践

通道创建

编码帧创建

错误配置

图像的扩展

VPSS扩展

内存拷贝扩展

DMA逐行拷贝

编码耗时

耗时优化

总结

SIGPIPE 


 图像宽度

MIN_ALIGN22222

对齐最小为2个字节。在创建VENC通道时,宽度为2的倍数即可。那么在采用VENC模块进行编码时,是否分辨率的宽度为2的倍数就可以高枕无忧了呢

         

   stride的概念

    理解为硬件每次获取的图像像素数吧,类似于人走一步,例如上图,假设图像宽度是1910,而stride 为1920 。通过stride设置为某些数值的倍数,例如16、32、64的倍数。

    至于为啥会设置为16、32、64的倍数,那必定和性能、内存访问相关了,具体就不展开了。

   3559的stride一些要求

表10-3 Hi3559AV100 VGS 硬件规格

输入图像分辨率及对齐要求1、最小支持: 32x32。2、最大支持: 16384x16384。3、宽度和高度均为 2 像素对齐,非压缩 stride 16 对齐,压缩stride 32 对齐。注意:如果宽度的缩小倍数大于 15 倍时,要求输入图像的宽度 4 像素对齐, 高度同理。

配置实践

以分辨率4760x1000为例,

通道创建

这里为了16对齐,将最大width配置为4768;而实际宽度配置为图像的宽度即4760

stVencChnAttr.stVencAttr.enType          = enType;
    stVencChnAttr.stVencAttr.u32MaxPicWidth  = stPicSize.u32Width; 这里是4768
    stVencChnAttr.stVencAttr.u32MaxPicHeight = stPicSize.u32Height; 
    stVencChnAttr.stVencAttr.u32PicWidth     = stPicSize.u32Width-8;/*the picture width*/ 这里是4760
    stVencChnAttr.stVencAttr.u32PicHeight    = stPicSize.u32Height;/*the picture height*/
    stVencChnAttr.stVencAttr.u32BufSize      = stPicSize.u32Width * stPicSize.u32Height * 2;/*stream buffer size*/
    stVencChnAttr.stVencAttr.u32Profile      = u32Profile;
    stVencChnAttr.stVencAttr.bByFrame        = HI_TRUE;/*get stream mode is slice mode or frame mode?*/

编码帧创建

stFrmInfo.stVFrame.u32Width    = g_u32PicWidth-8; //这里配置为4760
        stFrmInfo.stVFrame.u32Height    = g_u32PicHeigh;
        stFrmInfo.stVFrame.u32Stride[0] = g_u32PicWidth; //这里配置为4768

通过上述两个配置,可以编码生成和原始图像一样的分辨率。


错误配置

 1)假如通道创建时,设置的width为4768,而创建编码帧时width设置了 4760,则报如下错误:

<3>[  venc] [Func]:VencCheckVideoInfo [Line]:1595 [Info]:Venc 0 :Src pic is small,lost this frame,src(4760,1000),Venc(4768,1000).

2)假如通道创建时,设置的width为4760,而创建编码帧时width设置了 4768,则报如下错误

<3>[    vb] [Func]:VbSearchCommPoolBySize [Line]:979 [Info]:all blk size of vb pool (owner -1 ) is smaller than the actual size 18211200 required!
<1>[  venc] [Func]:VencSendPic2Vgs [Line]:2209 [Info]:get VB fail,for Venc 0 Vgs scale
<3>[  venc] [Func]:VencSendPic [Line]:1285 [Info]:Venc:0 send pic to vgs failed!,u64PTS=6076095458

通过此处我们可以得知:配置的尺寸不匹配时,3559 会自动进入vgs scale流程。

图像的扩展

   由于原始进入到3559的图像是4760*1000的,为了能正常编码,满足编码器的要求,需要将stride扩展到4768,这就需要在每行扩展出8个字节。

VPSS扩展

报错: 

<3>[  vpss] [Func]:VPSS_DRV_CheckImageAttr [Line]:5100 [Info]:[grp0]:pic Stride[0](4760)  Stride[1](0)  Stride[2](0) should be aligned to 16!!

很悲催,VPSS输入的stride也需要16字节对齐。

内存拷贝扩展

将图像内存映射成带cache的,然后memcpy,耗时15ms。即每帧编码的整个流程增加了15ms。

DMA逐行拷贝

PCIE 2.0  X1 。整帧拷贝时,耗时43ms。而按行拷贝时,变为dma time: 54979.000000 us,增加了11ms。

编码耗时

23ms

耗时优化

 PCIE3.0 X2 。 在整帧DMA 时,数据带宽大概为理论的78%左右,因而整帧耗时大概12ms,而按行传输,时间大概要23ms上下了,不过这个也满足要求。

总结

   在用海思 、RK芯片处理图像时,图像的stride 必须考虑清楚,否则引入新的操作流程就会带来新的延时。 

   RK芯片,这个有介绍:

  嵌入式图像处理中的 Stride 原理与 Rockchip 平台对齐实践-CSDN博客

SIGPIPE 

现象:客户要求用TCP推流, 在测试用TCP客户端发送推流数据时,将TCP服务端关闭,客户端程序直接闪退了,啥现象也没有。

往上同类型案例也比较多,例如: 

(98 封私信 / 80 条消息) 我的服务程序被 SIGPIPE 信号给搞崩了! - 知乎

深入解析Linux SIGPIPE信号:网络编程中的沉默杀手-CSDN博客

随着人类对生命健康需求的不断增长,新药研发面临着前所未有的挑战。传统的药物研发流程通常耗时长达十年以上,耗资数十亿美元,且最终成功率极低,这在制药界被称为“反摩尔定律”困境。近年来,人工智能技术的飞速发展,特别是深度学习和大数据分析的广泛应用,为新药发现带来了革命性的契机。人工智能能够从海量的化学和生物数据中挖掘潜在规律,显著加速药物靶点发现、先导化合物优化等关键环节。在此背景下,本研究旨在设计并实现一个基于人工智能的新药发现辅助系统,以期为传统药物研发流程提供高效的智能化辅助工具,从而有效缩短研发周期并大幅降低研发成本。本研究以Python作为主要开发语言,深度结合PyTorch和TensorFlow两大主流深度学习框架,并集成RDKit化学信息学工具包,构建了一个功能完善的新药发现辅助系统。系统的核心目标是利用先进的人工智能技术辅助新药分子的设计活性评估。在研究方法上,本文创新性地提出了一种融合多模态数据的新药发现算法。该算法综合处理分子的多种表示形式,包括一维的SMILES序列、二维的分子图结构以及三维的空间构象数据。通过构建多通道神经网络,系统能够有效提取并融合不同模态的特征,从而全面捕捉分子的理化性质生物学活性之间的复杂非线性关系。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计实现 第6章 系统测试分析 第7章 总结展望 参考文献 附件-实现指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

proware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值