12345678

12345678

0个粉丝

5

问答

0

专栏

0

资料

12345678  发布于  2019-05-22 09:47:35
采纳率 0%
5个问答
2250

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;

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

qn1563332485

0个粉丝

0

问答

0

专栏

0

资料

qn1563332485 2019-10-08 21:26:08
认可0
楼主可以分享一下源码吗?头疼,邮箱[email]15655295077@163.com[/email]
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区