qn1543394364

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364  发布于  2019-03-12 19:43:53
采纳率 0%
11个问答
8998

3559的HI_MPI_VPSS_SendFrame如何使用?

 
目前像把一张yuv420sp的图片送入vpss模块中处理后再通过vo显示(不经过vcap模块)不过由于3559都是经过mapi封装过的,我在文档中找不到相应的接口,请问该怎么做?
我来回答
回答26个
时间排序
认可量排序

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-12 19:52:16
认可0
主要3559没有相关的例程

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-12 20:27:07
认可0
本帖最后由 qn1543394364 于 2019-3-12 20:28 编辑

memset(&stVbConf,0,sizeof(VB_CONF_S));
stVbConf.u32MaxPoolCnt = 128;
stVbConf.astCommPool[0].u32BlkSize = 1280*720*2;
stVbConf.astCommPool[0].u32BlkCnt = 1;
stVbConf.astCommPool[1].u32BlkSize = 1280*720*2;
stVbConf.astCommPool[1].u32BlkCnt = 1;
s32Ret = HI_MPI_VB_SetConf(&stVbConf);
s32ret = HI_MPI_VB_Init();
s32Ret = HI_MAPI_Sys_Init();
s32Ret =HI_MAPI_Media_Init();

        //start vproc 0
        HI_HANDLE VProcHdl = 0;
        HI_VPROC_ATTR_S stVprocAttr;
        memset(&stVprocAttr,0,sizeof(HI_VPROC_ATTR_S));
        stVprocAttr.enVProcType = VPROC_TYPE_VIDEO;
        stVprocAttr.u32MaxW = 1280;
        stVprocAttr.u32MaxH = 720;
        CHECK_RET(HI_MAPI_VProc_Init(VProcHdl, &stVprocAttr));
        CHECK_RET(HI_MAPI_VProc_Start(VProcHdl));
       

        HI_HANDLE VPortHdl1 = 0;//1;
        HI_VPORT_ATTR_S  stVPortAttr1;
        memset(&stVPortAttr1,0,sizeof(HI_VPORT_ATTR_S));
        stVPortAttr1.s32FrameRate = 30;
        stVPortAttr1.stResolution.u32Width = 640;
        stVPortAttr1.stResolution.u32Height = 480;
        stVPortAttr1.enPixFormat = HI_MPP_PIXEL_FORMAT_420;
        //stVPortAttr1.enCompressMode = HI_COMPRESS_MODE_SEG;
        stVPortAttr1.enCompressMode = COMPRESS_MODE_NONE;
        CHECK_RET(HI_MAPI_VProc_Port_SetAttr(VProcHdl, VPortHdl1, &stVPortAttr1));
        CHECK_RET(HI_MAPI_VProc_Port_Start(VProcHdl, VPortHdl1));
       
       
                                                       
HI_U32 u32PhyAddr,*pVirAddr;       
VIDEO_FRAME_INFO_S pstVFrameInfo ;

memset(&pstVFrameInfo.stVFrame, 0, sizeof(VIDEO_FRAME_S));
HI_U32 u32Height=720;
HI_U32 u32Width=1280;
HI_U32 u32LStride=u32Width;
HI_U32 u32CStride=u32Width;
/*get width and height of pictrue */
HI_U32 u32LumaSize = (u32LStride * u32Height);
HI_U32 u32ChrmSize = (u32CStride * u32Height) >> 2;//420,亮度
HI_U32 u32Size = u32LumaSize + (u32ChrmSize << 1);

/* get video buffer block form common pool */

    VB_BLK handleY = VB_INVALID_HANDLE;
    handleY = HI_MPI_VB_GetBlock( VB_INVALID_POOLID, u32Size, NULL);

    if (VB_INVALID_HANDLE == handleY)
    {
printf("HI_MPI_VB_GetBlock failed %d %d\n", handleY,u32Size);
   
    }
        else
                {
printf("HI_MPI_VB_GetBlock success %d %d\n", handleY,u32Size);
                }

printf("VbBlk:%d\n",handleY);

/* get physical address*/
u32PhyAddr = HI_MPI_VB_Handle2PhysAddr(handleY);
printf("u32PhyAddr:%#x\n",u32PhyAddr);
if (0 == u32PhyAddr)
{
printf("HI_MPI_VB_Handle2PhysAddr failed\n");
return -1;
}

pVirAddr=HI_MPI_SYS_Mmap(u32PhyAddr,u32Size);
printf("pVirAddr:%#x u32Size %d\n",pVirAddr,u32Size);
/* mmap physical address to virtual address*/
/* get pool id */

pstVFrameInfo.u32PoolId=HI_MPI_VB_Handle2PoolId(handleY);

