localhost

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost  发布于  2016-12-01 13:17:04
采纳率 0%
16个问答
15262

海思系统中的VB块分配原则

 
本帖最后由 localhost 于 2016-12-1 13:31 编辑

由于一些特殊原因 近期在研究海思平台的系统控制中的VB缓存池配置部分产生一些疑问
希望前辈们指点一下

根据手册了解到一组视频缓存池主要包含多个大小相同、物理地址连续的内存空间。
对于这部分的变量定义有:[code]typedef struct hiVB_CONF_S
{
        HI_U32 u32MaxPoolCnt; /* max count of pools, (0,VB_MAX_POOLS] */
        Struct hiVB_CPOOL_S
        {
                HI_U32 u32BlkSize;
                HI_U32 u32BlkCnt;
                HI_CHAR acMmzName[MAX_MMZ_NAME_LEN];
        }astCommPool[VB_MAX_COMM_POOLS];
} VB_CONF_S;[/code]

这里我个人理解是 u32MaxPoolCnt代表着有多少组视频缓存池,astCommPool代表着第N组视频缓存池的属性。
那么,对于各组缓存池中属性中的 缓存块大小以及个数的确定又是根据什么关联呢?
假设几组属性分别为:
        Commpool[0] :
                blksize=1920*1080; blkcnt=30;
        CommPool[1]:       
                blksize=1366*768;   blkcnt=30;
那么是不是代表着
        输入视频分辨率在1366*768和1920*1080之间的设备只能公共缓存池0 而小于1366*768的则都可以使用呢?
如果是这样的话(因为不是很清楚具体的vb块在运行过程中 程序库是如何分配的,如果可以希望前辈可以介绍一下),
我想应该有一个原则,这样在用户按规则配置后可以使得资源利用最大化、浪费较低,但是不知道这个原则是怎样的。
如果没有这样的原则,那么是不是可以在创建一组缓存池,并且将这组缓存池中的数据块大小设置为3840*2160
(HI3531A的最大输入),同时将缓存块个数设定足够大,就可以满足多路输入的视频取用了呢?
如果我的理解有错误的话 希望前辈们可以结合图片指导一下 谢谢了!
我来回答
回答22个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-12-01 13:40:15
认可0

个人理解海思使用VB的原则两条:

第一, VB的size必须大于等于需求
第二, 在满足第一条原则下, 选择最合适的(最小的)


localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-01 13:49:31
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42211&ptid=13548]zhuangweiye 发表于 2016-12-1 13:40[/url]
个人理解海思使用VB的原则两条:

第一, VB的size必须大于等于需求
[/quote]

确实,感觉size应该不少于输入视频一帧的大小
但是,单路视频比较好理解。如果拓展至多路呢?
多路视频的话,是否理解为第n路视频输入对应调用第n个视频缓存池呢?
如果不是的话,那么,手册中限制的最大缓存池个数的作用,以及要区分缓存池组的作用要如何理解呢?

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-12-01 14:08:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42212&ptid=13548]localhost 发表于 2016-12-1 13:49[/url]
确实,感觉size应该不少于输入视频一帧的大小
但是,单路视频比较好理解。如果拓展至多路呢?
多路视频 ...[/quote]

和多路无关, 第n个视频输入和第n个VB池也没有必然关系

一般来说, 一个应用不会只有一种VB
比如VI需要1080P的VB, 假定大小是1920x1080x3/2, 个数可能是每路8个, 同时子码流编码也需要VB, 假定大小是D1(704x576x3/2), 个数可能是每路3个, 那么就可以用下面的代码(假定是8路):
                        stVbConf.astCommPool[0].u32BlkSize = 1920x1080x3/2;
                        stVbConf.astCommPool[0].u32BlkCnt = 64;

                        stVbConf.astCommPool[1].u32BlkSize = 704x576x3/2;
                        stVbConf.astCommPool[1].u32BlkCnt = 24;

当然土豪可以用1920x1080x3/2的VB开88个, 也没有问题
但是ddr就是钱, 控制成本是我等必须面对的事实, 能少用就要少用

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-01 14:42:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42214&ptid=13548]zhuangweiye 发表于 2016-12-1 14:08[/url]
和多路无关, 第n个视频输入和第n个VB池也没有必然关系

一般来说, 一个应用不会只有一种VB
[/quote]

原来如此。那么,问题也就出现了。根据前辈举得例子,
应该表示缓存池0,创建目的为了vi的视频编码;缓存池1,是为了提供子码流编码这个样子吧?
那么,对于这两缓存池,讲道理是主码流因为数据多所以不宜使用缓存池1中的数据块。
但是,子码流数据少,他应该可以使用缓存池0中的资源。那么是否意味着在实际运行过程中,
出现子码流通道使用缓存池0中的资源情况呢?这种情况,是否有库内部处理机制呢?

顺便可否说一下 那个视频块的大小计算中分辨率乘3/2或者乘3然后右移一位是什么作用呢?为了保证数据16位对其么?

_nucong

2个粉丝

24

问答

0

专栏

4

资料

