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
…
…
…
}