localhost

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost  发布于  2016-12-14 14:24:38
采纳率 0%
16个问答
4920

HI3531A多路编码配置代码解析记录

 
本帖最后由 localhost 于 2016-12-14 14:26 编辑

由于近期同平台更换板卡(虽然都是HI3531A的板卡),同一应用代码运行中出现不同问题,对需求实现在不同板卡上出现不同问题。
于是,我将代码与板卡信息一步步对应(即:代码每一步测试 对应观察/proc中各部分实际配置信息)分析。
当前发现一个问题 代码与实际板卡信息如下:
[code]  /*设置vi设备与对应chn*/
    for(i=0; i     {
        if(nLast == ViChn)
            continue;
        /*设置输入设备属性*/   
        memset(&stDevAttr, 0, sizeof(VI_DEV_ATTR_S));
        
        stDevAttr.enIntfMode = VI_MODE_BT1120_STANDARD;//接口模式
        stDevAttr.enWorkMode = VI_WORK_MODE_1Multiplex;//1路复合工作模式
        //BT1120 分量掩码配置Y C
        stDevAttr.au32CompMask[0] = 0xFF000000;
        stDevAttr.au32CompMask[1] = 0xFF0000;
        stDevAttr.enClkEdge = VI_CLK_EDGE_SINGLE_UP;//时钟上升沿采样
        //ADChn默认配置-1
        stDevAttr.s32AdChnId[0] = -1;
        stDevAttr.s32AdChnId[1] = -1;
        stDevAttr.s32AdChnId[2] = -1;
        stDevAttr.s32AdChnId[3] = -1;
        //剩余成员对HI3531A无效
        
        s32Ret = HI_MPI_VI_SetDevAttr(ViDev, &stDevAttr);//设置Vi设备属性
                if (s32Ret != HI_SUCCESS)
                {
                        printf("Set dev attributes failed with error code %#x!\n", s32Ret);
                        return HI_FAILURE;
                }
               
                s32Ret = HI_MPI_VI_EnableDev(ViDev);//使能Vi
                if (s32Ret != HI_SUCCESS)
                {
                        printf("Enable dev failed with error code %#x!\n", s32Ret);
                        return HI_FAILURE;
                }               
               
        /*设置输入通道属性*/
        stChnAttr.stCapRect.s32X = 0;//捕获区域起始坐标x/y
        stChnAttr.stCapRect.s32Y = 0;
        stChnAttr.stCapRect.u32Width   = 1920;//输入视频宽高
                stChnAttr.stCapRect.u32Height  = 1080;
                stChnAttr.stDestSize.u32Width  = 1920;//输出视频宽高
                stChnAttr.stDestSize.u32Height = 1080;        
      
                stChnAttr.enCapSel = VI_CAPSEL_BOTH;//帧场选择 逐行模式固定配置       
                    stChnAttr.enScanMode = VI_SCAN_PROGRESSIVE;//输入扫描模式 逐行

                stChnAttr.enPixFormat = PIXEL_FORMAT_YUV_SEMIPLANAR_420;//像素存储格式yuv420
                stChnAttr.bMirror = HI_FALSE;//是否水平翻转
                stChnAttr.bFlip = HI_FALSE;//是否垂直翻转
        //原始帧率与输出帧率配置
                if (ViDev!=8)//3840x1080
                {
                        stChnAttr.s32SrcFrameRate = 60;
                        stChnAttr.s32DstFrameRate = 30;
                }
                else
                {
                        stChnAttr.s32SrcFrameRate = 30;
                        stChnAttr.s32DstFrameRate = 30;
                }
               
                s32Ret = HI_MPI_VI_SetChnAttr(ViChn,&stChnAttr);//设置Vi通道属性
                if (s32Ret != HI_SUCCESS)
                {
                        printf("Set chn %d %d %d attributes failed with error code %#x!\n", i,ViDev,ViChn,s32Ret);
                        return HI_FAILURE;
                }
               
                s32Ret = HI_MPI_VI_EnableChn(ViChn);//通道使能
                if (s32Ret != HI_SUCCESS)
                {
                        printf("Enable chn failed with error code %#x!\n", s32Ret);
                        return HI_FAILURE;
                }   

                nLast = ViChn;               
    }    [/code]
板卡返回信息:


这里看到 对于vi物理通道第4和第12、16、20通道中扫描图像模式 是NULL 会是什么原因呢?同样配置其他路数参数可生效呐!
我来回答
回答10个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-12-14 14:53:16
认可0
从log来看, 只有 0/8两路有正确的数据送过来, 其他都没有

从代码来看, 楼主用的是16bits bt1120, 1路复用, 按理只能用videv 0/2/4/6, 对应的vichan是 0/8/16/24,

但是log里面又有videv1/3/5以及vichan 4/12/20出现, 这个相互矛盾了

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-14 14:59:42
认可0
本帖最后由 localhost 于 2016-12-14 15:22 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=42870&ptid=13658]zhuangweiye 发表于 2016-12-14 14:53[/url]
从log来看, 只有 0/8两路有正确的数据送过来, 其他都没有

