一、海思 VPSS介绍:
视频处理子系统 VPSS(Video Processing Sub System)实现视频处理功能。
由于UVC摄像头驱动是运行在Linux上的,抓取到的数据也是在Linux 端,而海思3559平台的对VPSS,VENC(编码器)的操作API都是在LiteOS端,因此需要把数据送往LiteOS之后,再通过API把数据送入VPSS。
二、DATAFIFO
Huawei LiteOS 和Linux两个系统之间采用DATAFIFO +IPC通信的方式进行通信。
这里通过DATAFIFO将数据传入到LiteOS中去
以下 是海思文档中的关于DATAFIFO的介绍:
DATAFIFO
。
整体设计如下:
三 LiteOS DATAFIFO
3.1、LiteOS DATAFIFO 初始化
HI_U32 UsbCamera_DataFifo_Create(HI_VOID)
{
HI_S32 s32Ret = 0;
HI_DATAFIFO_Params_S params = {
2, BLOCK_LEN, HI_TRUE, READER};
s32Ret= HI_DATAFIFO_Open(&hDataFifo, ¶ms);
if (s32Ret == HI_FAILURE)
{
fprintf(stderr, "open fail\n");
return s32Ret;
}
HI_DATAFIFO_Ioctl(hDataFifo, GET_DATAFIFO_PHY_ADDR, &DATAFIFO_phyAddr);
return HI_SUCCESS;
}
3.2 LiteOS DATAFIFO 读取函数:
void* UsbCamera_DataFifo_read_more(void *arg)
{
HI_U32 readLen = 0;
HI_CHAR *pBuf = NULL;
HI_CHAR *VPSSBuf = NULL;
VPSSBuf = (HI_CHAR *)malloc(BLOCK_LEN);
prctl(PR_SET_NAME, (unsigned long) "Hi_pTReadMore1", 0, 0, 0);
while(HI_TRUE == s_DataFifoStart)
{
readLen = 0;
HI_DATAFIFO_Ioctl(hDataFifo, GET_AVAIL_READ_LEN, &readLen);
if (readLen > 0)
{
if (HI_SUCCESS == HI_DATAFIFO_Read(hDataFifo, (HI_VOID