xhhcy

xhhcy

0个粉丝

5

问答

0

专栏

0

资料

xhhcy  发布于  2016-06-15 15:50:50
采纳率 0%
5个问答
7492

怎么将本地的yuv图片送入VDA侦测通道

 
示例程序中是VI绑定VDA来侦测视频图像的,现在想着将本地的两张YUV图片送入通道,一张做背景,一张做待侦测图片,看看其侦测结果??不知道这个要怎么做??求大神帮忙!!
我来回答
回答19个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-06-15 16:06:58
认可0
利用HI_MPI_VDA_SendPic()

xhhcy

0个粉丝

5

问答

0

专栏

0

资料

xhhcy 2016-06-15 17:09:49
认可0
主要是这个函数中一个参数:帧信息结构体不知道怎么弄??你能详细说一下怎么设置这个参数吗???

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-06-15 17:18:28
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31759&ptid=11615]xhhcy 发表于 2016-6-15 17:09[/url]
主要是这个函数中一个参数:帧信息结构体不知道怎么弄??你能详细说一下怎么设置这个参数吗???[/quote]

看文档呀, 文档上的说明很详细

xhhcy

0个粉丝

5

问答

0

专栏

0

资料

xhhcy 2016-06-15 17:49:36
认可0
文档上就说了那个结构体的声明,并没有说怎么读一张图片写入这个结构体指针??能不能加个QQ1174020676膜拜一下你啊!!谢谢了

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-06-16 08:28:40
认可0
主要是VIDEO_FRAME_S

typedef struct hiVIDEO_FRAME_S
{
HI_U32 u32Width;
HI_U32 u32Height;
VIDEO_FIELD_E u32Field;
PIXEL_FORMAT_E enPixelFormat;
VIDEO_FORMAT_E enVideoFormat;
COMPRESS_MODE_E enCompressMode;
HI_U32 u32PhyAddr[3];
HI_VOID *pVirAddr[3];
HI_U32 u32Stride[3];
HI_U32 u32HeaderPhyAddr[3];
HI_VOID *pHeaderVirAddr[3];
HI_U32 u32HeaderStride[3];
HI_U16 u16OffsetTop; /* top offset of show area */
HI_U16 u16OffsetBottom; /* bottom offset of show area */
HI_U16 u16OffsetLeft; /* left offset of show area */
HI_U16 u16OffsetRight; /* right offset of show area */
HI_U64 u64pts;
HI_U32 u32TimeRef;
HI_U32 u32PrivateData;
}VIDEO_FRAME_S;

一般来说主要的几个是:
u32Width,u32Height不用多解释了,图像的宽和高
enPixelFormat 像素格式, 对于海思内部编解码以及IVE/VDA一般使用PIXEL_FORMAT_YUV_SEMIPLANAR_422或PIXEL_FORMAT_YUV_SEMIPLANAR_420
enVideoFormat图像摆放格式, VIDEO_FORMAT_LINEAR(其他格式也不是很清楚如何放), 就是上面由像素格式摆放

u32PhyAddr[3],pVirAddr[3],u32Stride[3], 图像摆放的物理地址, 虚拟地址,以及3块内存使用时的stride(也有的叫pitch), 数组相同下标表示的是一块内存,
u32PhyAddr[0],pVirAddr[0],u32Stride[0], 描述第一块
u32PhyAddr[1],pVirAddr[1],u32Stride[1], 描述第二块
u32PhyAddr[2],pVirAddr[2],u32Stride[2], 描述第三块
其中物理地址为海思模块使用, 虚拟地址为应用程序使用

比如,要PIXEL_FORMAT_YUV_SEMIPLANAR_422格式的,那么图像是如何放呢?
首先 PIXEL_FORMAT_YUV_SEMIPLANAR_422表示是YUV的(如果原图是RGB那么要先转换成YUV);SEMIPLANAR表示图像分两块来放, 一块是Y, 一块是UV;422表示每一个
像素有一个Y,每两个像素有一个U一个V