从代码来看, 楼主用的是16bits bt1120, 1路复 ...[/quote]

哦 对对 想起来了 非常感谢 一直纠结一个变量 循环里面了

但是 根据3.3.3介绍 和sample中实例对于8路输入均使用bt656时序 是不可用bt1120么
我有点没弄明白 选择bt1120的话 只能使用0/2这两个设备 否则 情况如下:
是我配置问题 还是说这个模式只能如此 如果我选择 bt1120 interleave 的话

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-12-14 15:35:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42871&ptid=13658]localhost 发表于 2016-12-14 14:59[/url]
哦 对对 想起来了 非常感谢 一直纠结一个变量 循环里面了

但是 根据3.3.3介绍 和sample中实例对于8 ...[/quote]

vi设置和硬件的接法强相关, 也就是硬件怎么接,就怎么写

能有变化的是几路复用, 这个和前端的A/D有关系, 要和A/D输出的数据格式保持一致, 否则vi就会在filed下面出现(null)

楼主的情况,个人感觉可能要看一下接线和A/D了, 确定是接了4路吗? A/D设置对吗?

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-14 15:55:37
认可0
本帖最后由 localhost 于 2016-12-14 15:58 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=42873&ptid=13658]zhuangweiye 发表于 2016-12-14 15:35[/url]
vi设置和硬件的接法强相关, 也就是硬件怎么接,就怎么写

能有变化的是几路复用, 这个和前端的A/D有关系 ...[/quote]

硬件 按理应该是接好的 因为一些原因 我只能用ssh远程实验设备
因此我只能靠log对比比较 现在是这样的 在没有跑我自己的应用时
log信息如下:before

测试应用是log: after

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-12-14 16:46:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42875&ptid=13658]localhost 发表于 2016-12-14 15:55[/url]
硬件 按理应该是接好的 因为一些原因 我只能用ssh远程实验设备
因此我只能靠log对比比较 现在是这样 ...[/quote]

呵呵, 前后mask都可以不一样

上面是8bits的bt1120, 下面的是16bits的bt1120, 完全不是一回事

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-14 17:48:57
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42884&ptid=13658]zhuangweiye 发表于 2016-12-14 16:46[/url]
呵呵, 前后mask都可以不一样

上面是8bits的bt1120, 下面的是16bits的bt1120, 完全不是一回事[/quote]

不不 前辈 单看第8路 这个受到其他影响么

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-14 17:49:28
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42884&ptid=13658]zhuangweiye 发表于 2016-12-14 16:46[/url]
呵呵, 前后mask都可以不一样

上面是8bits的bt1120, 下面的是16bits的bt1120, 完全不是一回事[/quote]

哦 抱歉 设备8 我再看看

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-12-15 08:07:51
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42887&ptid=13658]localhost 发表于 2016-12-14 17:49[/url]
哦 抱歉 设备8 我再看看[/quote]

我说的不是设备8, 那个是级联用的

我说的是 设备0-7, before里面mask1都是0, after里面都是ff0000, 这两个log是一个板子吗?还是说前端硬件接线有跳线? before和after用的不是一个接法?

如果硬件接法一样, 那after的mask要和before一样(假定before是ok的)

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-12-15 10:26:48
认可0
本帖最后由 localhost 于 2016-12-15 10:32 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=42899&ptid=13658]zhuangweiye 发表于 2016-12-15 08:07[/url]
我说的不是设备8, 那个是级联用的

我说的是 设备0-7, before里面mask1都是0, after里面都是ff0000, 这 ...[/quote]

喔 不不 我想说的意思是我把设备8看成第8通道 昨天太着急了

关于 分量掩码 Y C 这个对于接入设备的影响关系具体是怎样的呢?前辈可否指导一下
手册找到有说在 [quote]当enIntfMode=VI_MODE_BT1120_STANDARD 时,需要配置 Y
和 C 的分量掩码,其他模式时只需配置单分量掩码。[/quote]
不知道是否指实际操作中 区分 统一bt1120时序的接口上生效的设备号呢?

stoneLinux

0个粉丝

3

问答

0

专栏

0

资料

stoneLinux 2018-09-15 00:00:49
认可0
楼主,故事结局是什么?
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区