首页问答详情

3531A开发板,HI_MPI_VPSS_GetChnFrame 获取数据偶尔出现异常,数据不完整

 
windyhll
windyhll  发布于  2018-12-28 18:49:26
采纳率 0%
2个问答
本帖最后由 windyhll 于 2018-12-28 18:51 编辑

目前的情况输入设备时机顶盒,输入到3531A开发板采用bt1120接口,输入分辨率720P,vi绑定vpss,输出720*576, 可以正常工作,数据也大都正确,但是但机顶盒切换频道时,偶尔会出现异常,尤其但切换到的节目在播放黑屏较多的电影时,HI_MPI_VPSS_GetChnFrame获取的数据大小会不正常,保存下来,打开图片只有实际的一帧画面的一部分,有时候会持续好几秒才能恢复正常数据,同时另外一路vpssChN在做h264压缩,那一路没看到异常,
有人遇到过这种问题吗,
我来回答
2272
0
0
回答
5个
易百纳技术社区
windyhll 发布于2019-01-02 11:13:04
没有人遇到过这种情况吗,

相关处理如下
  s32Ret = HI_MPI_VPSS_GetChnFrame(u32VpssGrp,VpssChn, &stFrame,2000);
  /*
         * 物理地址映射到虚拟地址
         *
         * */
               mmapAddr_y = HI_MPI_SYS_Mmap(stFrame.stVFrame.u32PhyAddr[0],s32FrameW*s32FrameH);
        mmapAddr_uv = HI_MPI_SYS_Mmap(stFrame.stVFrame.u32PhyAddr[1],(s32FrameW*s32FrameH)/2);
                /*
                 * 从虚拟地址拷贝相关内存数据到自定义缓存中
                 *
                 * */
                memcpy(stFrameBuff_y,mmapAddr_y,s32FrameW*s32FrameH);
                memcpy(stFrameBuff_uv,mmapAddr_uv,(s32FrameW*s32FrameH)/2);
                //printf("CheckYUV memcpy\n");
               
                /*
                 * 验证通过之后再释放掉相关映射关系
                 * */
                HI_MPI_SYS_Munmap(mmapAddr_y,s32FrameW*s32FrameH);
                s32Ret = HI_MPI_SYS_Munmap(mmapAddr_uv,(s32FrameW*s32FrameH)/2);
                if(HI_SUCCESS != s32Ret)
                {
                         printf("HI_MPI_SYS_Munmap frame err:0x%x\n", s32Ret);
                }
                 mmapAddr_y = NULL;
                mmapAddr_uv = NULL;

以上每隔100ms抓取一帧数据,
如果Y数据大小少于720*576,打印出来。
一下是打印信息:uv值一直是对的,Y值经常会少一部分。
求大神指点啊

  100::strlen(stFrameBuff_y)=49060,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=357719,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=357719,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=357719,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=357719,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=75013,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=357719,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=357719,stFrameBuff_uv=207360
sleep  100::strlen(stFrameBuff_y)=361605,stFrameBuff_uv=207360
0
易百纳技术社区
zhuangweiye 发布于2019-01-02 11:43:48
[quote][url=forum.php?mod=redirect&goto=findpost&pid=119658&ptid=56169]windyhll 发表于 2019-1-2 11:13[/url]
没有人遇到过这种情况吗,

相关处理如下
[/quote]

没有看到使用 stride
0
易百纳技术社区
windyhll 发布于2019-01-02 11:51:18
        printf(" sleep  100::strlen(stFrameBuff_y)=%d,stFrameBuff_uv=%d\n",strlen(stFrameBuff_y),strlen(stFrameBuff_uv));
                                printf("y_stride=%d,uv_stride=%d,\n",stFrame.stVFrame.u32Stride[0],stFrame.stVFrame.u32Stride[1]);
                                usleep(100*1000);
                                continue;
                        }

sleep  100::strlen(stFrameBuff_y)=299395,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,
sleep  100::strlen(stFrameBuff_y)=299395,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,
sleep  100::strlen(stFrameBuff_y)=299395,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,
sleep  100::strlen(stFrameBuff_y)=299395,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,
sleep  100::strlen(stFrameBuff_y)=75005,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,
sleep  100::strlen(stFrameBuff_y)=75005,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,
sleep  100::strlen(stFrameBuff_y)=49060,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,
sleep  100::strlen(stFrameBuff_y)=49060,stFrameBuff_uv=207360
y_stride=720,uv_stride=720,


您好,我循环抓数据,大部分时间还是对的,偶尔会出错 ,如果是一张偏黑色的图片,出错率很高。
0
易百纳技术社区
zhuangweiye 发布于2019-01-02 13:36:45
本帖最后由 zhuangweiye 于 2019-1-2 13:40 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=119671&ptid=56169]windyhll 发表于 2019-1-2 11:51[/url]
printf(" sleep  100::strlen(stFrameBuff_y)=%d,stFrameBuff_uv=%d\n",strlen(stFrameBuff_y),strlen(stF ...[/quote]

图像数据能用strlen()吗?

如果没有特别约定, 8bit的图像数据是 0-255, '\0'(ASCII码,实际上是48)这个可以是实际图像的值, 问题来了,楼主的strlen把这个解释成字符串结束符了, 尤其是图像数值较小时(暗的时候)
0
易百纳技术社区
windyhll 发布于2019-01-02 14:12:44
感谢解释,可能是这个问题,万分感谢!
0

Markdown 语法

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

Markdown 语法

  • 加粗 **内容**
  • 斜体 *内容*
  • 删除线 ~~内容~~
  • 引用 > 引用内容
  • 代码 `代码`
  • 代码块 ```编程语言↵代码```
  • 链接 [链接标题](url)
  • 无序列表 - 内容
  • 有序列表 1. 内容
  • 缩进 内容
  • 图片 ![alt](url)
+ 添加网盘链接/附件
或将文件直接拖到这里
悬赏:
EBC
网盘
* 网盘链接:
* 提取码:
悬赏:
EBC
相关问答
无更多相似问答 去提问
Loading...
易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区
易百纳技术社区
在专栏模块发布专栏,可获得其他E友的打赏
易百纳技术社区
回答悬赏问答,被题主采纳后即可获得悬赏金
易百纳技术社区
在上传资料时,有价值的资料可设置为付费资源
易百纳技术社区
达到一定金额,收益即可提现~
收益也可用来充值ebc,下载资料、兑换礼品更容易
易百纳技术社区
活动规则
  • 1.周任务为周期性任务,每周周一00:00刷新,上周完成的任务不会累计到本周,本周需要从头开始任务,当前任务完成后才可以完成下一个任务
  • 2.发布的专栏与资料需要与平台的板块有相关性,禁止注水,专栏/资料任务以审核通过的篇数为准
  • 3.任务完成后,现金奖励直接打款到微信账户;EBC/收益将自动发放到个人账户,可前往“我的钱包”查看;其他奖励请联系客服兑换
  • 4.每周最后三个任务将会有以下奖品掉落:社区热卖开发板、小米音响、视频年度会员、京东卡、华为手机等等
易百纳技术社区
升级提醒
易百纳技术社区

恭喜您由入门

社区送出礼品一份

请填写您的收件地址,礼品将在3个工作日寄出

易百纳技术社区