qn1574677583

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583  发布于  2019-11-25 18:36:13
采纳率 0%
12个问答
3028

3519v101获取vpss图像后ive处理

 
最近准备使用对双sensor进行图像叠加处理,在vpss通道1获取图像后DMA送ive处理时出现数据错误,具体操作如下:

SAMPLE_COMM_IVE_CreateImage(&desPIC, IVE_IMAGE_TYPE_U8C1, 240, 320); //初始化一段MMZ内存
HI_MPI_VPSS_GetChnFrame(0, 1, &stBaseFrmInfo, s32MilliSec);//获取通道1图像
SAMPLE_COMM_IVE_DmaImage(&stBaseFrmInfo, &tempPIC, HI_TRUE);//将获取图像送往另一块内存,只复制亮度
HI_MPI_IVE_Thresh(&IveHandle, &desPIC, &desPIC, &stCtrl, HI_FALSE);//做简单过滤算法,
最后保存desPIC指向的数据,打开最后的图像,发现里面的数据错误,而且字节数并不等于u16Stride * u16Height,一直怀疑是dma时出错了,但是没有好的办法排查,请问有大神指导下吗?
我来回答
回答12个
时间排序
认可量排序

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-26 13:21:07
认可0
有人指导下吗?

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-28 16:20:51
认可0
[code]s32Ret = HI_MPI_VPSS_GetChnFrame(0, 1, &stBaseFrmInfo, s32MilliSec);
stCtrl.enMode        = IVE_THRESH_MODE_BINARY;
        stCtrl.u8MinVal = 0;
        stCtrl.u8MaxVal = 255;
        stCtrl.u8LowThr = 90;
//intf("h %d w%d s %d\n",(HI_U16)pstFrameInfo->stVFrame.u32Height,(HI_U16)pstFrameInfo->stVFrame.u32Width,(HI_U16)pstFrameInfo->stVFrame.u32Stride[0]);
    //fill src
    stSrcData.enType = IVE_IMAGE_TYPE_U8C1;
    stSrcData.pu8VirAddr[0] = (HI_U8*)pstFrameInfo->stVFrame.pVirAddr[0];
    stSrcData.u32PhyAddr[0] = pstFrameInfo->stVFrame.u32PhyAddr[0];
    stSrcData.u16Width   = (HI_U16)pstFrameInfo->stVFrame.u32Width;
    stSrcData.u16Height  = (HI_U16)pstFrameInfo->stVFrame.u32Height;
    stSrcData.u16Stride[0] = (HI_U16)pstFrameInfo->stVFrame.u32Stride[0];

    //fill dst
    stDstData.enType = IVE_IMAGE_TYPE_U8C1;
    stDstData.pu8VirAddr[0] = (HI_U8*)pstFrameInfo->stVFrame.pVirAddr[0];
    stDstData.u32PhyAddr[0] = pstFrameInfo->stVFrame.u32PhyAddr[0];
    stDstData.u16Width   = (HI_U16)pstFrameInfo->stVFrame.u32Width;
    stDstData.u16Height  = (HI_U16)pstFrameInfo->stVFrame.u32Height;
    stDstData.u16Stride[0]  = (HI_U16)pstFrameInfo->stVFrame.u32Stride[0];

    s32Ret = HI_MPI_IVE_Thresh(&hIveHandle, &stSrcData, &stDstData, &stCtrl, HI_TRUE);
s32Ret = HI_MPI_VO_SendFrame(0, 0, &stBaseFrmInfo, s32MilliSec);       
s32Ret = HI_MPI_VPSS_ReleaseChnFrame(0,1, &stBaseFrmInfo);[/code]

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-28 16:24:24
认可0
上述代码跑出来结果图像是花屏,尝试把图像数据保存下来,发现原图像和thresh后的图像完全不对

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-11-29 09:50:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=150373&ptid=76653]qn1574677583 发表于 2019-11-28 16:24[/url]
上述代码跑出来结果图像是花屏,尝试把图像数据保存下来,发现原图像和thresh后的图像完全不对[/quote]

有可能的话,上一下源图和结果

