qn1551778570

qn1551778570

0个粉丝

1

问答

0

专栏

0

资料

qn1551778570  发布于  2019-03-20 16:56:55
采纳率 0%
1个问答
2783

HI3559AV100的HI_MPI_VPSS_SenfFrame使用问题

 
最近在HI3559AV100上尝试将YUV数据直接发送到VPSS模块,参考了论坛前两天的帖子,
        static HI_U32 u32TimeRef= 0;
        HI_U32 *pVirAddr;
        HI_U32 u32LStride;
        HI_U32 u32CStride;
        HI_U32 u32LumaSize;
        HI_U32 u32ChrmSize;
        HI_U32 u32Width;
        HI_U32 u32Height;
        HI_S32 s32Ret = HI_SUCCESS;

        memset(&stFrameInfo,0,sizeof(VIDEO_FRAME_INFO_S));
        memset(&stFrameInfo.stVFrame, 0, sizeof(VIDEO_FRAME_S));
       
        u32Width = pstYuvThreadParam->width;
        u32Height = pstYuvThreadParam->height;
        u32LStride = u32Width;
        u32CStride = u32Width;
        u32LumaSize = (u32LStride * u32Height);
        u32ChrmSize = (u32CStride * u32Height) >> 2;/* 420*/
        u32Size = u32LumaSize + (u32ChrmSize << 1);
        printf("u32Size:%d\n",u32Size);
        /* get a buffer block from pool*/
        Face_VbBlk = HI_MPI_VB_GetBlock(Face_VbPool, u32Size,NULL);
        if (VB_INVALID_HANDLE == Face_VbBlk )
        {
                printf("get vb block err\n");
                (void)HI_MPI_VB_DestroyPool(Face_VbPool);
        }
       
        /* get the physical address of buffer block*/
        Face_VB_u32Addr = HI_MPI_VB_Handle2PhysAddr(Face_VbBlk);
        if (HI_SUCCESS == Face_VB_u32Addr)
        {
                printf("blk to physaddr err\n");
        }
       
        printf("poolid:%d,vbblk:%d,addr:%#x\n",Face_VbPool,Face_VbBlk,Face_VB_u32Addr);
        pVirAddr =(HI_U32*)HI_MPI_SYS_Mmap(Face_VB_u32Addr,u32Size);
        printf("pVirAddr:%#x\n",pVirAddr);
        /* mmap physical address to virtual address*/
       
       
        stFrameInfo.stVFrame.u32Width = u32Width;
        stFrameInfo.stVFrame.u32Height = u32Height;
        stFrameInfo.stVFrame.enField = VIDEO_FIELD_FRAME;
        stFrameInfo.stVFrame.enPixelFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;
        stFrameInfo.stVFrame.enVideoFormat = VIDEO_FORMAT_LINEAR;
        stFrameInfo.stVFrame.enCompressMode = COMPRESS_MODE_NONE;
       
        stFrameInfo.stVFrame.s16OffsetTop = 0;
        stFrameInfo.stVFrame.s16OffsetBottom = 0;
        stFrameInfo.stVFrame.s16OffsetLeft = 0;
        stFrameInfo.stVFrame.s16OffsetRight = 0;
        stFrameInfo.stVFrame.u32TimeRef = u32TimeRef;
        stFrameInfo.stVFrame.u64PTS = 0;

        stFrameInfo.stVFrame.u32Stride[0] = u32LStride;
        stFrameInfo.stVFrame.u32Stride[1] = u32CStride;
        stFrameInfo.stVFrame.u32Stride[2] = u32CStride;
        stFrameInfo.stVFrame.u64PhyAddr[0] = Face_VB_u32Addr;
        stFrameInfo.stVFrame.u64PhyAddr[1] = stFrameInfo.stVFrame.u64PhyAddr[0] + u32LumaSize;
        stFrameInfo.stVFrame.u64PhyAddr[2] = stFrameInfo.stVFrame.u64PhyAddr[1] + u32ChrmSize;
        stFrameInfo.stVFrame.u64VirAddr[0] = pVirAddr;
        printf("pVirAddr:%#x\n",stFrameInfo.stVFrame.u64VirAddr[0]);
        stFrameInfo.stVFrame.u64VirAddr[1] = stFrameInfo.stVFrame.u64VirAddr[0] + u32LumaSize;
        stFrameInfo.stVFrame.u64VirAddr[2] = stFrameInfo.stVFrame.u64VirAddr[1] + u32ChrmSize;
        stFrameInfo.stVFrame.u64PrivateData = 0;
        stFrameInfo.u32PoolId = Face_VbPool;
        //stFrameInfo.enModId   = HI_ID_VB;
        stFrameInfo.enModId = HI_ID_VPSS;

        memcpy(pVirAddr,pstYuvThreadParam->buffer,pstYuvThreadParam->width*pstYuvThreadParam->height*3/2);
        printf("yuvstart\n");
        s32Ret=HI_MPI_VPSS_SendFrame(0, 0, &stFrameInfo, 1);
        if(s32Ret != HI_SUCCESS)
            {
                SAMPLE_PRT("YUV Send data to VPSS fail for %#x!\n", s32Ret);
            }
        HI_MPI_SYS_Munmap(pVirAddr,u32Size);

最后出现的问题就是YUV Send data to VPSS fail for 0xa0078003;
因为HI3559AV100和HI3559有一些区别,不知道32位地址和64位地址定义,赋值这一块会影响吗?
还是由于stFrameInfo.enModId,但是改成 HI_ID_VB和 HI_ID_USER也是相同的报错。
我来回答
回答2个
时间排序
认可量排序

qn1551778570

0个粉丝

1

问答

0

专栏

0

资料

qn1551778570 2019-03-20 17:00:29
认可0
本帖最后由 qn1551778570 于 2019-3-20 17:03 编辑

VIDEO_FRAME_INFO_S定义

muchforest

0个粉丝

1

问答

0

专栏

0

资料

muchforest 2019-03-28 08:46:44
认可0
帅哥,搞定没?
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区