12345678

12345678

0个粉丝

5

问答

0

专栏

0

资料

12345678  发布于  2019-05-22 09:55:10
采纳率 0%
5个问答
3988

Hi3516 移动侦测

 
使用的hi3516,关于移动侦测,在rtmp里添加了海思sample_ive_md.c里的部分代码,实现了移动侦测的功能,能正常侦测并且可对移动区域显示矩形直线,但是在添加之前,录像生产的h264文件用vlc播放正常,但是添加了之后,h264文件播放就像点了快进一样,而且h264文件大小也缩小了很多。
pthread_create(&s_hMdThread, 0, SAMPLE_IVE_MdProc, (HI_VOID *)&s_stMd);

HI_VOID * SAMPLE_IVE_MdProc(HI_VOID * pArgs)
{
         ...


    while (HI_FALSE == s_bStopSignal)
     {                    
                s32Ret = HI_MPI_VPSS_GetChnFrame(s32VpssGrp, as32VpssChn[1], &stExtFrmInfo, s32MilliSec);
                 if(HI_SUCCESS != s32Ret)
                 {
                         SAMPLE_PRT("HI_MPI_VPSS_GetChnFrame failed, VPSS_GRP(%d), VPSS_CHN(%d), Error(%#x)!\n",
                                 s32VpssGrp, as32VpssChn[1], s32Ret);
                         continue;
                 }

                s32Ret = HI_MPI_VPSS_GetChnFrame(s32VpssGrp, as32VpssChn[0], &stBaseFrmInfo, s32MilliSec);
                 SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS!=s32Ret, EXT_RELEASE,
                         "HI_MPI_VPSS_GetChnFrame failed, VPSS_GRP(%d), VPSS_CHN(%d), Error(%#x)!\n",
                         s32VpssGrp, as32VpssChn[0], s32Ret);

                if (HI_TRUE != bFirstFrm)
                 {               
                        s32Ret = SAMPLE_COMM_IVE_DmaImage(&stExtFrmInfo,&pstMd->astImg[s32CurIdx],bInstant);
                         SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, BASE_RELEASE,
                                                         "SAMPLE_COMM_IVE_DmaImage fail,Error(%#x)\n",s32Ret);                        
                }
                 else
                 {               
                        s32Ret = SAMPLE_COMM_IVE_DmaImage(&stExtFrmInfo,&pstMd->astImg[1 - s32CurIdx],bInstant);        
                        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, BASE_RELEASE,
                                                         "SAMPLE_COMM_IVE_DmaImage fail,Error(%#x)\n",s32Ret);        
                        
                        bFirstFrm = HI_FALSE;                        
                        goto CHANGE_IDX;//first frame just init reference frame
                 }
                 
                s32Ret = HI_IVS_MD_Process(MdChn,&pstMd->astImg[s32CurIdx],&pstMd->astImg[1 - s32CurIdx],&stSad,&pstMd->stBlob);               
        SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, BASE_RELEASE,
                                                         "HI_IVS_MD_Process fail,Error(%#x)\n",s32Ret);                  
                 
                 SAMPLE_COMM_IVE_BlobToRect((IVE_CCBLOB_S *)pstMd->stBlob.pu8VirAddr,&(pstMd->stRegion),50,8,
                         pstMdAttr->u16Width,pstMdAttr->u16Height,(HI_U16)stBaseFrmInfo.stVFrame.u32Width,(HI_U16)stBaseFrmInfo.stVFrame.u32Height); //将移动侦测的数据处理为移动区域rect
             //Draw rect
                 s32Ret = SAMPLE_COMM_VGS_FillRect(&stBaseFrmInfo, &pstMd->stRegion, 0x0000FF00);
                  SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, BASE_RELEASE,
                                                         "SAMPLE_COMM_VGS_FillRect fail,Error(%#x)\n",s32Ret);
     }
}


我尝试把SAMPLE_COMM_VGS_FillRect这句注释掉,录像恢复正常,只是不能显示矩形直线框了,请问是什么原因呢?按照现象来说是这个接口导致了h264录像播放速度变得很快,而且h264文件变得很小,我怀疑可能是导致丢帧了。
还请路过的大神不吝赐教。

SAMPLE_COMM_VGS_FillRect该接口的实现如下:
HI_S32 SAMPLE_COMM_VGS_FillRect(VIDEO_FRAME_INFO_S* pstFrmInfo, SAMPLE_RECT_ARRAY_S* pstRect, HI_U32 u32Color)
{
     VGS_HANDLE VgsHandle = -1;
     HI_S32 s32Ret = HI_SUCCESS;
     HI_U16 i;
     VGS_TASK_ATTR_S stVgsTask;
     VGS_ADD_COVER_S stVgsAddCover;

    if (0 == pstRect->u16Num)
     {
         return s32Ret;
     }

    s32Ret = HI_MPI_VGS_BeginJob(&VgsHandle);
     if (s32Ret != HI_SUCCESS)
     {
         SAMPLE_PRT("Vgs begin job fail,Error(%#x)\n", s32Ret);
         return s32Ret;
     }

    memcpy(&stVgsTask.stImgIn, pstFrmInfo, sizeof(VIDEO_FRAME_INFO_S));
     memcpy(&stVgsTask.stImgOut, pstFrmInfo, sizeof(VIDEO_FRAME_INFO_S));

    stVgsAddCover.enCoverType = COVER_QUAD_RANGLE;
     stVgsAddCover.u32Color = u32Color;
     for (i = 0; i < pstRect->u16Num; i++)
     {
         stVgsAddCover.stQuadRangle.bSolid = HI_FALSE;
         stVgsAddCover.stQuadRangle.u32Thick = 2;
         memcpy(stVgsAddCover.stQuadRangle.stPoint, pstRect->astRect.astPoint, sizeof(pstRect->astRect.astPoint));
         s32Ret = HI_MPI_VGS_AddCoverTask(VgsHandle, &stVgsTask, &stVgsAddCover);
         if (s32Ret != HI_SUCCESS)
         {
             SAMPLE_PRT("HI_MPI_VGS_AddCoverTask fail,Error(%#x)\n", s32Ret);
             HI_MPI_VGS_CancelJob(VgsHandle);
             return s32Ret;
         }

    }

    s32Ret = HI_MPI_VGS_EndJob(VgsHandle);
     if (s32Ret != HI_SUCCESS)
     {
         SAMPLE_PRT("HI_MPI_VGS_EndJob fail,Error(%#x)\n", s32Ret);
         HI_MPI_VGS_CancelJob(VgsHandle);
         return s32Ret;
     }
     return s32Ret;

}
我来回答
回答10个
时间排序
认可量排序