另外,vpss设置是什么?

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-29 10:01:10
认可0
[code]if(s32ChnNum >= 1)
    {
            VpssGrp = 0;
            stVpssGrpAttr.u32MaxW = stSize.u32Width;
            stVpssGrpAttr.u32MaxH = stSize.u32Height;
            stVpssGrpAttr.bIeEn = HI_FALSE;
            stVpssGrpAttr.bNrEn = HI_TRUE;
            stVpssGrpAttr.stNrAttr.enNrType = VPSS_NR_TYPE_VIDEO;
            stVpssGrpAttr.stNrAttr.stNrVideoAttr.enNrRefSource = VPSS_NR_REF_FROM_RFR;
            stVpssGrpAttr.stNrAttr.u32RefFrameNum = 2;
            stVpssGrpAttr.bHistEn = HI_FALSE;
            stVpssGrpAttr.bDciEn = HI_FALSE;
            stVpssGrpAttr.enDieMode = VPSS_DIE_MODE_NODIE;
            stVpssGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;
          stVpssGrpAttr.bStitchBlendEn   = HI_FALSE;

            s32Ret = SAMPLE_COMM_VPSS_StartGroup(VpssGrp, &stVpssGrpAttr);
            if (HI_SUCCESS != s32Ret)
            {
                    SAMPLE_PRT("Start Vpss failed!\n");
            }

            s32Ret = SAMPLE_COMM_VI_BindVpss(stViConfig.enViMode);
            if (HI_SUCCESS != s32Ret)
            {
                    SAMPLE_PRT("Vi bind Vpss failed!\n");
            }

                s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[2], &stSize);

            VpssChn = 0;
            stVpssChnMode.enChnMode      = VPSS_CHN_MODE_USER;
            stVpssChnMode.bDouble        = HI_FALSE;
            stVpssChnMode.enPixelFormat  = SAMPLE_PIXEL_FORMAT;
            stVpssChnMode.u32Width       = stSize.u32Width;
            stVpssChnMode.u32Height      = stSize.u32Height;
            stVpssChnMode.enCompressMode = COMPRESS_MODE_SEG;
            memset(&stVpssChnAttr, 0, sizeof(stVpssChnAttr));
            stVpssChnAttr.s32SrcFrameRate = -1;
            stVpssChnAttr.s32DstFrameRate = -1;
                stVpssChnAttr.bMirror = 0;
                stVpssChnAttr.bFlip = 0;
            s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);
            if (HI_SUCCESS != s32Ret)
            {
                    SAMPLE_PRT("Enable vpss chn failed!\n");
            }
    }
    if(s32ChnNum >= 2)
    {
                s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[1], &stSize);
                if (HI_SUCCESS != s32Ret)
                {
                        SAMPLE_PRT(        "SAMPLE_COMM_SYS_GetPicSize failed!\n");
                }
            VpssChn = 1;
            stVpssChnMode.enChnMode       = VPSS_CHN_MODE_USER;
            stVpssChnMode.bDouble         = HI_FALSE;
            stVpssChnMode.enPixelFormat   = SAMPLE_PIXEL_FORMAT;
            stVpssChnMode.u32Width        = stSize.u32Width;
            stVpssChnMode.u32Height       = stSize.u32Height;
            stVpssChnMode.enCompressMode  = COMPRESS_MODE_SEG;
            stVpssChnAttr.s32SrcFrameRate = -1;
            stVpssChnAttr.s32DstFrameRate = -1;
                stVpssChnAttr.bMirror = 0;
                stVpssChnAttr.bFlip = 0;
            s32Ret = SAMPLE_COMM_VPSS_EnableChn(VpssGrp, VpssChn, &stVpssChnAttr, &stVpssChnMode, HI_NULL);
            if (HI_SUCCESS != s32Ret)
            {
                    SAMPLE_PRT("Enable vpss chn failed!\n");
            }
    }[/code]

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-29 10:06:18
认可0
原图我是通过开一个vb,然后利用HI_MPI_VGS_AddScaleTask复制到另一个内存,将数据按yuv格式保存,打开后图片是我镜头拍摄的图片,另外我使用ivethresh和ivedma出来的数据,保存其中y分量,然后和vgs出来的图像进行二进制对比,发现差异特别大。

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-29 10:16:15
认可0
[code]HI_MPI_VPSS_GetChnFrame();
SAMPLE_COMM_VGS_DrawLine();
HI_MPI_VO_SendFrame();
HI_MPI_VPSS_ReleaseChnFrame();[/code]
这些流程跑下来都是没有问题,唯独IVE处理哪里出来的数据不对。

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-29 11:04:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=150393&ptid=76653]zhuangweiye 发表于 2019-11-29 09:50[/url]
有可能的话,上一下源图和结果

另外,vpss设置是什么?[/quote]

麻烦帮我看看

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-11-29 11:11:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=150408&ptid=76653]qn1574677583 发表于 2019-11-29 11:04[/url]
麻烦帮我看看[/quote]

stVpssChnMode.enCompressMode  = COMPRESS_MODE_SEG;

改成COMPRESS_MODE_NONE试试

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-29 12:15:17
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=150412&ptid=76653]zhuangweiye 发表于 2019-11-29 11:11[/url]
stVpssChnMode.enCompressMode  = COMPRESS_MODE_SEG;

改成COMPRESS_MODE_NONE试试[/quote]

好像是这个问题,vpssframe数据被压缩了,如果用简单的yuv格式去保存就失败了,感谢大神,顺便问句这个压缩与不压缩有什么影响,我看实际压缩后vb分给frame的phyaddr[0]和phyaddr[1]的长度是我视频的长度,并没有减少

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2019-11-29 13:54:38
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=150422&ptid=76653]qn1574677583 发表于 2019-11-29 12:15[/url]
好像是这个问题,vpssframe数据被压缩了,如果用简单的yuv格式去保存就失败了,感谢大神,顺便问句这个压 ...[/quote]

COMPRESS_MODE_SEG按文档的说法是“以256 字节为一个压缩片段。” 但具体是什么,海思不说咱也没地方问

不过关系不大,可以把它认为是一种特殊的图像格式,知道直接把里面的数据当成图像是不正确的就好了,尤其是楼主用ive的thresh算子把每个数据都处理了,很可能破坏了数据,比如有的数据是特殊意思的,一改就全变了

关于楼主提到长度的问题,不知道指的什么,如果是stFrame结构里面的宽高,那个本来就不会小,表示图像宽高,至于phyaddr所指向的内存本来就不全是有效的图像数据,所以也看不出增加还是减少

qn1574677583

0个粉丝

12

问答

0

专栏

0

资料

qn1574677583 2019-11-29 16:22:15
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=150423&ptid=76653]zhuangweiye 发表于 2019-11-29 13:54[/url]
COMPRESS_MODE_SEG按文档的说法是“以256 字节为一个压缩片段。” 但具体是什么,海思不说咱也没地方问
...[/quote]

大神还是大神,一眼就看出问题,我都测了好几天,一直想不通哪里出了问题,哈哈,感谢
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区