Y:起始地址为u32PhyAddr[0],pVirAddr[0]
|<------------ stride[0] ---------------------- -> |
|<-------------width-------------->|
——————————————————————  -----
|Y00, Y01, Y02, 。。。Y0m 第一行      |
|Y10, Y11, Y12, 。。。Y1m 第二行      |
|。。。。。。。                                       |   height
|Yn0, Yn1, Yn2, 。。。Ynm 第n+1行   |
—————————————————————— -------

UV:起始地址为u32PhyAddr[1],pVirAddr[1]
|<------------ stride[1]----------------------- -> |
|<-------------width-------------->|
——————————————————————  -----
|U00, V00, U01,V01 。。。 第一行      |
|U10, V10, U11,V11 。。。 第二行      |
|。。。。。。。                                       |   height/2
|Un0, Vn0, Un1,Vn1 。。。 第n+1行   |
—————————————————————— -------

其他基本没有什么可以讨论的

xhhcy

0个粉丝

5

问答

0

专栏

0

资料

xhhcy 2016-06-16 15:15:42
认可0
很感谢你的回复!这些成员变量有了一定的了解,不过,还是不大会写,老师给我了我两张yuv图片,我甚至不知道它的宽和高,他让我把图片读进来,通过HI_MPI_VDA_SendPic()发送到侦测通道,我现在是完全不会构造这个函数中参数!!从本地读图片还是要用c语言中的fopen()打开图片,fread()读图片吗??我用fopen读进来图片后就不会写了,不知道怎么处理那些物理地址和虚拟地址,能不能帮我写个比较完整的代码??实在不会啊!!老师还催的紧!!谢谢了!!!

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-06-16 15:51:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31828&ptid=11615]xhhcy 发表于 2016-6-16 15:15[/url]
很感谢你的回复!这些成员变量有了一定的了解,不过,还是不大会写,老师给我了我两张yuv图片,我甚至不知 ...[/quote]

老师给的YUV图片,楼主不知道宽高和格式,要不楼主把老师联系方式发给我,我帮你问问? 既然是老师, 问呀, 老师本来就是答疑解惑的, 有不会的也问老师呀

xhhcy

0个粉丝

5

问答

0

专栏

0

资料

xhhcy 2016-06-17 18:17:48
认可0
我找了一张yuv420的图片试了一下,终于通过函数HI_MPI_VDA_SendPic()发送成功了,
pthread_create(&gs_VdaPid[VDA_SEND_PIC],0,VDA_SendPic,(HI_VOID *)&pVdaSendThreadParam);
    /* step 3: vda chn start recv picture */
    s32Ret = HI_MPI_VDA_StartRecvPic(VdaChn);
    if(s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("err!\n");
        return s32Ret;
    }else
        {
                 SAMPLE_PRT("Recive pic success!\n");
        }

可是发送完 到这里不动了,s32Ret = HI_MPI_VDA_StartRecvPic(VdaChn);什么都不打印了,不知道为什么??谢谢

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-06-20 08:18:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31898&ptid=11615]xhhcy 发表于 2016-6-17 18:17[/url]
我找了一张yuv420的图片试了一下,终于通过函数HI_MPI_VDA_SendPic()发送成功了,
pthread_create(&gs_Vda ...[/quote]

看楼主给的信息,好像没启动接收数据前就发数据了
HI_MPI_VDA_StartRecvPic()一般就直接返回了, 不会卡住,如果卡住说明其他地方有问题了

楼主连HI_MPI_VDA_StartRecvPic()都没过,如何算发送成功呢?如何验证呢?写程序不是靠别人来检查的,要自己写前就要考虑到如何验证。

楼主对海思模块数据发送流程可能比较陌生

一般如下
1. 创建通道(当然可能是group)
2. 设置通道属性(可能是设备+通道等等)
3. 启动通道
4. 绑定数据源和数据目的(当然可以没有, 比如楼主的情况)
5. 创建发送/接收线程(当然可以没有, 比如楼主只做两幅图,没必要开线程)
6. 启动通道开始接收数据
7. 发送/接收数据(当然可以没有, 比如是绑定的情况)

数据一般在线程里面处理读写,但是如果就两幅图, 就直接写不用线程了

Jin涛

0个粉丝

1

问答

0

专栏

0

资料

Jin涛 2016-06-23 15:17:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31952&ptid=11615]zhuangweiye 发表于 2016-6-20 08:18[/url]
看楼主给的信息,好像没启动接收数据前就发数据了
HI_MPI_VDA_StartRecvPic()一般就直接返回了, 不会 ...[/quote]

