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