qn1551687716

0个粉丝

1

问答

0

专栏

0

资料

qn1551687716 2019-05-22 10:55:36
认可0
这个问题很简单,因为检测、绘图都需要一定的时间,输出的264文件实际上是你做了检测的那些帧的集合,那些没来得及做检测的帧就丢掉了

12345678

0个粉丝

5

问答

0

专栏

0

资料

12345678 2019-05-22 12:38:00
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=143495&ptid=74715]qn1551687716 发表于 2019-5-22 10:55[/url]
这个问题很简单,因为检测、绘图都需要一定的时间,输出的264文件实际上是你做了检测的那些帧的集合,那些 ...[/quote]

你好,请问有什么办法解决这个问题吗?能提供个思路给我吗?

qn1551687716

0个粉丝

1

问答

0

专栏

0

资料

qn1551687716 2019-05-22 13:53:03
认可0
这根本不是个问题啊,看你具体业务需求,如果只是想判断有没有东西移动,不需要绘制移动区域,像你那样做的,把VGS那部分绘制的代码去掉就可以了,如果要实时绘制,那没办法,因为有处理的延时,不可能做到每一帧都去检测。

12345678

0个粉丝

5

问答

0

专栏

0

资料

12345678 2019-05-22 14:18:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=143502&ptid=74715]qn1551687716 发表于 2019-5-22 13:53[/url]
这根本不是个问题啊,看你具体业务需求,如果只是想判断有没有东西移动,不需要绘制移动区域,像你那样做的 ...[/quote]

哦,感谢您的帮助。顺便问一下,如果我想缩小这个延时,绘制移动区域,看起来流畅一些不丢帧,升级更高级的海思处理器能达到需求吗?

qn1551687716

0个粉丝

1

问答

0

专栏

0

资料

qn1551687716 2019-05-22 14:26:07
认可0
不清楚不同处理器的ive性能是否有差异,应该是可以,还有个方法,sample里的做法是,取一帧检测->vgs绘制->venc编码->264流,你可以试着把没进行检测的那些帧,取之前的检测结果绘制,再编码到264里

12345678

0个粉丝

5

问答

0

专栏

0

资料

12345678 2019-06-26 11:22:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=143509&ptid=74715]qn1551687716 发表于 2019-5-22 14:26[/url]
不清楚不同处理器的ive性能是否有差异,应该是可以,还有个方法,sample里的做法是,取一帧检测->vgs绘制-> ...[/quote]

移动侦测的时候,一直报侦测到移动信息,太频繁了,感觉光线有点变化都会报警,这个灵敏度可以设置吗?具体设置哪个参数?忘大神不吝赐教。

qn1551687716

0个粉丝

1

问答

0

专栏

0

资料

qn1551687716 2019-07-04 10:35:40
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=144593&ptid=74715]12345678 发表于 2019-6-26 11:22[/url]
移动侦测的时候,一直报侦测到移动信息,太频繁了,感觉光线有点变化都会报警,这个灵敏度可以设置吗?具 ...[/quote]

IVE里的移动侦测是利用背景差的方法,只要画面有变动就会报警,参数自己上文档里找吧,如果想效果好点,看看你SDK的sample里有没有IVP的包,这里的SMD是用DL的方法,精度好很多,主要是检测人形

12345678

0个粉丝

5

问答

0

专栏

0

资料

12345678 2019-06-25 23:06:51
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=143509&ptid=74715]qn1551687716 发表于 2019-5-22 14:26[/url]
不清楚不同处理器的ive性能是否有差异,应该是可以,还有个方法,sample里的做法是,取一帧检测->vgs绘制-> ...[/quote]

移动侦测的时候,一直报侦测到移动信息,太平凡了,这个灵敏度可以设置吗?具体设置哪个参数?忘大神不吝赐教。

qn1588300887

0个粉丝

1

问答

0

专栏

0

资料

qn1588300887 2020-11-02 15:17:01
认可0
是不是没东西移动。也会时不时画5个框出来??我的就是这样。根本没东西移动的。光照也没变化。每过几秒就画几个框出来。。。。。

qn1604480507

0个粉丝

0

问答

0

专栏

0

资料

qn1604480507 2020-11-04 17:08:59
认可0
你好,HI3516 移动侦测, 我也遇到了同样的问题, 请教一下呢
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区