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.

swosdLink_tsk.c: SWOSD_imxCreate(strId, isTiled[strId] ,lineOffsets[strId] ) ==0 : failed !!!

Hi!

I'm working customized DM385 platform

My usecase is like that 

CaptureLink  --- SWOSDLink --- Displaylink

But when  swosd created, Print the following information:

StreamID is 0
[m3vpss ] staticPrm.isInterlaced = 0
[m3vpss ] staticPrm.videoLineOffset[0] = 2208
[m3vpss ] staticPrm.videoLineOffset[1] = 2208
[m3vpss ] [SWOSD] SWOSD_imxCreate for stream 0
[m3vpss ] SWOSD Open failed for stream#0 !!!!!!!
[m3vpss ] 44953: Assertion @ Line: 217 in links_m3vpss/swosd/swosdLink_tsk.c: SWOSD_imxCreate(strId, isTiled[strId] ,lineOffsets[strId] ) ==0 : failed !!!

Configuration information is as follows:

int SWOSD_imxCreate(int streamID, int isTiled, int offset)
{
int status;
int i;

StreamWindows * sWin = &streamWindows[streamID];

sWin->isAnyWindowEnabled = 0;

staticPrm.maxWidth = SWOSD_MAX_STRING_LENGTH*SWOSD_CHARWIDTH_1540_40;
staticPrm.maxHeight = SWOSD_STRINGHEIGHT_1540_40;

#endif
staticPrm.dataFormat = SWOSD_FORMAT_YUV420SP_UV;
staticPrm.isTiledMem = isTiled;
staticPrm.isInterlaced = 0;
staticPrm.videoLineOffset[0] = offset;
staticPrm.videoLineOffset[1] = offset;

Vps_printf("StreamID is %d \n", streamID);
Vps_printf("staticPrm.isInterlaced = %d\n", staticPrm.isInterlaced);
Vps_printf("staticPrm.videoLineOffset[0] = %d\n",staticPrm.videoLineOffset[0] );
Vps_printf("staticPrm.videoLineOffset[1] = %d\n",staticPrm.videoLineOffset[1]);


dynPrm.numWindows = 1;
dynPrm.winPrm[0].startX = 0;
dynPrm.winPrm[0].startY = 0;
dynPrm.winPrm[0].width = 160;
dynPrm.winPrm[0].height = 160;
dynPrm.winPrm[0].alpha = GLOBAL_ALPHA_VALUE;
dynPrm.winPrm[0].lineOffset[0] = 160;
dynPrm.winPrm[0].lineOffset[1] =160;
dynPrm.winPrm[0].graphicsWindowAddr[0] = 0;
dynPrm.winPrm[0].graphicsWindowAddr[1] = 0;


createPrm.numChannels = 1;
createPrm.colorKey[0] = 0; //Revisit 255
createPrm.colorKey[1] = 0; //Revisit 255
createPrm.transparencyEnable = TRUE; //FALSE

createPrm.useGlobalAlpha = 1;

createPrm.globalAlphaValue = GLOBAL_ALPHA_VALUE;
createPrm.acquire = AcquireResource;
createPrm.release = ReleaseResource;


for(i=0; i < createPrm.numChannels; i++)
{
memcpy(&createPrm.chStaticPrm[i], &staticPrm, sizeof(SWOSD_StaticPrm));
memcpy(&createPrm.chDynamicPrm[i], &dynPrm, sizeof(SWOSD_DynamicPrm));
}

Vps_printf("[SWOSD] SWOSD_imxCreate for stream %d \n", streamID);

if(status = SWOSD_open(&gOsdHndl[streamID], &createPrm))
{
Vps_printf("SWOSD Open failed for stream#%d !!!!!!!\n\n", streamID);
return status;
}

{
RM_SIMCOP_CLIENT_PARAMS stRMClientParams;
RM_SIMCOP_STATUS eRMStatus = RM_SIMCOP_STATUS_SUCCESS;

stRMClientParams.nSize = sizeof(RM_SIMCOP_CLIENT_PARAMS);
stRMClientParams.pClientHandle = (RM_SIMCOP_CLIENT_HANDLE)&gOsdHndl[streamID];
/* Get Resource Manager Handle independent of resources And register Client */
eRMStatus = RM_SIMCOP_RegisterClient(stRMClientParams, (RM_SIMCOP_CLIENT_HANDLE *) &pRMHandle[streamID]);
UTILS_assert(eRMStatus==RM_SIMCOP_STATUS_SUCCESS);

}

/* Get memory for osd algorithm */
SWOSD_getMemAllocInfo(&gOsdHndl[streamID], &gMemInfo);

if(isMemoryAllocationDone == 0)
{
if(SWOSD_allocMemory(&gMemInfo) != SWOSD_OK)
{
RM_SIMCOP_DeRegisterClient(pRMHandle[streamID]);
SWOSD_close(&gOsdHndl[streamID]);
Vps_printf("SWOSD_allocMemory failed!!!!!!!\n\n");
return SWOSD_ERROR;
}
isMemoryAllocationDone = 1;
}
else
{
Int32 i;
for(i=0;i<gMemInfo.numMemBlocks; i++)
{
gMemInfo.memBlockAddr[i] = memBlockAddr[i];
}
}

/* Set memory for osd algorithm */
if(SWOSD_setMemAllocInfo(&gOsdHndl[streamID], &gMemInfo) != SWOSD_OK)
return SWOSD_ERROR;

return 0;
}

int SWOSD_imxDelete(int streamID)
{
if(streamID == 0)
SWOSD_freeMemory(&gMemInfo);

RM_SIMCOP_DeRegisterClient(pRMHandle[streamID]);

SWOSD_close(&gOsdHndl[streamID]);

isMemoryAllocationDone = 0;

return 0;
}


int SWOSD_imxPrepUpdateDynamicParamsAndTrigger(SWOSD_Hndl * Hndl, short *mainWinAddrY,
short *mainWinAddrUV, int streamId)
{
int status;


/* update dynamic channel params */
if(status = SWOSD_setDynamicPrm(&gOsdHndl[streamId], 0, &dynPrm))
{
Vps_printf("Error occured in the Setting of Dynamic Params\n");
return status;
}

osdFrameList.numFrames = 1;
osdFrameList.frames[0].channelNum = 0; /* channelNum */
osdFrameList.frames[0].fid = 0; /* field Id */

if(isTiled[streamId])
{
osdFrameList.frames[0].addr[0] = (Ptr)Utils_tilerAddr2CpuAddr( (UInt32)mainWinAddrY );
osdFrameList.frames[0].addr[1] = (Ptr)Utils_tilerAddr2CpuAddr( (UInt32)mainWinAddrUV );
}
else
{
osdFrameList.frames[0].addr[0] = mainWinAddrY;
osdFrameList.frames[0].addr[1] = mainWinAddrUV;
}


status = SWOSD_blendFrames(&gOsdHndl[streamId], &osdFrameList, 0);
if(SWOSD_OK != status)
Vps_printf("SWOSD_ IMX Blend Failed!!!!!!!!!!!\n");


return 0;
}

Please reply to me as soon as possible, thank you