由vpss系统架构可以看到,h3a的数据来源只有ccdc,也即on the fly 模式,但是如果ccdc的数据走h3a 怎么还能到vpbe呢?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
由vpss系统架构可以看到,h3a的数据来源只有ccdc,也即on the fly 模式,但是如果ccdc的数据走h3a 怎么还能到vpbe呢?
你好,
你问的是DM6437的问题么?请提供具体芯片,不同的DM产品前端还是有差异的。
H3A引擎会从CCDC采集来的数据里面统计数据并输出到DDR。这个数据和CCDC数据写到DDR或者是CCDC数据到previewer是不同数据的通路。
请问你是否获得了的VPFE NDA相关的文档?
你好,
已经获得了相关文档。
芯片是dm6437,我大概知道了h3a的原理,H3a是有缓冲区的。但是我遇到了一个问题,配置完成之后,数据输出缓冲区似乎值一直都没有变化。我想的是应该会统计每一帧的数据信息,然后输出,但为何只统计了一次呢,h3a配置如下:
/* open a logical channel */
aewHandle = GIO_create(DRIVERFILE, IOM_INOUT, &gioStatus, &type, &gioAttrs);
if ((NULL == aewHandle) || (IOM_COMPLETED != gioStatus))
{
PREV_APP_PRINT("\nAEW device open failed\n");
}
else
{
resultTestAEW = GIO_control(aewHandle, PSP_H3A_IOCTL_SET_PARAM,
¶ms);
if (resultTestAEW < 0)
{
PREV_APP_PRINT("\nAEW IOCTL set params failed\n");
}
else
{
enbuffer.size = H3A_AEW_BUFFER_SIZE;
enbuffer.ramIpAddr = (Ptr)(arrayh3AAEW);
bufferSize = sizeof(PSP_H3ABuffer);
if ( NULL != enbuffer.ramIpAddr )
{
resultTestAEW = GIO_submit(aewHandle, PSP_VPSS_QUEUE, &enbuffer,&bufferSize, NULL);
if (resultTestAEW < 0)
{
PREV_APP_PRINT("\nAEW enqueue failed\n");
}
else
{
resultTestAEW = GIO_submit(aewHandle, PSP_VPSS_DEQUEUE,&debuffer, &bufferSize, NULL);
if ( resultTestAEW < 0 )
{
PREV_APP_PRINT("\nAEW dequeue failed\n");
}
PREV_APP_PRINT("\nAEW successful\n");
PAL_osCacheInvalidate((PAL_osCacheMemAddrSpace)NULL,(Uint32)debuffer.ramIpAddr, debuffer.size);
}
}
}
}
谢谢
你好,
h3a是有两个缓冲区 enbuffer,和debuffer么?负责读取ccdc数据和输出statics,是这样吗?
你好,
不好意思,DM6437的驱动我不是很熟悉。
但使用ping-pong buffer来切换获取H3At统计数据是可能的。如果你的数据通路是CCDC-》preview-》resizer,这样CCDC是不需要输出RAW数据到DDR的。CCDC输出的RAW和H3A输出的统计数据是两个不同的东西啊,不要把他们混淆在一起。
你好,
数据通路是ccdc-》preview-》vpbe,然后再加上h3a。我的意思是h3a在进行数据统计的时候是否需要先把ccdc数据放入缓存,再进行处理,之后将统计信息放入另外一块缓存区?谢谢
你好,
H3A统计数据获得是和H3A相关模块是否使能有关(当然CCDC的输入必须是RAW)。和CCDC是否把RAW存储到DDR无关。
你好,
我过多的纠结h3a的缓冲区工作原理了,官方提供的例程在h3a使能之后有
GIO_submit(aewHandle, PSP_VPSS_QUEUE, &enbuffer,&bufferSize, NULL);
GIO_submit(aewHandle, PSP_VPSS_DEQUEUE,&debuffer, &bufferSize, NULL);
并有两个h3a缓冲区enbuffer和debuffer,让我不解,谢谢指点