printf("pstVFrameInfo->u32PoolId:%d\n",pstVFrameInfo.u32PoolId);
if (VB_INVALID_POOLID == pstVFrameInfo.u32PoolId)
{
printf("HI_MPI_VB_Handle2PoolId faile\n");
return -1;
}
pstVFrameInfo.stVFrame.u32PhyAddr[0] = u32PhyAddr;
pstVFrameInfo.stVFrame.u32PhyAddr[1] = pstVFrameInfo.stVFrame.u32PhyAddr[0] + u32LumaSize;
pstVFrameInfo.stVFrame.u32PhyAddr[2] = pstVFrameInfo.stVFrame.u32PhyAddr[1] + u32ChrmSize;
pstVFrameInfo.stVFrame.pVirAddr[0] = pVirAddr;
pstVFrameInfo.stVFrame.pVirAddr[1] = pstVFrameInfo.stVFrame.pVirAddr[0] + u32LumaSize;
pstVFrameInfo.stVFrame.pVirAddr[2] = pstVFrameInfo.stVFrame.pVirAddr[1] + u32ChrmSize;

pstVFrameInfo.stVFrame.u32Width = u32Width;
pstVFrameInfo.stVFrame.u32Height = u32Height;
pstVFrameInfo.stVFrame.u32Stride[0] = u32LStride;
pstVFrameInfo.stVFrame.u32Stride[1] = u32CStride;
pstVFrameInfo.stVFrame.u32Stride[2] = u32CStride;

pstVFrameInfo.stVFrame.enPixelFormat =PIXEL_FORMAT_YUV_SEMIPLANAR_420;
/*  从原始文件读取yuv420sp帧,然后调用给编码接口 */
s32Ret = fread(pVirAddr,1280* 720 * 3 / 2, 1, pFile2);               
if(s32Ret < 0)                {               
        printf("fread yuv420sp failed\n");               
        //return -1;       
        }               
/* 开始发送读到的数据到编码接口 */       
s32Ret = HI_MAPI_Vpro_senddyuv(VProcHdl, VPortHdl1,&pstVFrameInfo);//这是我将HI_MPI_VPSS_SendFrame封装到mapi层的接口,其实就是调用HI_MPI_VPSS_SendFrame
if(s32Ret != 0)                {               
        printf("HI_MPI_VENC_SendFrame failed %x\n",s32Ret);
        return -1;       
        }
       
       
       
       
       
        代码如上,报错:0xA0078003 HI_ERR_VPSS_ILLEGAL_PARAM VPSS 参数设置无效
        请问该如何解决?是不是说hi3559对HI_MPI_VPSS_SendFrame的调用与其他芯片不太一样?

wb_cool

0个粉丝

5

问答

0

专栏

0

资料

wb_cool 2019-03-13 08:47:37
认可0
先看看手册上调用HI_MPI_VPSS_SendFrame注意事项

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 09:08:08
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140425&ptid=73530]wb_cool 发表于 2019-3-13 08:47[/url]
先看看手册上调用HI_MPI_VPSS_SendFrame注意事项[/quote]

好的,不过我主要是因为找不到一个3559的sample,网上找到的都是其他芯片的。

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 09:28:29
认可0
本帖最后由 qn1543394364 于 2019-3-13 09:32 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=140425&ptid=73530]wb_cool 发表于 2019-3-13 08:47[/url]
先看看手册上调用HI_MPI_VPSS_SendFrame注意事项[/quote]

请问HI_MPI_VPSS_SendFrame是不是不能在mapi层调用?

wb_cool

0个粉丝

5

问答

0

专栏

0

资料

wb_cool 2019-03-13 10:21:35
认可0
如果前面初始化都没问题,单看下面这两步
/*  从原始文件读取yuv420sp帧,然后调用给编码接口 */
s32Ret = fread(pVirAddr,1280* 720 * 3 / 2, 1, pFile2);               
if(s32Ret < 0)                {               
        printf("fread yuv420sp failed\n");               
        //return -1;        
        }               
/* 开始发送读到的数据到编码接口 */        
s32Ret = HI_MAPI_Vpro_senddyuv(VProcHdl, VPortHdl1,&pstVFrameInfo);//这是我将HI_MPI_VPSS_SendFrame封装到mapi层的接口,其实就是调用HI_MPI_VPSS_SendFrame
if(s32Ret != 0)                {               
        printf("HI_MPI_VENC_SendFrame failed %x\n",s32Ret);
        return -1;        
        }


调用fread读取数据,然后数据呢,不是应该再处理下才放入HI_MPI_VPSS_SendFrame,还是数据处理部分在HI_MAPI_Vpro_senddyuv里?

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 10:36:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140430&ptid=73530]wb_cool 发表于 2019-3-13 10:21[/url]
如果前面初始化都没问题,单看下面这两步
/*  从原始文件读取yuv420sp帧,然后调用给编码接口 */
s32Ret ...[/quote]

