1 #define _DMS_C_
2
3 #include "MsTypes.h"
4 #ifndef MSOS_TYPE_LINUX_KERNEL
5 #include <stdio.h>
6 #include <string.h>
7 #endif
8 #include "MsCommon.h"
9 #include "utopia.h"
10 #include "utopia_dapi.h"
11 #include "apiDMS.h"
12 #include "apiDMS_v2.h"
13 #include "drvDMS.h"
14 #include "halDMS.h"
15 #include "apiDMS_private.h"
16
17 #include "UFO.h"
18 //-------------------------------------------------------------------------------------------------
19 // Local Compiler Options
20 //-------------------------------------------------------------------------------------------------
21 // for semaphore POOL
22
23
24 //Below is dbg msg for some important dbg function, like:setmux, set gop dst, atexit,etc...
25
26
27 //-------------------------------------------------------------------------------------------------
28 // Local Defines
29 //-------------------------------------------------------------------------------------------------
30
31 // this func will be call to init by utopia20 framework
DMSRegisterToUtopia(void)32 void DMSRegisterToUtopia(void)
33 {
34 MS_U32 u32ResourceStatusCheck[E_DMS_POOL_ID_MAX] = {UTOPIA_STATUS_FAIL};
35 // 1. deal with module
36 void* pUtopiaModule = NULL;
37 UtopiaModuleCreate(MODULE_DMS, 0, &pUtopiaModule);
38 UtopiaModuleRegister(pUtopiaModule);
39 // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
40 UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)DMSOpen, (FUtopiaClose)DMSClose, (FUtopiaIOctl)DMSIoctl);
41
42 // 2. deal with resource
43 void* psResource = NULL;
44 // start func to add res, call once will create 2 access in resource. Also can declare BDMA_POOL_ID_BDMA1 for another channel depend on driver owner.
45 UtopiaModuleAddResourceStart(pUtopiaModule, E_DMS_POOL_ID_INTERNAL_VARIABLE);
46 // resource can alloc private for internal use, ex, BDMA_RESOURCE_PRIVATE
47 u32ResourceStatusCheck[E_DMS_POOL_ID_INTERNAL_VARIABLE] = UtopiaResourceCreate("DMS", sizeof(DMS_RESOURCE_PRIVATE), &psResource);
48 // func to reg res
49 UtopiaResourceRegister(pUtopiaModule, psResource, E_DMS_POOL_ID_INTERNAL_VARIABLE);
50
51 UtopiaModuleAddResourceEnd(pUtopiaModule, E_DMS_POOL_ID_INTERNAL_VARIABLE);
52
53 //4. init resource private members here (aka, global variable)
54 DMS_RESOURCE_PRIVATE* pDMSResourcePrivate = NULL;
55 UtopiaResourceGetPrivate(psResource,(void**)(&pDMSResourcePrivate));
56
57 //pXCResourcePrivate->bResourceRegistered will automatically cleared by UtopiaResourceRegister
58 if (u32ResourceStatusCheck[E_DMS_POOL_ID_INTERNAL_VARIABLE] == UTOPIA_STATUS_SHM_EXIST)
59 {
60 // do nothing, since it is already inited
61 }
62 else
63 {
64 // Init flow control related variables here. Other global variable should be
65 // inited in each of its init function relatively.
66 pDMSResourcePrivate->bResourceRegistered = TRUE;
67 pDMSResourcePrivate->bDrvInit = FALSE;
68 pDMSResourcePrivate->stHalDMS.phyDSAddr = 0x0;
69 pDMSResourcePrivate->stHalDMS.u8DSIndex = 0;
70 memset(&pDMSResourcePrivate->stHalDMS.stDMS_DSSWDB, 0 , sizeof(pDMSResourcePrivate->stHalDMS.stDMS_DSSWDB));
71
72 #ifdef DMS_VERSION_DIPGOP
73 MS_U8 u8WindowID=0;
74
75 memset(pDMSResourcePrivate->stDrvDMS._stXC_DIPMemInfo, 0 , sizeof(DMS_DIPMEM_INFO) * E_DMS_DIP_CLIENT_MAX);
76 memset(pDMSResourcePrivate->stDrvDMS._stXC_PreDispWinInfo, 0 , sizeof(ST_DMS_WINDOW) * DMS_MAX_WINDOW_NUM);
77 memset(pDMSResourcePrivate->stDrvDMS._stXC_PreDispWinInfo, 0 , sizeof(DMS_DISP_BUFFER_FLAG) * E_DMS_DIP_MULTIVIEW_BUF_ID_MAX * DMS_MAX_WINDOW_NUM);
78 pDMSResourcePrivate->stDrvDMS.u32MaxOutputFrameRate = 0;
79 pDMSResourcePrivate->stDrvDMS.u32VsyncCount = 0;
80 pDMSResourcePrivate->stDrvDMS.u32GOPDispCount = 0;
81 for(u8WindowID=0; u8WindowID<DMS_MAX_WINDOW_NUM; u8WindowID++)
82 {
83 pDMSResourcePrivate->stDrvDMS.u8DIPReadytoCaptureID[u8WindowID] = DMS_Invalid_ReadPointer_ID;
84 }
85
86 memset(pDMSResourcePrivate->stDrvDMS.u32DIPAddress_pa, 0 , sizeof(MS_PHY) * E_DMS_DIP_CLIENT_MAX);
87 memset(pDMSResourcePrivate->stDrvDMS.u8DIP_Window, 0 , sizeof(MS_U8) * E_DMS_DIP_MAX);
88 pDMSResourcePrivate->stDrvDMS.u32GEAddress_pa = 0x0;
89 pDMSResourcePrivate->stDrvDMS.u8GOPGWinNum = 0xFF;
90 pDMSResourcePrivate->stDrvDMS.bIsGOPInit = FALSE;
91 pDMSResourcePrivate->stDrvDMS.bDIPWriteFirstAddr = TRUE;
92 pDMSResourcePrivate->stDrvDMS.bDIPMVOPWriteFirstAddr = TRUE;
93 pDMSResourcePrivate->stDrvDMS.u8EnableWindowCount = 0;
94 pDMSResourcePrivate->stDrvDMS.u8UseDIPWindowCount = 0;
95 pDMSResourcePrivate->stDrvDMS.bNeedGEstretch = FALSE;
96
97 pDMSResourcePrivate->stDrvDMS.eDMS_MVOPFlowCtrl = E_DMS_MVOP_FLOW_UNKNOWN;
98 pDMSResourcePrivate->stDrvDMS.bDMS_MVOPFlowFromDi = FALSE;
99 pDMSResourcePrivate->stDrvDMS.eDMS_PreMVOPFlowCtrl = E_DMS_MVOP_FLOW_UNKNOWN;
100 pDMSResourcePrivate->stDrvDMS.gDMS_MVOPShowBufferID = DMS_Invalid_ReadPointer_ID;
101 pDMSResourcePrivate->stDrvDMS.gDMS_MVOPRemoveBufferID = DMS_Invalid_ReadPointer_ID;
102 pDMSResourcePrivate->stDrvDMS.bMVOPMarkRemoveBuffer = FALSE;
103 memset(&pDMSResourcePrivate->stDrvDMS.bIsWindowMute, 0, sizeof(MS_BOOL) * DMS_MAX_WINDOW_NUM);
104
105 pDMSResourcePrivate->stDrvDMS.gDMS_ScalingCondition = 0;
106 memset(pDMSResourcePrivate->stDrvDMS.gu8DMS_SetXC_Status, 0, sizeof(MS_U32) * DMS_MAX_WINDOW_NUM);
107 pDMSResourcePrivate->stDrvDMS.gu8DMS_Seq_Change_ID = DMS_Invalid_ReadPointer_ID;
108 memset(&pDMSResourcePrivate->stDrvDMS._stXC_XCDispWinInfo, 0, sizeof(pDMSResourcePrivate->stDrvDMS._stXC_XCDispWinInfo));
109 memset(&pDMSResourcePrivate->stDrvDMS._stXC_XCCropWinInfo, 0, sizeof(pDMSResourcePrivate->stDrvDMS._stXC_XCCropWinInfo));
110 memset(&pDMSResourcePrivate->stDrvDMS._stXC_XCDispWinInfo_DoubleBuffer, 0, sizeof(pDMSResourcePrivate->stDrvDMS._stXC_XCDispWinInfo_DoubleBuffer));
111 memset(&pDMSResourcePrivate->stDrvDMS._stXC_XCCropWinInfo_DoubleBuffer, 0, sizeof(pDMSResourcePrivate->stDrvDMS._stXC_XCCropWinInfo_DoubleBuffer));
112
113 memset(&pDMSResourcePrivate->stDrvDMS._stXC_LocalFrameRefCount, 0, sizeof(MS_U8) * DMS_MAX_WINDOW_NUM * DMS_DIP_QUEUEDEPTH);
114 pDMSResourcePrivate->stDrvDMS.u32MVOPFreezeAddress_pa = 0x0;
115 pDMSResourcePrivate->stDrvDMS.bDMS_Freeze_DoubleBuffer = FALSE;
116 pDMSResourcePrivate->stDrvDMS._bForceSwitchBufferFlag = FALSE;
117 memset(&pDMSResourcePrivate->stDrvDMS.u32ReleaseState, 0, sizeof(MS_U32) * DMS_DIP_QUEUEDEPTH);
118
119 pDMSResourcePrivate->stDrvDMS.u32OutputRate = 0;
120 memset(pDMSResourcePrivate->stDrvDMS.bStartCountFRC, 0, sizeof(MS_U32) * DMS_MAX_WINDOW_NUM);
121 memset(pDMSResourcePrivate->stDrvDMS.u32AccumuleInputRate, 0, sizeof(MS_U32) * DMS_MAX_WINDOW_NUM);
122
123 //Di
124 pDMSResourcePrivate->stDrvDMSDi.bFlipToDiTask = FALSE;
125 pDMSResourcePrivate->stDrvDMSDi._u8DMS_DiSetEventBufferID = DMS_Invalid_ReadPointer_ID;
126 pDMSResourcePrivate->stDrvDMSDi._u8DMS_DiReleaseVDECFrameBufferID = DMS_Invalid_ReadPointer_ID;
127 memset(&pDMSResourcePrivate->stDrvDMSDi._stXC_LocalFrameRefCountInterlace, 0, sizeof(MS_U8) * DMS_MAX_WINDOW_NUM * DMS_DIP_QUEUEDEPTH);
128 memset(pDMSResourcePrivate->stDrvDMSDi.u8DIPReadytoCaptureIDInterlace,DMS_Invalid_ReadPointer_ID, sizeof(pDMSResourcePrivate->stDrvDMSDi.u8DIPReadytoCaptureIDInterlace));
129 pDMSResourcePrivate->stDrvDMSDi.u8DIRingBufferID = 0;
130 pDMSResourcePrivate->stDrvDMSDi._bDiNowShowRingBufID = INVALID_DI_RING_BUFFER_ID;
131 pDMSResourcePrivate->stDrvDMSDi._bDiReleaseShowRingBufID = INVALID_DI_RING_BUFFER_ID;
132 pDMSResourcePrivate->stDrvDMSDi._bSetwinToDiTask_DoubleBuffer = FALSE;
133 for(u8WindowID=0; u8WindowID<DMS_MAX_WINDOW_NUM; u8WindowID++)
134 {
135 MS_U8 u8BufID = 0;
136 for(u8BufID=0; u8BufID<DMS_DIP_QUEUEDEPTH; u8BufID++)
137 {
138 pDMSResourcePrivate->stDrvDMSDi._stXC_DIPDIInfo[u8WindowID][u8BufID].bValid = FALSE;
139 }
140 }
141 pDMSResourcePrivate->stDrvDMSDi.u32DIPDIAddress_pa = 0x0;
142
143 //Capture Mode
144 memset(pDMSResourcePrivate->stDrvDMSCapMode._stXC_DIPCaptureWinInfo, 0 , sizeof(DMS_DIPCAPTUREWIN_INFO) * DMS_MAX_WINDOW_NUM);
145 memset(&pDMSResourcePrivate->stDrvDMSCapMode._stXC_CaptureRingBufRefCount, 0, sizeof(MS_U8) * DMS_MAX_WINDOW_NUM * DMS_CAPTUREWIN_RING_BUFFER);
146 memset(&pDMSResourcePrivate->stDrvDMSCapMode._stXC_LocalFrameRefCountCaptureMode, 0, sizeof(MS_U8) * DMS_MAX_WINDOW_NUM * DMS_DIP_QUEUEDEPTH);
147 memset(&pDMSResourcePrivate->stDrvDMSCapMode._stXC_DIPCapWin_WriteReadPointer, 0, sizeof(DMS_DIPWriteReadPointer) * DMS_MAX_WINDOW_NUM);
148 memset(&pDMSResourcePrivate->stDrvDMSCapMode._stXC_DIPCaptureWin_RingBufferPointer, 0, sizeof(DMS_DIPCaptureWin_WritePointer) * DMS_MAX_WINDOW_NUM);
149 pDMSResourcePrivate->stDrvDMSCapMode.u8CapturedWinNum = 0;
150 memset(pDMSResourcePrivate->stDrvDMSCapMode.u8frameRepeatCnt, 0, sizeof(MS_U8) * DMS_MAX_WINDOW_NUM * DMS_DIP_QUEUEDEPTH);
151 memset(pDMSResourcePrivate->stDrvDMSCapMode.bIsFrameValid, 0, sizeof(MS_U32) * DMS_MAX_WINDOW_NUM * DMS_DIP_QUEUEDEPTH);
152 memset(pDMSResourcePrivate->stDrvDMSCapMode.bIsRingBufAccessed, 0, sizeof(MS_U32) * DMS_CAPTUREWIN_RING_BUFFER);
153 #if DMS_DIP_Support_IMI
154 memset(pDMSResourcePrivate->stDrvDMSCapMode._stXC_IMICaptureInfo, 0, sizeof(DMS_DIPCAPTURE_IMI_INFO) * DMS_MAX_WINDOW_NUM);
155 #endif
156 pDMSResourcePrivate->stDrvDMS.bFirstPlay = FALSE;
157 pDMSResourcePrivate->stDrvDMS.bDisableBlackScreen = FALSE;
158 pDMSResourcePrivate->stDrvDMS.u32MuteCounter = 0;
159 pDMSResourcePrivate->stDrvDMS.bXCEnableBob = FALSE;
160 #endif
161 }
162 }
163
DMSOpen(void ** ppInstance,const void * const pAttribute)164 MS_U32 DMSOpen(void** ppInstance, const void* const pAttribute)
165 {
166 DMS_INSTANT_PRIVATE *pDMSPri = NULL;
167
168 //UTOPIA_TRACE(MS_UTOPIA_DB_LEVEL_TRACE,printf("enter %s %d\n",__FUNCTION__,__LINE__));
169 // instance is allocated here, also can allocate private for internal use, ex, BDMA_INSTANT_PRIVATE
170 UtopiaInstanceCreate(sizeof(DMS_INSTANT_PRIVATE), ppInstance);
171 // setup func in private and assign the calling func in func ptr in instance private
172 UtopiaInstanceGetPrivate(*ppInstance, (void**)&pDMSPri);
173
174 pDMSPri->fpDMSInit = MApi_DMS_Init_U2;
175 pDMSPri->fpDMSSetMemType = MApi_DMS_SetMemory_U2;
176 pDMSPri->fpDMSCreateWin = MApi_DMS_CreateWindow_U2;
177 pDMSPri->fpDMSSetDigiDecInfo = MApi_DMS_SetDigitalDecodeSignalInfo_U2;
178 pDMSPri->fpDMSClearDigiDecInfo = MApi_DMS_ClearDigitalDecodeSignalInfo_U2;
179 pDMSPri->fpDMSDestoryWin = MApi_DMS_DestroyWindow_U2;
180 pDMSPri->fpDMSSetWin = MApi_DMS_SetWindow_U2;
181 pDMSPri->fpDMSGetWinInfo = MApi_DMS_GetWindowInfo_U2;
182 pDMSPri->fpDMSFlip = MApi_DMS_Video_Flip_U2;
183 pDMSPri->fpDMSZOrder = MApi_DMS_SetZOrder_U2;
184 pDMSPri->fpDMSMute = MApi_DMS_Video_Mute_U2;
185 pDMSPri->fpDMSSetMuteColor = MApi_DMS_Set_MuteColor_U2;
186 pDMSPri->fpDMSFreeze = MApi_DMS_Video_Freeze_U2;
187 pDMSPri->fpDMSGetStatus = MApi_DMS_GetStatus_U2;
188 pDMSPri->fpDMSGetCaps = MApi_DMS_GetCapability_U2;
189 pDMSPri->fpDMSGetExistWin = MApi_DMS_GetExistedWindows_U2;
190 pDMSPri->fpDMSSetOutputLayer = MApi_DMS_SetOutputLayer_U2;
191 pDMSPri->fpDMSSet3DMode = MApi_DMS_Set_3D_Mode_U2;
192 pDMSPri->fpDMSSetCaptureInfo = MApi_DMS_Set_CaptureInfo_U2;
193 pDMSPri->fpDMSGetCaptureBuf = MApi_DMS_Get_CaptureBuffer_U2;
194 pDMSPri->fpDMSReleaseCaptureBuf = MApi_DMS_Release_CaptureBuffer_U2;
195
196 return UTOPIA_STATUS_SUCCESS;
197 }
198
DMSIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)199 MS_U32 DMSIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
200 {
201 if(pInstance == NULL)
202 {
203 printf("[%s] pInstance is NULL\n",__FUNCTION__);
204 return UTOPIA_STATUS_FAIL;
205 }
206 void* pModule = NULL;
207 UtopiaInstanceGetModule(pInstance, &pModule);
208 DMS_INSTANT_PRIVATE* psDMSInstPri = NULL;
209 UtopiaInstanceGetPrivate(pInstance, (void**)&psDMSInstPri);
210 MS_U32 u32Return = UTOPIA_STATUS_FAIL;
211
212 switch(u32Cmd)
213 {
214 case E_DMS_CMD_INIT:
215 {
216 PST_DMS_INIT ptr = (PST_DMS_INIT)pArgs;
217 ptr->eReturnValue = psDMSInstPri->fpDMSInit(pInstance, ptr->pstDMS_InitData);
218 u32Return = UTOPIA_STATUS_SUCCESS;
219 break;
220 }
221 case E_DMS_CMD_SETMEMORY:
222 {
223 PST_DMS_SETMEMTYPE ptr = (PST_DMS_SETMEMTYPE)pArgs;
224 ptr->eReturnValue = psDMSInstPri->fpDMSSetMemType(pInstance, ptr->pstDMS_SetMemType);
225 u32Return = UTOPIA_STATUS_SUCCESS;
226 break;
227 }
228 case E_DMS_CMD_CREATEWINDOW:
229 {
230 PST_DMS_CREATEWIN ptr = (PST_DMS_CREATEWIN)pArgs;
231 ptr->eReturnValue = psDMSInstPri->fpDMSCreateWin(pInstance, ptr->pstOutputWin, ptr->pstCreateWin_Info, ptr->pu32WindowID);
232 u32Return = UTOPIA_STATUS_SUCCESS;
233 break;
234 }
235 case E_DMS_CMD_SETDIGITALDECODESIGNALINFO:
236 {
237 PST_DMS_SETDIGIDECINFO ptr = (PST_DMS_SETDIGIDECINFO)pArgs;
238 ptr->eReturnValue = psDMSInstPri->fpDMSSetDigiDecInfo(pInstance, ptr->u32WindowID, ptr->pstDispFrameFormat);
239 u32Return = UTOPIA_STATUS_SUCCESS;
240 break;
241 }
242 case E_DMS_CMD_CLEARDIGITALDECODESIGNALINFO:
243 {
244 PST_DMS_CLEARDIGIDECINFO ptr = (PST_DMS_CLEARDIGIDECINFO)pArgs;
245 ptr->eReturnValue = psDMSInstPri->fpDMSClearDigiDecInfo(pInstance, ptr->u32WindowID);
246 u32Return = UTOPIA_STATUS_SUCCESS;
247 break;
248 }
249 case E_DMS_CMD_DESTORYWINDOW:
250 {
251 PST_DMS_DESTORYWIN ptr = (PST_DMS_DESTORYWIN)pArgs;
252 ptr->eReturnValue = psDMSInstPri->fpDMSDestoryWin(pInstance, ptr->u32WindowID);
253 u32Return = UTOPIA_STATUS_SUCCESS;
254 break;
255 }
256 case E_DMS_CMD_SETWINDOW:
257 {
258 PST_DMS_SETWIN ptr = (PST_DMS_SETWIN)pArgs;
259 ptr->eReturnValue = psDMSInstPri->fpDMSSetWin(pInstance, ptr->u32WindowID, ptr->pstDMS_SetWin_Info);
260 u32Return = UTOPIA_STATUS_SUCCESS;
261 break;
262 }
263 case E_DMS_CMD_GETWINDOWINFO:
264 {
265 PST_DMS_GETWININFO ptr = (PST_DMS_GETWININFO)pArgs;
266 ptr->eReturnValue = psDMSInstPri->fpDMSGetWinInfo(pInstance, ptr->u32WindowID, ptr->pstDMS_GetWin_Info);
267 u32Return = UTOPIA_STATUS_SUCCESS;
268 break;
269 }
270 case E_DMS_CMD_VIDEOFLIP:
271 {
272 PST_DMS_FLIP ptr = (PST_DMS_FLIP)pArgs;
273 ptr->eReturnValue = psDMSInstPri->fpDMSFlip(pInstance, ptr->u32WindowID, ptr->pstDispFrameFormat);
274 u32Return = UTOPIA_STATUS_SUCCESS;
275 break;
276 }
277 case E_DMS_CMD_SETZORDER:
278 {
279 PST_DMS_ZORDER ptr = (PST_DMS_ZORDER)pArgs;
280 ptr->eReturnValue = psDMSInstPri->fpDMSZOrder(pInstance, ptr->u32WindowID, ptr->pstZorderInfo);
281 u32Return = UTOPIA_STATUS_SUCCESS;
282 break;
283 }
284 case E_DMS_CMD_VIDEOMUTE:
285 {
286 PST_DMS_MUTE ptr = (PST_DMS_MUTE)pArgs;
287 ptr->eReturnValue = psDMSInstPri->fpDMSMute(pInstance, ptr->u32WindowID, ptr->pstWindowMute);
288 u32Return = UTOPIA_STATUS_SUCCESS;
289 break;
290 }
291 case E_DMS_CMD_SETMUTECOLOR:
292 {
293 PST_DMS_MUTECOLOR ptr = (PST_DMS_MUTECOLOR)pArgs;
294 ptr->eReturnValue = psDMSInstPri->fpDMSSetMuteColor(pInstance, ptr->u32WindowID, ptr->pstMuteColor);
295 u32Return = UTOPIA_STATUS_SUCCESS;
296 break;
297 }
298 case E_DMS_CMD_VIDEOFREEZE:
299 {
300 PST_DMS_FREEZE ptr = (PST_DMS_FREEZE)pArgs;
301 ptr->eReturnValue = psDMSInstPri->fpDMSFreeze(pInstance, ptr->u32WindowID, ptr->pstWindowFreeze);
302 u32Return = UTOPIA_STATUS_SUCCESS;
303 break;
304 }
305 case E_DMS_CMD_GETSTATUS:
306 {
307 PST_DMS_GETSTATUS ptr = (PST_DMS_GETSTATUS)pArgs;
308 ptr->eReturnValue = psDMSInstPri->fpDMSGetStatus(pInstance, ptr->peStatus);
309 u32Return = UTOPIA_STATUS_SUCCESS;
310 break;
311 }
312 case E_DMS_CMD_GETCAPS:
313 {
314 PST_DMS_GETCAPS ptr = (PST_DMS_GETCAPS)pArgs;
315 ptr->eReturnValue = psDMSInstPri->fpDMSGetCaps(pInstance, ptr->peCapability);
316 u32Return = UTOPIA_STATUS_SUCCESS;
317 break;
318 }
319 case E_DMS_CMD_GETEXISTEDWINDOW:
320 {
321 PST_DMS_GETEXISTWIN ptr = (PST_DMS_GETEXISTWIN)pArgs;
322 ptr->eReturnValue = psDMSInstPri->fpDMSGetExistWin(pInstance, ptr->pu32WindowNums);
323 u32Return = UTOPIA_STATUS_SUCCESS;
324 break;
325 }
326 case E_DMS_CMD_SETOUTPUTLAYER:
327 {
328 PST_DMS_SETOUTPUTLAYER ptr = (PST_DMS_SETOUTPUTLAYER)pArgs;
329 ptr->eReturnValue = psDMSInstPri->fpDMSSetOutputLayer(pInstance, ptr->pstLayer);
330 u32Return = UTOPIA_STATUS_SUCCESS;
331 break;
332 }
333 case E_DMS_CMD_SET3DMODE:
334 {
335 PST_DMS_SET3DMODE ptr = (PST_DMS_SET3DMODE)pArgs;
336 ptr->eReturnValue = psDMSInstPri->fpDMSSet3DMode(pInstance, ptr->u32WindowID, ptr->pst3DInfo);
337 u32Return = UTOPIA_STATUS_SUCCESS;
338 break;
339 }
340 case E_DMS_CMD_SETCAPTUREINFO:
341 {
342 PST_DMS_SETCAPTUREINFO ptr = (PST_DMS_SETCAPTUREINFO)pArgs;
343 ptr->eReturnValue = psDMSInstPri->fpDMSSetCaptureInfo(pInstance, ptr->u32WindowID, ptr->pstSetCaptureInfo);
344 u32Return = UTOPIA_STATUS_SUCCESS;
345 break;
346 }
347 case E_DMS_CMD_GETCAPTUREBUFFER:
348 {
349 PST_DMS_GETCAPTUREBUF ptr = (PST_DMS_GETCAPTUREBUF)pArgs;
350 ptr->eReturnValue = psDMSInstPri->fpDMSGetCaptureBuf(pInstance, ptr->u32WindowID, ptr->pstCaptureInfo);
351 u32Return = UTOPIA_STATUS_SUCCESS;
352 break;
353 }
354 case E_DMS_CMD_RELEASECAPTUREBUFFER:
355 {
356 PST_DMS_RELEASECAPTUREBUF ptr = (PST_DMS_RELEASECAPTUREBUF)pArgs;
357 ptr->eReturnValue = psDMSInstPri->fpDMSReleaseCaptureBuf(pInstance, ptr->u32WindowID, ptr->pstCaptureInfo);
358 u32Return = UTOPIA_STATUS_SUCCESS;
359 break;
360 }
361 default:
362 printf("[%s] out of DMS cmd:%td\n",__FUNCTION__,(ptrdiff_t)u32Cmd);
363 break;
364 };
365
366 return u32Return;
367 }
368
DMSClose(void * pInstance)369 MS_U32 DMSClose(void* pInstance)
370 {
371 UtopiaInstanceDelete(pInstance);
372
373 return TRUE;
374 }
375
376
377