TI中文支持网
TI专业的中文技术问题搜集分享网站

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]有什么特殊要求吗,比如对齐等??

user4865572:

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

Chris Meng:

回复 user4865572:

你好,

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

user4865572:

回复 Chris Meng:

Chris Meng 

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

user4865572:

回复 user4865572:

贴上我修改部分的代码吧

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

}

赞(0)
未经允许不得转载:TI中文支持网 » dvr_rdk4.0 SWOSD的问题
分享到: 更多 (0)