你好
HI_S32 HI_MPI_VENC_SendFrame(VENC_CHN VeChn, VIDEO_FRAME_INFO_S *pstFrame ,HI_S32 s32MilliSec);
的用法和HI_MPI_VDA_SendPic是否大致相同?
谢谢

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-06-23 15:59:06
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32249&ptid=11615]Jin涛 发表于 2016-6-23 15:17[/url]
你好
HI_S32 HI_MPI_VENC_SendFrame(VENC_CHN VeChn, VIDEO_FRAME_INFO_S *pstFrame ,HI_S32 s32MilliSe ...[/quote]

基本上用法是一样的

Jin涛

0个粉丝

1

问答

0

专栏

0

资料

Jin涛 2016-06-23 16:51:41
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32258&ptid=11615]zhuangweiye 发表于 2016-6-23 15:59[/url]
基本上用法是一样的[/quote]

谢谢你的答复
我目前的方案做法是只用到venc的编码模块。
不停地从DDR中读取YUV的数据,然后交给VENC去做H264的编码。
我的这种做法和一般HISI的做法VI-VPSS-VENC这种链路。按照目前我的理解,应该没有太大的区别吧。
只是把数据的源头从VI切换到了DDR。
不知道我的这种理解是否正确?
谢谢

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-06-23 17:13:42
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32276&ptid=11615]Jin涛 发表于 2016-6-23 16:51[/url]
谢谢你的答复
我目前的方案做法是只用到venc的编码模块。
不停地从DDR中读取YUV的数据,然后交给VENC去 ...[/quote]

正确, 就是海思数据流的概念

Jin涛

0个粉丝

1

问答

0

专栏

0

资料

Jin涛 2016-06-23 17:24:14
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32280&ptid=11615]zhuangweiye 发表于 2016-6-23 17:13[/url]
正确, 就是海思数据流的概念[/quote]

这种方式
会不会影响到帧率呢?

hanfei69882

2个粉丝

26

问答

0

专栏

2

资料

hanfei69882 2017-05-16 17:37:31
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=32276&ptid=11615]Jin涛 发表于 2016-6-23 16:51[/url]
谢谢你的答复
我目前的方案做法是只用到venc的编码模块。
不停地从DDR中读取YUV的数据,然后交给VENC去 ...[/quote]

你好,从DDR读取YUV数据使用哪个接口?跟从VI获取数据区别大不:handshake

申兴琭08009056

0个粉丝

4

问答

0

专栏

0

资料

申兴琭08009056 2017-05-25 19:14:22
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=31952&ptid=11615]zhuangweiye 发表于 2016-6-20 08:18[/url]
看楼主给的信息,好像没启动接收数据前就发数据了
HI_MPI_VDA_StartRecvPic()一般就直接返回了, 不会 ...[/quote]

创建通道在sample里是那个函数?就是提示错误没有创建group     oxa0078005

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-05-26 08:15:00
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=50385&ptid=11615]申兴琭08009056 发表于 2017-5-25 19:14[/url]
创建通道在sample里是那个函数?就是提示错误没有创建group     oxa0078005[/quote]

SAMPLE_COMM_VDA_MdStart()

在sample/common/sample_common_vda.c中

这种问题实在是。。。无语

申兴琭08009056

0个粉丝

4

问答

0

专栏

0

资料

申兴琭08009056 2017-05-26 11:06:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=50396&ptid=11615]zhuangweiye 发表于 2017-5-26 08:15[/url]
SAMPLE_COMM_VDA_MdStart()

在sample/common/sample_common_vda.c中
[/quote]

谢谢哥们~为啥要十个字呢,好想在你手下当小兵:lol,跟你学

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2017-05-26 11:27:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=50413&ptid=11615]申兴琭08009056 发表于 2017-5-26 11:06[/url]
谢谢哥们~为啥要十个字呢,好想在你手下当小兵,跟你学[/quote]

其实都是自己学,自己不发力,别人也教不会
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区