This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

dvr_rdk4.0 SWOSD的问题



rdk里面swosd用的是osdWinObj->addr[0][0] = params->winPrm[i].addr[0][0]; 这样我加上自己的字幕显示正常,我现在想把数据copy出来处理,如下

osdWinObj->addr[0][0] = malloc(dateLen);

memcpy(osdWinObj->addr[0][0], params->winPrm[i].addr[0][0], dateLen);

这样做了之后字幕是花的,不知道是什么原因?感觉数据乱了,这个对addr[0][0]有什么特殊要求吗,比如对齐等??

  • 有没有人在?别沉了啊!!!

  • 你好,

    你的代码是运行在dsp上的是么?如果是,是否有考虑过cache一致性的问题?

  • Chris Meng 

    你好,是在dsp运行。我是在osdlink_alg.c里面直接修改的代码,rdk里面是将osd窗口的地址指向共享内存区域,这样没问题,我现在想给osd窗口独立malloc一段内存,然后将共享内存里面的数据copy进来,不知道这样跟cache的一致性有什么联系?

  • 贴上我修改部分的代码吧

    osdlink_alg.c

    Int32 AlgLink_OsdalgUpdateChOsdWinPrm(AlgLink_OsdObj * pObj,
    AlgLink_OsdChWinParams * params)

    {

    ...

    ...

    ...

    #if 1

    //我自己的做法
    if(osdWinObj->addr[0][0] != NULL)
    {
         Utils_memFree(osdWinObj->addr[0][0], dateLen);
         osdWinObj->addr[0][0] = NULL;
    }

    if(osdWinObj->enableWin)
    {
        osdWinObj->addr[0][0] = Utils_memAlloc(dateLen, bufAlign);// bufAlign = 128

        if(NULL != osdWinObj->addr[0][0])
        {

            memcpy(osdWinObj->addr[0][0], params->winPrm[i].addr[0][0], dateLen);

            osdWinObj->addr[0][1] = params->winPrm[i].addr[0][1];
        }
    }

    #else

    //这里是rdk里面的做法
    osdWinObj->addr[0][0] = params->winPrm[i].addr[0][0];
    osdWinObj->addr[0][1] = params->winPrm[i].addr[0][1];
    #endif

    ...

    ...

    ...

    }