_nucong 2016-12-01 14:50:31
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42219&ptid=13548]localhost 发表于 2016-12-1 14:42[/url]
原来如此。那么,问题也就出现了。根据前辈举得例子,
应该表示缓存池0,创建目的为了vi的视频编码;缓 ...[/quote]

应该和这个有关系的:
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
    PIXEL_FORMAT_YUV_SEMIPLANAR_420, // * 3/2
    PIXEL_FORMAT_YUV_SEMIPLANAR_444,// *3

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-01 14:52:36
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42221&ptid=13548]_nucong 发表于 2016-12-1 14:50[/url]
应该和这个有关系的:
PIXEL_FORMAT_YUV_SEMIPLANAR_422,
    PIXEL_FORMAT_YUV_SEMIPLANAR_420, // *  ...[/quote]

原来这样 我以为是为了满足之前有一个系统数据的全局属性要求的字节对齐 非常感谢!

_nucong

2个粉丝

24

问答

0

专栏

4

资料

_nucong 2016-12-01 14:53:18
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42219&ptid=13548]localhost 发表于 2016-12-1 14:42[/url]
原来如此。那么,问题也就出现了。根据前辈举得例子,
应该表示缓存池0,创建目的为了vi的视频编码;缓 ...[/quote]

涉及到sride部分在这里:
#define VB_PIC_HEADER_SIZE(Width, Height, Type, size)\
    do{\
        if (PIXEL_FORMAT_YUV_SEMIPLANAR_422 == Type || PIXEL_FORMAT_RGB_BAYER == Type )\
        {\
            size = VB_HEADER_STRIDE * (Height) * 2;\
        }\
        else if(PIXEL_FORMAT_YUV_SEMIPLANAR_420 == Type)\
        {\
            size = (VB_HEADER_STRIDE * (Height) * 3) >> 1;\
        }\
        else if(PIXEL_FORMAT_YUV_400 == Type)\
        {\
            size = VB_HEADER_STRIDE * (Height);\
        }\
    }while(0)

在原来基础上(1920 * 1080 * 3 / 2)  + 这部分:
sample_venc.c:
u32VbSize += u32HeaderSize;

_nucong

2个粉丝

24

问答

0

专栏

4

资料

_nucong 2016-12-01 14:54:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42222&ptid=13548]localhost 发表于 2016-12-1 14:52[/url]
原来这样 我以为是为了满足之前有一个系统数据的全局属性要求的字节对齐 非常感谢![/quote]

我感觉是这样,不代表正确, 抛砖引玉..

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2016-12-01 14:59:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42224&ptid=13548]_nucong 发表于 2016-12-1 14:54[/url]
我感觉是这样,不代表正确, 抛砖引玉..[/quote]

是的,yuv存储,对于PIXEL_FORMAT_YUV_SEMIPLANAR_420,1920x1080只有y值得话是1920x1080,再加上u、v是1920x1080x0.5

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-12-01 15:59:18
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42219&ptid=13548]localhost 发表于 2016-12-1 14:42[/url]
原来如此。那么,问题也就出现了。根据前辈举得例子,
应该表示缓存池0,创建目的为了vi的视频编码;缓 ...[/quote]

分几种情况:

1. VB数量足够, 运行过程中没有出现VB被某个模块拿住不放的情况, 那么各种VB是不会混用的

2. VB数量不够, 尤其是小的VB不够, 这时会出现需要小VB的模块因为小VB被用光而去用大VB的情况, 这种情况从另一个角度去看, 如果是常态, 会发现实际可以减少大VB的数量,增加小VB的个数来满足要求, 同时可以减少总mem的用量

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-01 16:35:34
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42227&ptid=13548]zhuangweiye 发表于 2016-12-1 15:59[/url]
分几种情况:

1. VB数量足够, 运行过程中没有出现VB被某个模块拿住不放的情况, 那么各种VB是不会混用的 ...[/quote]

哦 谢谢 暂时了解了

封锁记忆

0个粉丝

39

问答

0

专栏

1

资料

封锁记忆 2017-08-22 14:27:46
认可0
还是 新手,以后慢慢学习:D

yzm12345

0个粉丝

0

问答

0

专栏

0

资料

yzm12345 2018-02-06 16:03:24
认可0
666666,学习了

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2018-02-06 17:27:05
认可0
比较详细,学习了:lol

zx_dvr

0个粉丝

0

问答

0

专栏

0

资料

zx_dvr 2018-07-19 20:00:53
认可0
学习了,很好的想法

夏天骑单车

0个粉丝

0

问答

0

专栏

0

资料

夏天骑单车 2018-07-26 09:20:40
认可0
学习到了,谢谢前辈们的指点。:lol

hero

0个粉丝

1

问答

0

专栏

0

资料

hero 2017-08-22 15:01:02
认可0
强..................

helphel

0个粉丝

4

问答

0

专栏

0

资料

helphel 2017-08-24 20:18:58
认可0
学习学习。。。

jipd

0个粉丝

14

问答

0

专栏

0

资料

jipd 2018-07-24 18:05:06
认可0
学习学习。。。。

jipd

0个粉丝

14

问答

0

专栏

0

资料

jipd 2018-07-27 17:50:38
认可0
学习,学习。。。
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区