数据直接读到了pVirAddr虚拟地址上了

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 10:40:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140430&ptid=73530]wb_cool 发表于 2019-3-13 10:21[/url]
如果前面初始化都没问题,单看下面这两步
/*  从原始文件读取yuv420sp帧,然后调用给编码接口 */
s32Ret ...[/quote]

我目前就想把这张yuv420sp格式的图片经过vpss再到vo显示一下,数据暂时不处理的

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-03-13 10:43:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140439&ptid=73530]qn1543394364 发表于 2019-3-13 10:40[/url]
我目前就想把这张yuv420sp格式的图片经过vpss再到vo显示一下,数据暂时不处理的[/quote]

参数非法

mpp4.0的VIDEO_FRAME_INFO_S结构比mpp3.0多了一个成员

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 10:48:47
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140440&ptid=73530]zhuangweiye 发表于 2019-3-13 10:43[/url]
参数非法

mpp4.0的VIDEO_FRAME_INFO_S结构比mpp3.0多了一个成员[/quote]

多谢指点!那请问具体是哪个成员,我这个例子也是参考庄工你之前回复的例子的[url]http://bbs.ebaina.com/forum.php?mod=viewthread&tid=37986&page=2[/url]

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 10:51:22
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140440&ptid=73530]zhuangweiye 发表于 2019-3-13 10:43[/url]
参数非法

mpp4.0的VIDEO_FRAME_INFO_S结构比mpp3.0多了一个成员[/quote]

只不过平台我是用的3559,我总觉得调用HI_MPI_VB_Init之后再调用mapi层的系统初始化接口HI_MAPI_Sys_Init会有点问题,虽然没有报错,请问是否有问题

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-03-13 10:51:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140441&ptid=73530]qn1543394364 发表于 2019-3-13 10:48[/url]
多谢指点!那请问具体是哪个成员,我这个例子也是参考庄工你之前回复的例子的http://bbs.ebaina.com/foru ...[/quote]



qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 10:54:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140444&ptid=73530]zhuangweiye 发表于 2019-3-13 10:51[/url]
[/quote]

我这边只有两个成员,我用的是3559(不带A)的

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 10:57:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140444&ptid=73530]zhuangweiye 发表于 2019-3-13 10:51[/url]
[/quote]

截图如下VIDEO_FRAME_INFO_S

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-13 11:02:27
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140444&ptid=73530]zhuangweiye 发表于 2019-3-13 10:51[/url]
[/quote]

目前想要实现的功能如下:3559接入一个usb摄像头,显示出内容以及录像和拍照功能,因为之前在3559平台上做过sensor,想要把sensor的工程修改下以适应usb摄像头,我目前的方案是:把vi模块去掉,直接给vpro模块传入一帧一帧的yuv图片

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-14 09:52:16
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140451&ptid=73530]qn1543394364 发表于 2019-3-13 11:02[/url]
目前想要实现的功能如下:3559接入一个usb摄像头,显示出内容以及录像和拍照功能,因为之前在3559平台上 ...[/quote]

主要找不到3559调用HI_MPI_VPSS_SendFrame的sample

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-03-14 10:08:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140502&ptid=73530]qn1543394364 发表于 2019-3-14 09:52[/url]
主要找不到3559调用HI_MPI_VPSS_SendFrame的sample[/quote]

加一句试试

pstVFrameInfo.stVFrame.u32Field = VIDEO_FIELD_FRAME;

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-14 10:18:14
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140503&ptid=73530]zhuangweiye 发表于 2019-3-14 10:08[/url]
加一句试试

pstVFrameInfo.stVFrame.u32Field = VIDEO_FIELD_FRAME;[/quote]

已加,还是报相同的错。请问vpss初始化需要注意哪些?我自己申请了一块vb如何让vpss知道呢?

qn1543394364

0个粉丝

11

问答

0

专栏

0

资料

qn1543394364 2019-03-14 10:19:41
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140504&ptid=73530]qn1543394364 发表于 2019-3-14 10:18[/url]
已加,还是报相同的错。请问vpss初始化需要注意哪些?我自己申请了一块vb如何让vpss知道呢?[/quote]

我怀疑是vpss初始化的方式不对

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-03-14 10:26:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=140505&ptid=73530]qn1543394364 发表于 2019-3-14 10:19[/url]
我怀疑是vpss初始化的方式不对[/quote]


建议楼主自己写个测试程序, 把不需要的代吗都屏蔽了

如果觉得vpss有问题, 可以sendframe到VENC

个人感觉还是VIDEO_FRAME_INFO_S没有填对的问题
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区