Loading...
首页问答      

HI3516中OSD叠加之后前面几秒正常画面,后面的画面却好像进行了压缩,快进播放

ThrottleStop
ThrottleStop  发布于 2021-09-07 08:59:09 77
HI_S32 SAMPLE_REGION_VI_VPSS_VENC(HI_S32 HandleNum,RGN_TYPE_E  enType,MPP_CHN_S *pstChn)
{
    HI_S32         i;
    HI_S32         s32Ret;
    HI_S32         MinHandle;
    pthread_t      gtpid;

    s32Ret = SAMPLE_REGION_MPP_VI_VPSS_VENC_START();
    if(HI_SUCCESS != s32Ret)
    {
        return  s32Ret;
    }
    s32Ret = SAMPLE_COMM_REGION_Create(HandleNum,enType);
    if(HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_REGION_Create failed!\n");
        goto EXIT1;
    }
    s32Ret = SAMPLE_COMM_REGION_AttachToChn(HandleNum,enType,pstChn);
    if(HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_REGION_AttachToChn failed!\n");
        goto EXIT2;
    }

    MinHandle = SAMPLE_COMM_REGION_GetMinHandle(enType);
    status_RGN = HI_TRUE;

    pthread_create(&gtpid,0,UpdateBMP,(HI_VOID*)&MinHandle);
    PAUSE();

    status_RGN = HI_FALSE;
    pthread_join(gtpid,NULL);

 EXIT2:
    s32Ret = SAMPLE_COMM_REGION_DetachFrmChn(HandleNum,enType,pstChn);
    if(HI_SUCCESS!= s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_REGION_AttachToChn failed!\n");
    } 
EXIT1:
    s32Ret = SAMPLE_COMM_REGION_Destroy(HandleNum,enType);
    if(HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_REGION_AttachToChn failed!\n");
    }
    SAMPLE_REGION_MPP_VI_VPSS_VENC_END();
    return s32Ret;
}

下面是我的字库线程函数处理部分重要代码
        temp = SDL_ConvertSurface(text, fmt, 0);
        if(text == NULL)
        {
            printf("%s:[%d] The text is NULL !\n",__FUNCTION__,__LINE__);
            return NULL;
        }

        SDL_SaveBMP(temp, "./res/mm.bmp");


        if (OVERLAY_RGN == *arg || OVERLAYEX_RGN == *arg)
        {
            for (i = 0; i < 1; i++)
            {
                s32Ret = SAMPLE_COMM_REGION_SetBitMap(i, PIXEL_FORMAT_ARGB_1555);
                if (HI_SUCCESS != s32Ret)
                {
                    SAMPLE_PRT("SAMPLE_COMM_REGION_SetBitMap failed!\n"); 
                }
            }
        }

出现的具体状况就是程序运行后,前面10秒左右的画面是正常的,并且OSD显示的时间戳也是跟着变换的,但是10s后,写入文件的数据变得极其缓慢。后面打开视频文件发现后面的内存全部压缩到一块,画面跟快进一样。

一心只想成为奋斗B
我来回答
回答可得5积分
6个回答
发布于 2021-09-07 09:01:27

求大佬解答一下,我sample的region是正常运行的画面也是对的,但是我改成实时更换OSD时间戳后就出现问题了。

0
一心只想成为奋斗B
发布于 2021-09-07 09:32:28

没遇到过这种情况

0
发布于 2021-09-07 09:33:08

按楼主描述的,会不会是什么东西导致内存货cpu被占满了

0
发布于 2021-09-07 11:13:02

按楼主描述的,会不会是什么东西导致内存货cpu被占满了

但是正常的OSD显示是正常的呀,我用一个线程不断更新BMP并SetBitMap却会出现这个清况
一般是怎么处理的,难道连创建通道也要一直循环?

0
一心只想成为奋斗B
发布于 2021-09-08 09:06:29

思路和你一样,线程里每一秒钟获取一次时间,就用字符库获取对应时间字符串的位图数据,然后实质上只需要调用HI_MPI_SetBitMap,会不会函数 SAMPLE_COMM_REGION_SetBitMap 里面,有多余的操作影响到了

1
发布于 2021-09-16 14:14:21

已解决了是内存被temp占满了,需要每次都释放掉SDL_ConvertSurface()返回的temp和text

0
一心只想成为奋斗B
+ 添加网盘链接/附件
或将文件直接拖到这里
悬赏:
EBC
文件格式必须为doc,docx,xls,xlsx,pdf,ppt,pptx,txt,zip,rar,tar,7z,gz
网盘
* 网盘链接:
* 提取码:
悬赏:
EBC
易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区