1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi //
97*53ee8cc1Swenshuai.xi /// This file contains MStar ACE Application Interface.
98*53ee8cc1Swenshuai.xi /// brief API for Advanced Color Engine Control
99*53ee8cc1Swenshuai.xi /// author MStar Semiconductor, Inc.
100*53ee8cc1Swenshuai.xi //
101*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
102*53ee8cc1Swenshuai.xi
103*53ee8cc1Swenshuai.xi
104*53ee8cc1Swenshuai.xi #ifndef _API_XC_ACE_C_
105*53ee8cc1Swenshuai.xi #define _API_XC_ACE_C_
106*53ee8cc1Swenshuai.xi
107*53ee8cc1Swenshuai.xi /******************************************************************************/
108*53ee8cc1Swenshuai.xi /* Header Files */
109*53ee8cc1Swenshuai.xi /* ****************************************************************************/
110*53ee8cc1Swenshuai.xi
111*53ee8cc1Swenshuai.xi // Need to remove
112*53ee8cc1Swenshuai.xi //#include "msAPI_Timer.h"
113*53ee8cc1Swenshuai.xi
114*53ee8cc1Swenshuai.xi
115*53ee8cc1Swenshuai.xi // Must have
116*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
117*53ee8cc1Swenshuai.xi #include <linux/string.h>
118*53ee8cc1Swenshuai.xi #else
119*53ee8cc1Swenshuai.xi #include <string.h>
120*53ee8cc1Swenshuai.xi #endif
121*53ee8cc1Swenshuai.xi // Common Definition
122*53ee8cc1Swenshuai.xi #include "MsCommon.h"
123*53ee8cc1Swenshuai.xi #include "MsVersion.h"
124*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
125*53ee8cc1Swenshuai.xi #include "MsOS.h"
126*53ee8cc1Swenshuai.xi #include "utopia.h"
127*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
128*53ee8cc1Swenshuai.xi
129*53ee8cc1Swenshuai.xi
130*53ee8cc1Swenshuai.xi #include "apiXC_Ace.h"
131*53ee8cc1Swenshuai.xi #include "drvACE.h"
132*53ee8cc1Swenshuai.xi // Internal Definition
133*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
134*53ee8cc1Swenshuai.xi #include "apiXC_Ace_v2.h"
135*53ee8cc1Swenshuai.xi #include "ACE_private.h"
136*53ee8cc1Swenshuai.xi #include "apiXC.h"
137*53ee8cc1Swenshuai.xi #include "mvideo_context.h"
138*53ee8cc1Swenshuai.xi
139*53ee8cc1Swenshuai.xi extern void MDrv_XC_SetMWEStatus(void *pInstance, MS_BOOL bMWEStatus);
140*53ee8cc1Swenshuai.xi extern MS_BOOL MDrv_XC_GetMWEStatus(void *pInstance);
141*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
142*53ee8cc1Swenshuai.xi // Local Defines
143*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
144*53ee8cc1Swenshuai.xi
145*53ee8cc1Swenshuai.xi #define MAIN_WINDOW 0
146*53ee8cc1Swenshuai.xi #define SUB_WINDOW 1
147*53ee8cc1Swenshuai.xi
148*53ee8cc1Swenshuai.xi /******************************************************************************/
149*53ee8cc1Swenshuai.xi /* Debug information */
150*53ee8cc1Swenshuai.xi /******************************************************************************/
151*53ee8cc1Swenshuai.xi #ifdef CONFIG_MS_DEBUG_XC_LOG
152*53ee8cc1Swenshuai.xi #ifndef XC_ACE_DBG
153*53ee8cc1Swenshuai.xi #define XC_ACE_DBG
154*53ee8cc1Swenshuai.xi #endif
155*53ee8cc1Swenshuai.xi #endif
156*53ee8cc1Swenshuai.xi
157*53ee8cc1Swenshuai.xi //#define XC_ACE_DBG 0
158*53ee8cc1Swenshuai.xi #define XC_ACE_MUTEX_DBG 0
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi #if (defined CONFIG_MLOG)
161*53ee8cc1Swenshuai.xi #define ACE_PRINTF(fmt,_args...) \
162*53ee8cc1Swenshuai.xi {\
163*53ee8cc1Swenshuai.xi ULOGD("ACE_DBG_MSG","[%s,%5d] ",__FUNCTION__,__LINE__);\
164*53ee8cc1Swenshuai.xi ULOGD("ACE_DBG_MSG",fmt,##_args);\
165*53ee8cc1Swenshuai.xi }
166*53ee8cc1Swenshuai.xi #else
167*53ee8cc1Swenshuai.xi #define ACE_PRINTF(fmt,...) \
168*53ee8cc1Swenshuai.xi {\
169*53ee8cc1Swenshuai.xi printf("[ACE_DBG_MSG]:"); \
170*53ee8cc1Swenshuai.xi printf("%s: %d \n" fmt, __FUNCTION__, __LINE__, ## __VA_ARGS__);\
171*53ee8cc1Swenshuai.xi }
172*53ee8cc1Swenshuai.xi #endif
173*53ee8cc1Swenshuai.xi
174*53ee8cc1Swenshuai.xi #ifdef XC_ACE_DBG
175*53ee8cc1Swenshuai.xi #define XC_ACE_DBG_MSG(fmt,_args...) \
176*53ee8cc1Swenshuai.xi do{\
177*53ee8cc1Swenshuai.xi ACE_PRINTF(fmt,##_args);\
178*53ee8cc1Swenshuai.xi } while(0)
179*53ee8cc1Swenshuai.xi
180*53ee8cc1Swenshuai.xi #define XC_ACE_PRINT_VAR(var) \
181*53ee8cc1Swenshuai.xi do{\
182*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("%30s: %d\n", #var, (var));\
183*53ee8cc1Swenshuai.xi }while(0)
184*53ee8cc1Swenshuai.xi
185*53ee8cc1Swenshuai.xi #define XC_ACE_PRINT_FUN(fun) \
186*53ee8cc1Swenshuai.xi do{\
187*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("\n");\
188*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("**************************************************\n");\
189*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("*\t\t%s \t\t\n", #fun);\
190*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("**************************************************\n");\
191*53ee8cc1Swenshuai.xi fun;\
192*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("* *\n");\
193*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("* *\n");\
194*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("**************************************************\n");\
195*53ee8cc1Swenshuai.xi }while(0)
196*53ee8cc1Swenshuai.xi
197*53ee8cc1Swenshuai.xi #define ACE_DBG_MSG(fmt,_args...) \
198*53ee8cc1Swenshuai.xi do{ \
199*53ee8cc1Swenshuai.xi if(_u16XC_ACEDbgSwitch){ \
200*53ee8cc1Swenshuai.xi ACE_PRINTF(fmt,##_args); \
201*53ee8cc1Swenshuai.xi } \
202*53ee8cc1Swenshuai.xi } while(0)
203*53ee8cc1Swenshuai.xi
204*53ee8cc1Swenshuai.xi #else
205*53ee8cc1Swenshuai.xi #define XC_ACE_DBG_MSG(str, ...)
206*53ee8cc1Swenshuai.xi #define XC_ACE_PRINT_VAR(var)
207*53ee8cc1Swenshuai.xi #define XC_ACE_PRINT_FUN(fun) fun
208*53ee8cc1Swenshuai.xi #define ACE_DBG_MSG(fmt,...)
209*53ee8cc1Swenshuai.xi #endif
210*53ee8cc1Swenshuai.xi
211*53ee8cc1Swenshuai.xi #define MWE_TIMER 60
212*53ee8cc1Swenshuai.xi #define MWE_H_STEP 6
213*53ee8cc1Swenshuai.xi #define MWE_MOVE_RIGHT 1
214*53ee8cc1Swenshuai.xi #define MWE_MOVE_LEFT 0
215*53ee8cc1Swenshuai.xi
216*53ee8cc1Swenshuai.xi #if 0
217*53ee8cc1Swenshuai.xi static E_XC_ACE_MWE_FUNC _MWEFunc = E_XC_ACE_MWE_MODE_OFF;
218*53ee8cc1Swenshuai.xi static MS_U32 _MWETimer = 0;
219*53ee8cc1Swenshuai.xi static MS_U32 _MWEFlag = MWE_MOVE_LEFT;
220*53ee8cc1Swenshuai.xi static MS_BOOL bMWEStatus = FALSE;
221*53ee8cc1Swenshuai.xi static MWE_RECT gMWERect;
222*53ee8cc1Swenshuai.xi
223*53ee8cc1Swenshuai.xi static XC_ACE_InitData g_XC_ACE_InitData;
224*53ee8cc1Swenshuai.xi static const XC_ACE_ApiInfo _stXC_ACE_ApiInfo = {};
225*53ee8cc1Swenshuai.xi #if XC_ACE_DBG
226*53ee8cc1Swenshuai.xi static MS_U16 _u16XC_ACEDbgSwitch = 0;
227*53ee8cc1Swenshuai.xi #endif
228*53ee8cc1Swenshuai.xi static MS_BOOL _bMWESkipDriverSetting = FALSE;
229*53ee8cc1Swenshuai.xi static E_XC_ACE_MWE_MIRROR_TYPE _enMirrorMode = E_XC_ACE_MWE_MIRROR_NORMAL;
230*53ee8cc1Swenshuai.xi #else
231*53ee8cc1Swenshuai.xi #define _MWEFunc psACEResPri->stapiACE._MWEFunc
232*53ee8cc1Swenshuai.xi #define _MWETimer psACEResPri->stapiACE._MWETimer
233*53ee8cc1Swenshuai.xi #define _MWEFlag psACEResPri->stapiACE._MWEFlag
234*53ee8cc1Swenshuai.xi //#define bMWEStatus psACEResPri->stapiACE.bMWEStatus
235*53ee8cc1Swenshuai.xi #define gMWERect psACEResPri->stapiACE.gMWERect
236*53ee8cc1Swenshuai.xi #define g_XC_ACE_InitData psACEResPri->stapiACE.g_XC_ACE_InitData
237*53ee8cc1Swenshuai.xi #define _bMWESkipDriverSetting psACEResPri->stapiACE._bMWESkipDriverSetting
238*53ee8cc1Swenshuai.xi #define _enMirrorMode psACEResPri->stapiACE._enMirrorMode
239*53ee8cc1Swenshuai.xi #define g_u8MotionStableCnt psACEResPri->stapiACE.g_u8MotionStableCnt
240*53ee8cc1Swenshuai.xi #define g_u8LumaStableCnt psACEResPri->stapiACE.g_u8LumaStableCnt
241*53ee8cc1Swenshuai.xi #define g_u8FlickStableCnt psACEResPri->stapiACE.g_u8FlickStableCnt
242*53ee8cc1Swenshuai.xi #define g_bACEModuleInited psACEResPri->stapiACE.g_bACEModuleInited
243*53ee8cc1Swenshuai.xi
244*53ee8cc1Swenshuai.xi static const XC_ACE_ApiInfo _stXC_ACE_ApiInfo = {};
245*53ee8cc1Swenshuai.xi #ifdef XC_ACE_DBG
246*53ee8cc1Swenshuai.xi static MS_U16 _u16XC_ACEDbgSwitch = 0;
247*53ee8cc1Swenshuai.xi #endif
248*53ee8cc1Swenshuai.xi
249*53ee8cc1Swenshuai.xi #endif
250*53ee8cc1Swenshuai.xi
251*53ee8cc1Swenshuai.xi // OS related
252*53ee8cc1Swenshuai.xi #define XC_ACE_WAIT_MUTEX (TICK_PER_ONE_MS * 50) // 50 ms
253*53ee8cc1Swenshuai.xi
254*53ee8cc1Swenshuai.xi // Mutex & Lock
255*53ee8cc1Swenshuai.xi static MS_S32 _s32XC_ACEMutex = -1;
256*53ee8cc1Swenshuai.xi
257*53ee8cc1Swenshuai.xi #if XC_ACE_MUTEX_DBG
258*53ee8cc1Swenshuai.xi #define XC_ACE_ENTRY() if(!MsOS_ObtainMutex(_s32XC_ACEMutex, MSOS_WAIT_FOREVER)) \
259*53ee8cc1Swenshuai.xi { \
260*53ee8cc1Swenshuai.xi printf("==========================\n"); \
261*53ee8cc1Swenshuai.xi printf("[%s][%s][%06d] Mutex taking timeout\n",__FILE__,__FUNCTION__,__LINE__); \
262*53ee8cc1Swenshuai.xi }
263*53ee8cc1Swenshuai.xi #else
264*53ee8cc1Swenshuai.xi #define XC_ACE_ENTRY() if(!MsOS_ObtainMutex(_s32XC_ACEMutex, MSOS_WAIT_FOREVER)) \
265*53ee8cc1Swenshuai.xi { \
266*53ee8cc1Swenshuai.xi }
267*53ee8cc1Swenshuai.xi #endif
268*53ee8cc1Swenshuai.xi
269*53ee8cc1Swenshuai.xi #define XC_ACE_RETURN() MsOS_ReleaseMutex(_s32XC_ACEMutex);
270*53ee8cc1Swenshuai.xi
271*53ee8cc1Swenshuai.xi
272*53ee8cc1Swenshuai.xi static MSIF_Version _api_xc_ace_version = {
273*53ee8cc1Swenshuai.xi .DDI = { XC_ACE_API_VERSION },
274*53ee8cc1Swenshuai.xi };
275*53ee8cc1Swenshuai.xi
276*53ee8cc1Swenshuai.xi // for Utopia 2.0 to Utopia 1.0 compatibility.
277*53ee8cc1Swenshuai.xi
278*53ee8cc1Swenshuai.xi void* pu32ACEInst = NULL;
279*53ee8cc1Swenshuai.xi void* pu32ACERes[E_ACE_POOL_ID_MAX];
280*53ee8cc1Swenshuai.xi
281*53ee8cc1Swenshuai.xi void* pu32ACE_XCInst = NULL;
282*53ee8cc1Swenshuai.xi
MDrv_ACE_Get_Semaphore(void * pInstance)283*53ee8cc1Swenshuai.xi MS_U32 MDrv_ACE_Get_Semaphore(void *pInstance)
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi MS_U32 u32Return = UTOPIA_STATUS_FAIL;
286*53ee8cc1Swenshuai.xi
287*53ee8cc1Swenshuai.xi if (pInstance == NULL)
288*53ee8cc1Swenshuai.xi {
289*53ee8cc1Swenshuai.xi printf("[%s,%5d]No instance existed, please get an instance by calling MApi_XC_Init() first\n",__FUNCTION__,__LINE__);
290*53ee8cc1Swenshuai.xi return u32Return;
291*53ee8cc1Swenshuai.xi }
292*53ee8cc1Swenshuai.xi
293*53ee8cc1Swenshuai.xi ACE_INSTANCE_PRIVATE *psACEInstPri = NULL;
294*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psACEInstPri);
295*53ee8cc1Swenshuai.xi
296*53ee8cc1Swenshuai.xi if (psACEInstPri->u32DeviceID >= E_ACE_POOL_ID_MAX)
297*53ee8cc1Swenshuai.xi {
298*53ee8cc1Swenshuai.xi printf("[%s,%5d] Unknown ACE Pool ID\n",__func__, __LINE__);
299*53ee8cc1Swenshuai.xi return u32Return;
300*53ee8cc1Swenshuai.xi }
301*53ee8cc1Swenshuai.xi
302*53ee8cc1Swenshuai.xi void* pModule = NULL;
303*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
304*53ee8cc1Swenshuai.xi if(UtopiaResourceObtain(pModule, psACEInstPri->u32DeviceID, &pu32ACERes[psACEInstPri->u32DeviceID]) != UTOPIA_STATUS_SUCCESS)
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi printf("UtopiaResourceObtain fail\n");
307*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_ERR_RESOURCE;
308*53ee8cc1Swenshuai.xi }
309*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_SUCCESS;
310*53ee8cc1Swenshuai.xi return u32Return;
311*53ee8cc1Swenshuai.xi }
312*53ee8cc1Swenshuai.xi
MDrv_ACE_Release_Semaphore(void * pInstance)313*53ee8cc1Swenshuai.xi MS_U32 MDrv_ACE_Release_Semaphore(void *pInstance)
314*53ee8cc1Swenshuai.xi {
315*53ee8cc1Swenshuai.xi MS_U32 u32Return = UTOPIA_STATUS_FAIL;
316*53ee8cc1Swenshuai.xi
317*53ee8cc1Swenshuai.xi ACE_INSTANCE_PRIVATE *psACEInstPri = NULL;
318*53ee8cc1Swenshuai.xi UtopiaInstanceGetPrivate(pInstance, (void**)&psACEInstPri);
319*53ee8cc1Swenshuai.xi if (psACEInstPri->u32DeviceID >= E_ACE_POOL_ID_MAX)
320*53ee8cc1Swenshuai.xi {
321*53ee8cc1Swenshuai.xi printf("[%s,%5d] Unknown ACE Pool ID\n",__func__, __LINE__);
322*53ee8cc1Swenshuai.xi return u32Return;
323*53ee8cc1Swenshuai.xi }
324*53ee8cc1Swenshuai.xi
325*53ee8cc1Swenshuai.xi u32Return = UtopiaResourceRelease(pu32ACERes[psACEInstPri->u32DeviceID]);
326*53ee8cc1Swenshuai.xi return u32Return;
327*53ee8cc1Swenshuai.xi }
328*53ee8cc1Swenshuai.xi
329*53ee8cc1Swenshuai.xi
330*53ee8cc1Swenshuai.xi //******************************************************************************
331*53ee8cc1Swenshuai.xi ///-initialize ACE
332*53ee8cc1Swenshuai.xi //*************************************************************************
333*53ee8cc1Swenshuai.xi
_MApi_XC_ACE_Init_WithoutCreateMutex(void * pInstance,XC_ACE_InitData * pstXC_ACE_InitData,MS_BOOL bSkipInitVar)334*53ee8cc1Swenshuai.xi static MS_BOOL _MApi_XC_ACE_Init_WithoutCreateMutex(void *pInstance, XC_ACE_InitData *pstXC_ACE_InitData, MS_BOOL bSkipInitVar)
335*53ee8cc1Swenshuai.xi {
336*53ee8cc1Swenshuai.xi MS_S16 s16HShiftStep = 0;
337*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
338*53ee8cc1Swenshuai.xi
339*53ee8cc1Swenshuai.xi if(pstXC_ACE_InitData->S16ColorCorrectionMatrix == NULL ||
340*53ee8cc1Swenshuai.xi pstXC_ACE_InitData->S16RGB == NULL)
341*53ee8cc1Swenshuai.xi {
342*53ee8cc1Swenshuai.xi return FALSE;
343*53ee8cc1Swenshuai.xi }
344*53ee8cc1Swenshuai.xi else
345*53ee8cc1Swenshuai.xi {
346*53ee8cc1Swenshuai.xi //STR case can not set var again
347*53ee8cc1Swenshuai.xi if(!bSkipInitVar)
348*53ee8cc1Swenshuai.xi MDrv_ACE_Init(pInstance, pstXC_ACE_InitData->eWindow, pstXC_ACE_InitData->S16ColorCorrectionMatrix, pstXC_ACE_InitData->S16RGB );
349*53ee8cc1Swenshuai.xi }
350*53ee8cc1Swenshuai.xi MDrv_ACE_SetColorCorrectionTable(pInstance, pstXC_ACE_InitData->eWindow);
351*53ee8cc1Swenshuai.xi MDrv_ACE_SetPCsRGBTable(pInstance, pstXC_ACE_InitData->eWindow);
352*53ee8cc1Swenshuai.xi
353*53ee8cc1Swenshuai.xi if(pstXC_ACE_InitData->bMWE_Enable)
354*53ee8cc1Swenshuai.xi {
355*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
356*53ee8cc1Swenshuai.xi
357*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWEinit(pInstance, pstXC_ACE_InitData->u16MWEHstart, pstXC_ACE_InitData->u16MWEVstart, pstXC_ACE_InitData->u16MWEWidth, pstXC_ACE_InitData->u16MWEHeight);
358*53ee8cc1Swenshuai.xi
359*53ee8cc1Swenshuai.xi gMWERect.Xpos = 0;
360*53ee8cc1Swenshuai.xi gMWERect.Ypos = 0;
361*53ee8cc1Swenshuai.xi //for fix H shift step when Display is 1/2.
362*53ee8cc1Swenshuai.xi s16HShiftStep = g_XC_ACE_InitData.u16MWE_Disp_Width - g_XC_ACE_InitData.u16MWEWidth;
363*53ee8cc1Swenshuai.xi
364*53ee8cc1Swenshuai.xi //w and h size
365*53ee8cc1Swenshuai.xi if(_enMirrorMode == E_XC_ACE_MWE_MIRROR_HV)
366*53ee8cc1Swenshuai.xi {
367*53ee8cc1Swenshuai.xi //for fix screen shift function in contrast expander function
368*53ee8cc1Swenshuai.xi if((abs(g_XC_ACE_InitData.u16MWE_Disp_Width - g_XC_ACE_InitData.u16MWEWidth)) <= 10)
369*53ee8cc1Swenshuai.xi {
370*53ee8cc1Swenshuai.xi if (g_XC_ACE_InitData.u16MWE_Disp_Hstart == 0)
371*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWEWidth/2;
372*53ee8cc1Swenshuai.xi else
373*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWEWidth/2 + s16HShiftStep;
374*53ee8cc1Swenshuai.xi }
375*53ee8cc1Swenshuai.xi else
376*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWE_Disp_Width/2;
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi else
379*53ee8cc1Swenshuai.xi {
380*53ee8cc1Swenshuai.xi //for fix screen shift function in contrast expander function
381*53ee8cc1Swenshuai.xi if((abs(g_XC_ACE_InitData.u16MWE_Disp_Width - g_XC_ACE_InitData.u16MWEWidth)) <= 10)
382*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWEWidth/2 + s16HShiftStep;
383*53ee8cc1Swenshuai.xi else
384*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWE_Disp_Width/2;
385*53ee8cc1Swenshuai.xi }
386*53ee8cc1Swenshuai.xi
387*53ee8cc1Swenshuai.xi gMWERect.Ysize = g_XC_ACE_InitData.u16MWE_Disp_Height;
388*53ee8cc1Swenshuai.xi
389*53ee8cc1Swenshuai.xi //x and y start position
390*53ee8cc1Swenshuai.xi if(_enMirrorMode == E_XC_ACE_MWE_MIRROR_NORMAL || _enMirrorMode == E_XC_ACE_MWE_MIRROR_V_ONLY)
391*53ee8cc1Swenshuai.xi {
392*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWE_Disp_Vstart+g_XC_ACE_InitData.u16MWE_Disp_Height - gMWERect.Ysize;
393*53ee8cc1Swenshuai.xi //for patch 4:3 in contrast expander function
394*53ee8cc1Swenshuai.xi if (g_XC_ACE_InitData.u16MWEWidth > g_XC_ACE_InitData.u16MWE_Disp_Hstart)
395*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWEWidth/2;
396*53ee8cc1Swenshuai.xi else
397*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWE_Disp_Hstart + g_XC_ACE_InitData.u16MWEWidth/2;
398*53ee8cc1Swenshuai.xi }
399*53ee8cc1Swenshuai.xi else if(_enMirrorMode == E_XC_ACE_MWE_MIRROR_HV)
400*53ee8cc1Swenshuai.xi {
401*53ee8cc1Swenshuai.xi
402*53ee8cc1Swenshuai.xi if( g_XC_ACE_InitData.u16MWEWidth > ( g_XC_ACE_InitData.u16MWE_Disp_Hstart + g_XC_ACE_InitData.u16MWE_Disp_Width) )
403*53ee8cc1Swenshuai.xi {
404*53ee8cc1Swenshuai.xi //for patch 4:3 in contrast expander function
405*53ee8cc1Swenshuai.xi if (g_XC_ACE_InitData.u16MWEWidth > g_XC_ACE_InitData.u16MWE_Disp_Hstart)
406*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWEWidth - ( gMWERect.Xpos + g_XC_ACE_InitData.u16MWE_Disp_Width ) - g_XC_ACE_InitData.u16MWE_Disp_Hstart;
407*53ee8cc1Swenshuai.xi else
408*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWEWidth - ( gMWERect.Xpos + g_XC_ACE_InitData.u16MWE_Disp_Width );
409*53ee8cc1Swenshuai.xi }
410*53ee8cc1Swenshuai.xi else
411*53ee8cc1Swenshuai.xi {
412*53ee8cc1Swenshuai.xi gMWERect.Xpos = 0;
413*53ee8cc1Swenshuai.xi }
414*53ee8cc1Swenshuai.xi
415*53ee8cc1Swenshuai.xi if( g_XC_ACE_InitData.u16MWEHeight > ( g_XC_ACE_InitData.u16MWE_Disp_Vstart + g_XC_ACE_InitData.u16MWE_Disp_Height) )
416*53ee8cc1Swenshuai.xi {
417*53ee8cc1Swenshuai.xi //for patch smart view in contrast expander function
418*53ee8cc1Swenshuai.xi if ((g_XC_ACE_InitData.u16MWE_Disp_Vstart != 0) && (g_XC_ACE_InitData.u16MWE_Disp_Height != g_XC_ACE_InitData.u16MWEHeight))
419*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWEHeight- ( gMWERect.Ypos + g_XC_ACE_InitData.u16MWE_Disp_Height ) - g_XC_ACE_InitData.u16MWE_Disp_Vstart;
420*53ee8cc1Swenshuai.xi else
421*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWEHeight - ( gMWERect.Ypos + g_XC_ACE_InitData.u16MWE_Disp_Height );
422*53ee8cc1Swenshuai.xi }
423*53ee8cc1Swenshuai.xi else
424*53ee8cc1Swenshuai.xi {
425*53ee8cc1Swenshuai.xi gMWERect.Ypos = 0;
426*53ee8cc1Swenshuai.xi }
427*53ee8cc1Swenshuai.xi }
428*53ee8cc1Swenshuai.xi else
429*53ee8cc1Swenshuai.xi {
430*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWE_Disp_Hstart+g_XC_ACE_InitData.u16MWE_Disp_Width - gMWERect.Xsize;
431*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWE_Disp_Vstart+g_XC_ACE_InitData.u16MWE_Disp_Height - gMWERect.Ysize;
432*53ee8cc1Swenshuai.xi }
433*53ee8cc1Swenshuai.xi
434*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWESetWin(pInstance, &gMWERect);
435*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWESetBorder(pInstance, SUB_WINDOW, ENABLE, MWE_BORDER_COLOR_BLUE,
436*53ee8cc1Swenshuai.xi 0x02, 0x11, 0x11, 0x11);
437*53ee8cc1Swenshuai.xi
438*53ee8cc1Swenshuai.xi MDrv_XC_SetMWEStatus(pInstance, FALSE);
439*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWEEnable(pInstance, FALSE, _bMWESkipDriverSetting);
440*53ee8cc1Swenshuai.xi
441*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
442*53ee8cc1Swenshuai.xi }
443*53ee8cc1Swenshuai.xi
444*53ee8cc1Swenshuai.xi return TRUE;
445*53ee8cc1Swenshuai.xi }
446*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Init_U2(void * pInstance,XC_ACE_InitData * pstXC_ACE_InitData,MS_U32 u32InitDataLen)447*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Init_U2(void *pInstance, XC_ACE_InitData *pstXC_ACE_InitData, MS_U32 u32InitDataLen)
448*53ee8cc1Swenshuai.xi {
449*53ee8cc1Swenshuai.xi MS_PHY u32NonPMBankSize;
450*53ee8cc1Swenshuai.xi MS_VIRT ptrACERiuBaseAddr = 0;
451*53ee8cc1Swenshuai.xi char word[] = {"_ACE_Mutex"};
452*53ee8cc1Swenshuai.xi MS_BOOL bRet = TRUE;
453*53ee8cc1Swenshuai.xi //if(u32InitDataLen != sizeof(XC_ACE_InitData) || pstXC_ACE_InitData == NULL)
454*53ee8cc1Swenshuai.xi //{
455*53ee8cc1Swenshuai.xi // return FALSE;
456*53ee8cc1Swenshuai.xi //}
457*53ee8cc1Swenshuai.xi
458*53ee8cc1Swenshuai.xi #if 0
459*53ee8cc1Swenshuai.xi if (_s32XC_ACEMutex != -1)
460*53ee8cc1Swenshuai.xi {
461*53ee8cc1Swenshuai.xi (printf("[MAPI ACE][%06d] Initialization more than once\n", __LINE__));
462*53ee8cc1Swenshuai.xi return FALSE;
463*53ee8cc1Swenshuai.xi }
464*53ee8cc1Swenshuai.xi
465*53ee8cc1Swenshuai.xi _s32XC_ACEMutex = MsOS_CreateMutex(E_MSOS_FIFO, word, MSOS_PROCESS_SHARED);
466*53ee8cc1Swenshuai.xi if (_s32XC_ACEMutex == -1)
467*53ee8cc1Swenshuai.xi {
468*53ee8cc1Swenshuai.xi //(printf("[MAPI ACE][%06d] create mutex fail\n", __LINE__));
469*53ee8cc1Swenshuai.xi return FALSE;
470*53ee8cc1Swenshuai.xi }
471*53ee8cc1Swenshuai.xi #else
472*53ee8cc1Swenshuai.xi if (_s32XC_ACEMutex == -1)
473*53ee8cc1Swenshuai.xi {
474*53ee8cc1Swenshuai.xi _s32XC_ACEMutex = MsOS_CreateMutex(E_MSOS_FIFO, word, MSOS_PROCESS_SHARED);
475*53ee8cc1Swenshuai.xi if (_s32XC_ACEMutex == -1)
476*53ee8cc1Swenshuai.xi {
477*53ee8cc1Swenshuai.xi (printf("[MAPI ACE][%06d] create mutex fail\n", __LINE__));
478*53ee8cc1Swenshuai.xi return FALSE;
479*53ee8cc1Swenshuai.xi }
480*53ee8cc1Swenshuai.xi }
481*53ee8cc1Swenshuai.xi #endif
482*53ee8cc1Swenshuai.xi
483*53ee8cc1Swenshuai.xi // get MMIO base
484*53ee8cc1Swenshuai.xi if(MDrv_MMIO_GetBASE( &ptrACERiuBaseAddr, &u32NonPMBankSize, MS_MODULE_PM ) != TRUE)
485*53ee8cc1Swenshuai.xi {
486*53ee8cc1Swenshuai.xi //OS_DELETE_MUTEX(_s32ACEMutex);
487*53ee8cc1Swenshuai.xi //PNL_ASSERT(0, "%s\n", "Get base address failed\n");
488*53ee8cc1Swenshuai.xi //(printf("XC_ACE GetBase failed\n"));
489*53ee8cc1Swenshuai.xi return FALSE;
490*53ee8cc1Swenshuai.xi }
491*53ee8cc1Swenshuai.xi else
492*53ee8cc1Swenshuai.xi {
493*53ee8cc1Swenshuai.xi }
494*53ee8cc1Swenshuai.xi MDrv_ACE_init_riu_base( ptrACERiuBaseAddr);
495*53ee8cc1Swenshuai.xi
496*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
497*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
498*53ee8cc1Swenshuai.xi
499*53ee8cc1Swenshuai.xi // MWE init start
500*53ee8cc1Swenshuai.xi memcpy(&g_XC_ACE_InitData, pstXC_ACE_InitData, u32InitDataLen);
501*53ee8cc1Swenshuai.xi _bMWESkipDriverSetting = FALSE;
502*53ee8cc1Swenshuai.xi
503*53ee8cc1Swenshuai.xi bRet = _MApi_XC_ACE_Init_WithoutCreateMutex(pInstance, &g_XC_ACE_InitData, FALSE);
504*53ee8cc1Swenshuai.xi g_bACEModuleInited[pstXC_ACE_InitData->eWindow] = TRUE;
505*53ee8cc1Swenshuai.xi
506*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
507*53ee8cc1Swenshuai.xi
508*53ee8cc1Swenshuai.xi return bRet;
509*53ee8cc1Swenshuai.xi }
510*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Init(XC_ACE_InitData * pstXC_ACE_InitData,MS_U32 u32InitDataLen)511*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Init(XC_ACE_InitData *pstXC_ACE_InitData, MS_U32 u32InitDataLen)
512*53ee8cc1Swenshuai.xi {
513*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
514*53ee8cc1Swenshuai.xi {
515*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_ACE, &pu32ACEInst, 0, NULL) != UTOPIA_STATUS_SUCCESS)
516*53ee8cc1Swenshuai.xi {
517*53ee8cc1Swenshuai.xi printf("UtopiaOpen ACE failed\n");
518*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
519*53ee8cc1Swenshuai.xi }
520*53ee8cc1Swenshuai.xi }
521*53ee8cc1Swenshuai.xi if (pu32ACE_XCInst == NULL)
522*53ee8cc1Swenshuai.xi {
523*53ee8cc1Swenshuai.xi XC_INSTANT_ATTRIBUTE stXCInstantAttribute;
524*53ee8cc1Swenshuai.xi memset(&stXCInstantAttribute, 0, sizeof(stXCInstantAttribute));
525*53ee8cc1Swenshuai.xi stXCInstantAttribute.u32DeviceID = 0;
526*53ee8cc1Swenshuai.xi stXCInstantAttribute.eXCType = E_XC_INSTANT_TYPE_ACE;
527*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_XC, &pu32ACE_XCInst, 0, &stXCInstantAttribute) != UTOPIA_STATUS_SUCCESS)
528*53ee8cc1Swenshuai.xi {
529*53ee8cc1Swenshuai.xi printf("UtopiaOpen pu32ACE_XCInst failed\n");
530*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
531*53ee8cc1Swenshuai.xi }
532*53ee8cc1Swenshuai.xi }
533*53ee8cc1Swenshuai.xi
534*53ee8cc1Swenshuai.xi stACE_Init ACEArgs;
535*53ee8cc1Swenshuai.xi ACEArgs.pstXC_ACE_InitData = pstXC_ACE_InitData;
536*53ee8cc1Swenshuai.xi ACEArgs.u32InitDataLen = u32InitDataLen;
537*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
538*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_INIT, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
539*53ee8cc1Swenshuai.xi {
540*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
541*53ee8cc1Swenshuai.xi return FALSE;
542*53ee8cc1Swenshuai.xi }
543*53ee8cc1Swenshuai.xi else
544*53ee8cc1Swenshuai.xi {
545*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
546*53ee8cc1Swenshuai.xi }
547*53ee8cc1Swenshuai.xi }
548*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Exit_U2(void * pInstance)549*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Exit_U2(void *pInstance)
550*53ee8cc1Swenshuai.xi {
551*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
552*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
553*53ee8cc1Swenshuai.xi memset(&g_XC_ACE_InitData, 0 , sizeof(XC_ACE_InitData) );
554*53ee8cc1Swenshuai.xi _bMWESkipDriverSetting = FALSE;
555*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
556*53ee8cc1Swenshuai.xi //_s32XC_ACEMutex = -1;
557*53ee8cc1Swenshuai.xi MsOS_DeleteMutex(_s32XC_ACEMutex);
558*53ee8cc1Swenshuai.xi _s32XC_ACEMutex = -1;
559*53ee8cc1Swenshuai.xi return TRUE;
560*53ee8cc1Swenshuai.xi }
561*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Exit(void)562*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Exit(void)
563*53ee8cc1Swenshuai.xi {
564*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
565*53ee8cc1Swenshuai.xi {
566*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
567*53ee8cc1Swenshuai.xi return FALSE;
568*53ee8cc1Swenshuai.xi }
569*53ee8cc1Swenshuai.xi
570*53ee8cc1Swenshuai.xi stACE_Exit ACEArgs;
571*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
572*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_EXIT, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
573*53ee8cc1Swenshuai.xi {
574*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
575*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
576*53ee8cc1Swenshuai.xi }
577*53ee8cc1Swenshuai.xi
578*53ee8cc1Swenshuai.xi if(UtopiaClose(pu32ACEInst) != UTOPIA_STATUS_SUCCESS)
579*53ee8cc1Swenshuai.xi {
580*53ee8cc1Swenshuai.xi printf("UtopiaClose ACE failed\n");
581*53ee8cc1Swenshuai.xi return FALSE;
582*53ee8cc1Swenshuai.xi }
583*53ee8cc1Swenshuai.xi pu32ACEInst = NULL;
584*53ee8cc1Swenshuai.xi
585*53ee8cc1Swenshuai.xi if(UtopiaClose(pu32ACE_XCInst) != UTOPIA_STATUS_SUCCESS)
586*53ee8cc1Swenshuai.xi {
587*53ee8cc1Swenshuai.xi printf("UtopiaClose ACE failed\n");
588*53ee8cc1Swenshuai.xi return FALSE;
589*53ee8cc1Swenshuai.xi }
590*53ee8cc1Swenshuai.xi pu32ACE_XCInst = NULL;
591*53ee8cc1Swenshuai.xi
592*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
593*53ee8cc1Swenshuai.xi }
594*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DMS_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bisATV)595*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DMS_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bisATV)
596*53ee8cc1Swenshuai.xi {
597*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
598*53ee8cc1Swenshuai.xi MDrv_ACE_DMS(pInstance, eWindow, bisATV);
599*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DMS(MS_BOOL eWindow,MS_BOOL bisATV)602*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DMS(MS_BOOL eWindow, MS_BOOL bisATV)
603*53ee8cc1Swenshuai.xi {
604*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
605*53ee8cc1Swenshuai.xi {
606*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
607*53ee8cc1Swenshuai.xi return;
608*53ee8cc1Swenshuai.xi }
609*53ee8cc1Swenshuai.xi
610*53ee8cc1Swenshuai.xi stACE_DMS ACEArgs;
611*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
612*53ee8cc1Swenshuai.xi ACEArgs.bisATV = bisATV;
613*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DMS, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
614*53ee8cc1Swenshuai.xi {
615*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
616*53ee8cc1Swenshuai.xi }
617*53ee8cc1Swenshuai.xi return;
618*53ee8cc1Swenshuai.xi }
619*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetPCYUV2RGB_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bEnable)620*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetPCYUV2RGB_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bEnable)
621*53ee8cc1Swenshuai.xi {
622*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
623*53ee8cc1Swenshuai.xi /*
624*53ee8cc1Swenshuai.xi ** Save setwindow info for str
625*53ee8cc1Swenshuai.xi */
626*53ee8cc1Swenshuai.xi void *pModule;
627*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
628*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
629*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
630*53ee8cc1Swenshuai.xi pACEResourceStr->bSetPCYUV2RGB_Enable = bEnable;
631*53ee8cc1Swenshuai.xi #endif
632*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
633*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
634*53ee8cc1Swenshuai.xi MDrv_ACE_PCForceYUVtoRGB(pInstance, eWindow , bEnable);
635*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
636*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
637*53ee8cc1Swenshuai.xi }
638*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetPCYUV2RGB(MS_BOOL eWindow,MS_BOOL bEnable)639*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetPCYUV2RGB(MS_BOOL eWindow, MS_BOOL bEnable)
640*53ee8cc1Swenshuai.xi {
641*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
642*53ee8cc1Swenshuai.xi {
643*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
644*53ee8cc1Swenshuai.xi return;
645*53ee8cc1Swenshuai.xi }
646*53ee8cc1Swenshuai.xi
647*53ee8cc1Swenshuai.xi stACE_SetPCYUV2RGB ACEArgs;
648*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
649*53ee8cc1Swenshuai.xi ACEArgs.bEnable = bEnable;
650*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETPCYUV2RGB, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
651*53ee8cc1Swenshuai.xi {
652*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
653*53ee8cc1Swenshuai.xi }
654*53ee8cc1Swenshuai.xi return;
655*53ee8cc1Swenshuai.xi }
656*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SelectYUVtoRGBMatrix_U2(void * pInstance,MS_BOOL eWindow,MS_U8 ucMatrix,MS_S16 * psUserYUVtoRGBMatrix)657*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SelectYUVtoRGBMatrix_U2(void *pInstance, MS_BOOL eWindow, MS_U8 ucMatrix, MS_S16* psUserYUVtoRGBMatrix)
658*53ee8cc1Swenshuai.xi {
659*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
660*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
661*53ee8cc1Swenshuai.xi MDrv_ACE_SelectYUVtoRGBMatrix(pInstance, eWindow, ucMatrix, psUserYUVtoRGBMatrix );
662*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
663*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
664*53ee8cc1Swenshuai.xi }
665*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SelectYUVtoRGBMatrix(MS_BOOL eWindow,MS_U8 ucMatrix,MS_S16 * psUserYUVtoRGBMatrix)666*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SelectYUVtoRGBMatrix(MS_BOOL eWindow, MS_U8 ucMatrix, MS_S16* psUserYUVtoRGBMatrix)
667*53ee8cc1Swenshuai.xi {
668*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
669*53ee8cc1Swenshuai.xi {
670*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
671*53ee8cc1Swenshuai.xi return;
672*53ee8cc1Swenshuai.xi }
673*53ee8cc1Swenshuai.xi
674*53ee8cc1Swenshuai.xi stACE_SelectYUVtoRGBMatrix ACEArgs;
675*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
676*53ee8cc1Swenshuai.xi ACEArgs.ucMatrix = ucMatrix;
677*53ee8cc1Swenshuai.xi ACEArgs.psUserYUVtoRGBMatrix = psUserYUVtoRGBMatrix;
678*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SELECTYUVTORGBMATRIX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
679*53ee8cc1Swenshuai.xi {
680*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
681*53ee8cc1Swenshuai.xi }
682*53ee8cc1Swenshuai.xi return;
683*53ee8cc1Swenshuai.xi }
684*53ee8cc1Swenshuai.xi
685*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetColorCorrectionTable_U2(void * pInstance,MS_BOOL bScalerWin)686*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetColorCorrectionTable_U2(void *pInstance, MS_BOOL bScalerWin)
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
689*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
690*53ee8cc1Swenshuai.xi MDrv_ACE_SetColorCorrectionTable(pInstance, bScalerWin );
691*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
692*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
693*53ee8cc1Swenshuai.xi }
694*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetColorCorrectionTable(MS_BOOL bScalerWin)695*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetColorCorrectionTable(MS_BOOL bScalerWin)
696*53ee8cc1Swenshuai.xi {
697*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
698*53ee8cc1Swenshuai.xi {
699*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
700*53ee8cc1Swenshuai.xi return;
701*53ee8cc1Swenshuai.xi }
702*53ee8cc1Swenshuai.xi
703*53ee8cc1Swenshuai.xi stACE_SetColorCorrectionTable ACEArgs;
704*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
705*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETCOLORCORRECTIONTABLE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
706*53ee8cc1Swenshuai.xi {
707*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
708*53ee8cc1Swenshuai.xi }
709*53ee8cc1Swenshuai.xi return;
710*53ee8cc1Swenshuai.xi }
711*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetPCsRGBTable_U2(void * pInstance,MS_BOOL bScalerWin)712*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetPCsRGBTable_U2(void *pInstance, MS_BOOL bScalerWin)
713*53ee8cc1Swenshuai.xi {
714*53ee8cc1Swenshuai.xi MS_BOOL bSettingByCFD = FALSE;
715*53ee8cc1Swenshuai.xi #if defined(UFO_XC_HDR) && defined(UFO_XC_HDR_VERSION) && (UFO_XC_HDR_VERSION == 2) && !defined(ACE_NOT_IN_KERNEL)
716*53ee8cc1Swenshuai.xi XC_HDR_SUPPORTED_CAPS stHdrSupportedCaps;
717*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_DOLBY;
718*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
719*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
720*53ee8cc1Swenshuai.xi bSettingByCFD = stHdrSupportedCaps.bSupported;
721*53ee8cc1Swenshuai.xi
722*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_OPEN;
723*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
724*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
725*53ee8cc1Swenshuai.xi bSettingByCFD |= stHdrSupportedCaps.bSupported;
726*53ee8cc1Swenshuai.xi
727*53ee8cc1Swenshuai.xi #endif
728*53ee8cc1Swenshuai.xi
729*53ee8cc1Swenshuai.xi if (bSettingByCFD == FALSE)
730*53ee8cc1Swenshuai.xi {
731*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
732*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
733*53ee8cc1Swenshuai.xi MDrv_ACE_SetPCsRGBTable(pInstance, bScalerWin);
734*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
735*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
736*53ee8cc1Swenshuai.xi }
737*53ee8cc1Swenshuai.xi }
738*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetPCsRGBTable(MS_BOOL bScalerWin)739*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetPCsRGBTable(MS_BOOL bScalerWin)
740*53ee8cc1Swenshuai.xi {
741*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
742*53ee8cc1Swenshuai.xi {
743*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
744*53ee8cc1Swenshuai.xi return;
745*53ee8cc1Swenshuai.xi }
746*53ee8cc1Swenshuai.xi
747*53ee8cc1Swenshuai.xi stACE_SetPCsRGBTable ACEArgs;
748*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
749*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETPCSRGBTABLE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
750*53ee8cc1Swenshuai.xi {
751*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
752*53ee8cc1Swenshuai.xi }
753*53ee8cc1Swenshuai.xi return;
754*53ee8cc1Swenshuai.xi }
755*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetColorMatrix_U2(void * pInstance,MS_BOOL eWindow,MS_U16 * pu16Matrix)756*53ee8cc1Swenshuai.xi void MApi_XC_ACE_GetColorMatrix_U2(void *pInstance, MS_BOOL eWindow, MS_U16* pu16Matrix)
757*53ee8cc1Swenshuai.xi {
758*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
759*53ee8cc1Swenshuai.xi MDrv_ACE_GetColorMatrix(pInstance, eWindow, pu16Matrix);
760*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
761*53ee8cc1Swenshuai.xi }
762*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetColorMatrix(MS_BOOL eWindow,MS_U16 * pu16Matrix)763*53ee8cc1Swenshuai.xi void MApi_XC_ACE_GetColorMatrix(MS_BOOL eWindow, MS_U16* pu16Matrix)
764*53ee8cc1Swenshuai.xi {
765*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
766*53ee8cc1Swenshuai.xi {
767*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
768*53ee8cc1Swenshuai.xi return;
769*53ee8cc1Swenshuai.xi }
770*53ee8cc1Swenshuai.xi
771*53ee8cc1Swenshuai.xi stACE_ColorMatrix ACEArgs;
772*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
773*53ee8cc1Swenshuai.xi ACEArgs.pu16Matrix = pu16Matrix;
774*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_GETCOLORMATRIX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
775*53ee8cc1Swenshuai.xi {
776*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
777*53ee8cc1Swenshuai.xi }
778*53ee8cc1Swenshuai.xi return;
779*53ee8cc1Swenshuai.xi }
780*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetColorMatrix_U2(void * pInstance,MS_BOOL eWindow,MS_U16 * pu16Matrix)781*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetColorMatrix_U2(void *pInstance, MS_BOOL eWindow, MS_U16* pu16Matrix)
782*53ee8cc1Swenshuai.xi {
783*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
784*53ee8cc1Swenshuai.xi MDrv_ACE_SetColorMatrix(pInstance, eWindow, pu16Matrix);
785*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
786*53ee8cc1Swenshuai.xi }
787*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetColorMatrix(MS_BOOL eWindow,MS_U16 * pu16Matrix)788*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetColorMatrix( MS_BOOL eWindow, MS_U16* pu16Matrix)
789*53ee8cc1Swenshuai.xi {
790*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
793*53ee8cc1Swenshuai.xi return;
794*53ee8cc1Swenshuai.xi }
795*53ee8cc1Swenshuai.xi
796*53ee8cc1Swenshuai.xi stACE_ColorMatrix ACEArgs;
797*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
798*53ee8cc1Swenshuai.xi ACEArgs.pu16Matrix = pu16Matrix;
799*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETCOLORMATRIX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
800*53ee8cc1Swenshuai.xi {
801*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
802*53ee8cc1Swenshuai.xi }
803*53ee8cc1Swenshuai.xi return;
804*53ee8cc1Swenshuai.xi }
805*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetBypassColorMatrix_U2(void * pInstance,MS_BOOL bEnable)806*53ee8cc1Swenshuai.xi E_XC_ACE_RESULT MApi_XC_ACE_SetBypassColorMatrix_U2(void *pInstance, MS_BOOL bEnable)
807*53ee8cc1Swenshuai.xi {
808*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
809*53ee8cc1Swenshuai.xi MDrv_ACE_SetBypassColorMatrix(pInstance, bEnable );
810*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
811*53ee8cc1Swenshuai.xi return E_XC_ACE_OK;
812*53ee8cc1Swenshuai.xi }
813*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetBypassColorMatrix(MS_BOOL bEnable)814*53ee8cc1Swenshuai.xi E_XC_ACE_RESULT MApi_XC_ACE_SetBypassColorMatrix(MS_BOOL bEnable)
815*53ee8cc1Swenshuai.xi {
816*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
817*53ee8cc1Swenshuai.xi {
818*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_ACE, &pu32ACEInst, 0, NULL) != UTOPIA_STATUS_SUCCESS)
819*53ee8cc1Swenshuai.xi {
820*53ee8cc1Swenshuai.xi printf("UtopiaOpen ACE failed\n");
821*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
822*53ee8cc1Swenshuai.xi }
823*53ee8cc1Swenshuai.xi }
824*53ee8cc1Swenshuai.xi
825*53ee8cc1Swenshuai.xi stACE_SetBypassColorMatrix ACEArgs;
826*53ee8cc1Swenshuai.xi ACEArgs.bEnable = bEnable;
827*53ee8cc1Swenshuai.xi ACEArgs.eResult = E_XC_ACE_FAIL;
828*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETBYPASSCOLORMATRIX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
829*53ee8cc1Swenshuai.xi {
830*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
831*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
832*53ee8cc1Swenshuai.xi }
833*53ee8cc1Swenshuai.xi else
834*53ee8cc1Swenshuai.xi {
835*53ee8cc1Swenshuai.xi return ACEArgs.eResult;
836*53ee8cc1Swenshuai.xi }
837*53ee8cc1Swenshuai.xi }
838*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetIHC_U2(void * pInstance,MS_BOOL bScalerWin,XC_ACE_IHC_COLOR_TYPE eIHC,MS_U8 u8Val)839*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetIHC_U2(void *pInstance, MS_BOOL bScalerWin, XC_ACE_IHC_COLOR_TYPE eIHC, MS_U8 u8Val)
840*53ee8cc1Swenshuai.xi {
841*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
842*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
843*53ee8cc1Swenshuai.xi bRet = MDrv_ACE_SetIHC(pInstance, bScalerWin, eIHC, u8Val);
844*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
845*53ee8cc1Swenshuai.xi return bRet;
846*53ee8cc1Swenshuai.xi }
847*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetIHC(MS_BOOL bScalerWin,XC_ACE_IHC_COLOR_TYPE eIHC,MS_U8 u8Val)848*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetIHC(MS_BOOL bScalerWin, XC_ACE_IHC_COLOR_TYPE eIHC, MS_U8 u8Val)
849*53ee8cc1Swenshuai.xi {
850*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
851*53ee8cc1Swenshuai.xi {
852*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
853*53ee8cc1Swenshuai.xi return FALSE;
854*53ee8cc1Swenshuai.xi }
855*53ee8cc1Swenshuai.xi
856*53ee8cc1Swenshuai.xi stACE_SetIHC ACEArgs;
857*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
858*53ee8cc1Swenshuai.xi ACEArgs.eIHC = eIHC;
859*53ee8cc1Swenshuai.xi ACEArgs.u8Val = u8Val;
860*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
861*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETIHC, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
862*53ee8cc1Swenshuai.xi {
863*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
864*53ee8cc1Swenshuai.xi return FALSE;
865*53ee8cc1Swenshuai.xi }
866*53ee8cc1Swenshuai.xi else
867*53ee8cc1Swenshuai.xi {
868*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
869*53ee8cc1Swenshuai.xi }
870*53ee8cc1Swenshuai.xi }
871*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetICC_U2(void * pInstance,MS_BOOL bScalerWin,XC_ACE_ICC_COLOR_TYPE eICC,MS_U8 u8Val)872*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetICC_U2(void *pInstance, MS_BOOL bScalerWin, XC_ACE_ICC_COLOR_TYPE eICC, MS_U8 u8Val)
873*53ee8cc1Swenshuai.xi {
874*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
875*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
876*53ee8cc1Swenshuai.xi bRet = MDrv_ACE_SetICC(pInstance, bScalerWin, eICC, u8Val);
877*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
878*53ee8cc1Swenshuai.xi return bRet;
879*53ee8cc1Swenshuai.xi }
880*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetICC(MS_BOOL bScalerWin,XC_ACE_ICC_COLOR_TYPE eICC,MS_U8 u8Val)881*53ee8cc1Swenshuai.xi MS_BOOL SYMBOL_WEAK MApi_XC_ACE_SetICC(MS_BOOL bScalerWin, XC_ACE_ICC_COLOR_TYPE eICC, MS_U8 u8Val)
882*53ee8cc1Swenshuai.xi {
883*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
884*53ee8cc1Swenshuai.xi {
885*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
886*53ee8cc1Swenshuai.xi return FALSE;
887*53ee8cc1Swenshuai.xi }
888*53ee8cc1Swenshuai.xi
889*53ee8cc1Swenshuai.xi stACE_SetICC ACEArgs;
890*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
891*53ee8cc1Swenshuai.xi ACEArgs.eICC = eICC;
892*53ee8cc1Swenshuai.xi ACEArgs.u8Val = u8Val;
893*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
894*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETICC, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
895*53ee8cc1Swenshuai.xi {
896*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
897*53ee8cc1Swenshuai.xi return FALSE;
898*53ee8cc1Swenshuai.xi }
899*53ee8cc1Swenshuai.xi else
900*53ee8cc1Swenshuai.xi {
901*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
902*53ee8cc1Swenshuai.xi }
903*53ee8cc1Swenshuai.xi }
904*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetIBC_U2(void * pInstance,MS_BOOL bScalerWin,XC_ACE_IBC_COLOR_TYPE eIBC,MS_U8 u8Val)905*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetIBC_U2(void *pInstance, MS_BOOL bScalerWin, XC_ACE_IBC_COLOR_TYPE eIBC, MS_U8 u8Val)
906*53ee8cc1Swenshuai.xi {
907*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
908*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
909*53ee8cc1Swenshuai.xi bRet = MDrv_ACE_SetIBC(pInstance, bScalerWin, eIBC, u8Val);
910*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
911*53ee8cc1Swenshuai.xi return bRet;
912*53ee8cc1Swenshuai.xi }
913*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetIBC(MS_BOOL bScalerWin,XC_ACE_IBC_COLOR_TYPE eIBC,MS_U8 u8Val)914*53ee8cc1Swenshuai.xi MS_BOOL SYMBOL_WEAK MApi_XC_ACE_SetIBC(MS_BOOL bScalerWin, XC_ACE_IBC_COLOR_TYPE eIBC, MS_U8 u8Val)
915*53ee8cc1Swenshuai.xi {
916*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
917*53ee8cc1Swenshuai.xi {
918*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
919*53ee8cc1Swenshuai.xi return FALSE;
920*53ee8cc1Swenshuai.xi }
921*53ee8cc1Swenshuai.xi
922*53ee8cc1Swenshuai.xi stACE_SetIBC ACEArgs;
923*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
924*53ee8cc1Swenshuai.xi ACEArgs.eIBC = eIBC;
925*53ee8cc1Swenshuai.xi ACEArgs.u8Val = u8Val;
926*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
927*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETIBC, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
928*53ee8cc1Swenshuai.xi {
929*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
930*53ee8cc1Swenshuai.xi return FALSE;
931*53ee8cc1Swenshuai.xi }
932*53ee8cc1Swenshuai.xi else
933*53ee8cc1Swenshuai.xi {
934*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
935*53ee8cc1Swenshuai.xi }
936*53ee8cc1Swenshuai.xi }
937*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PatchDTGColorChecker_U2(void * pInstance,MS_U8 u8Mode)938*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PatchDTGColorChecker_U2(void *pInstance, MS_U8 u8Mode)
939*53ee8cc1Swenshuai.xi {
940*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
941*53ee8cc1Swenshuai.xi MDrv_ACE_PatchDTGColorChecker(pInstance, u8Mode);
942*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
943*53ee8cc1Swenshuai.xi }
944*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PatchDTGColorChecker(MS_U8 u8Mode)945*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PatchDTGColorChecker(MS_U8 u8Mode)
946*53ee8cc1Swenshuai.xi {
947*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
948*53ee8cc1Swenshuai.xi {
949*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
950*53ee8cc1Swenshuai.xi return;
951*53ee8cc1Swenshuai.xi }
952*53ee8cc1Swenshuai.xi
953*53ee8cc1Swenshuai.xi stACE_PatchDTGColorChecker ACEArgs;
954*53ee8cc1Swenshuai.xi ACEArgs.u8Mode = u8Mode;
955*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PATCHDTGCOLORCHECKER, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
956*53ee8cc1Swenshuai.xi {
957*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
958*53ee8cc1Swenshuai.xi }
959*53ee8cc1Swenshuai.xi return;
960*53ee8cc1Swenshuai.xi }
961*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetACEInfo_U2(void * pInstance,MS_BOOL bWindow,E_XC_ACE_INFOTYPE eXCACEInfoType)962*53ee8cc1Swenshuai.xi MS_U16 MApi_XC_ACE_GetACEInfo_U2(void *pInstance, MS_BOOL bWindow, E_XC_ACE_INFOTYPE eXCACEInfoType)
963*53ee8cc1Swenshuai.xi {
964*53ee8cc1Swenshuai.xi MS_U16 u16ACEinfo;
965*53ee8cc1Swenshuai.xi u16ACEinfo = eXCACEInfoType;
966*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
967*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
968*53ee8cc1Swenshuai.xi u16ACEinfo = MDrv_ACE_GetACEInfo(pInstance, bWindow, u16ACEinfo);
969*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
970*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
971*53ee8cc1Swenshuai.xi
972*53ee8cc1Swenshuai.xi return u16ACEinfo;
973*53ee8cc1Swenshuai.xi }
974*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetACEInfo(MS_BOOL bWindow,E_XC_ACE_INFOTYPE eXCACEInfoType)975*53ee8cc1Swenshuai.xi MS_U16 MApi_XC_ACE_GetACEInfo(MS_BOOL bWindow, E_XC_ACE_INFOTYPE eXCACEInfoType)
976*53ee8cc1Swenshuai.xi {
977*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
978*53ee8cc1Swenshuai.xi {
979*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
980*53ee8cc1Swenshuai.xi return 0;
981*53ee8cc1Swenshuai.xi }
982*53ee8cc1Swenshuai.xi
983*53ee8cc1Swenshuai.xi stACE_GetACEInfo ACEArgs;
984*53ee8cc1Swenshuai.xi ACEArgs.bWindow = bWindow;
985*53ee8cc1Swenshuai.xi ACEArgs.eXCACEInfoType = eXCACEInfoType;
986*53ee8cc1Swenshuai.xi ACEArgs.u16Return = 0;
987*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_GETACEINFO, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
988*53ee8cc1Swenshuai.xi {
989*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
990*53ee8cc1Swenshuai.xi return 0;
991*53ee8cc1Swenshuai.xi }
992*53ee8cc1Swenshuai.xi else
993*53ee8cc1Swenshuai.xi {
994*53ee8cc1Swenshuai.xi return ACEArgs.u16Return;
995*53ee8cc1Swenshuai.xi }
996*53ee8cc1Swenshuai.xi }
997*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetACEInfoEx_U2(void * pInstance,MS_BOOL bWindow,XC_ACE_InfoEx * pInfoEx)998*53ee8cc1Swenshuai.xi void MApi_XC_ACE_GetACEInfoEx_U2(void *pInstance, MS_BOOL bWindow, XC_ACE_InfoEx *pInfoEx)
999*53ee8cc1Swenshuai.xi {
1000*53ee8cc1Swenshuai.xi memset(pInfoEx, 0, sizeof(XC_ACE_InfoEx));
1001*53ee8cc1Swenshuai.xi
1002*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1003*53ee8cc1Swenshuai.xi
1004*53ee8cc1Swenshuai.xi if (MDrv_ACE_IsPostRGBGain(pInstance, bWindow))
1005*53ee8cc1Swenshuai.xi {
1006*53ee8cc1Swenshuai.xi pInfoEx->u32Mode |= ACE_INFOEX_MODE_POST_RGB_GAIN;
1007*53ee8cc1Swenshuai.xi }
1008*53ee8cc1Swenshuai.xi
1009*53ee8cc1Swenshuai.xi if (MDrv_ACE_IsPostRGBOffset(pInstance, bWindow))
1010*53ee8cc1Swenshuai.xi {
1011*53ee8cc1Swenshuai.xi pInfoEx->u32Mode |= ACE_INFOEX_MODE_POST_RGB_OFFSET;
1012*53ee8cc1Swenshuai.xi }
1013*53ee8cc1Swenshuai.xi
1014*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1015*53ee8cc1Swenshuai.xi }
1016*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetACEInfoEx(MS_BOOL bWindow,XC_ACE_InfoEx * pInfoEx)1017*53ee8cc1Swenshuai.xi void MApi_XC_ACE_GetACEInfoEx( MS_BOOL bWindow, XC_ACE_InfoEx *pInfoEx)
1018*53ee8cc1Swenshuai.xi {
1019*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1020*53ee8cc1Swenshuai.xi {
1021*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1022*53ee8cc1Swenshuai.xi return;
1023*53ee8cc1Swenshuai.xi }
1024*53ee8cc1Swenshuai.xi
1025*53ee8cc1Swenshuai.xi stACE_GetACEInfoEx ACEArgs;
1026*53ee8cc1Swenshuai.xi ACEArgs.bWindow = bWindow;
1027*53ee8cc1Swenshuai.xi ACEArgs.pInfoEx = pInfoEx;
1028*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_GETACEINFOEX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1029*53ee8cc1Swenshuai.xi {
1030*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1031*53ee8cc1Swenshuai.xi }
1032*53ee8cc1Swenshuai.xi return;
1033*53ee8cc1Swenshuai.xi }
1034*53ee8cc1Swenshuai.xi
1035*53ee8cc1Swenshuai.xi /********************************************************************************/
1036*53ee8cc1Swenshuai.xi /* msAPI_ACE_Ext.c */
1037*53ee8cc1Swenshuai.xi /********************************************************************************/
1038*53ee8cc1Swenshuai.xi
1039*53ee8cc1Swenshuai.xi /********************************************************************************/
1040*53ee8cc1Swenshuai.xi /* Functions */
1041*53ee8cc1Swenshuai.xi /********************************************************************************/
1042*53ee8cc1Swenshuai.xi
1043*53ee8cc1Swenshuai.xi
1044*53ee8cc1Swenshuai.xi /******************************************************************************/
1045*53ee8cc1Swenshuai.xi ///-This function will set up brightness for YPbPr and digital port
1046*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Window type
1047*53ee8cc1Swenshuai.xi ///@param u8Brightness_R \b IN: brightness R value
1048*53ee8cc1Swenshuai.xi ///@param u8Brightness_G \b IN: brightness G value
1049*53ee8cc1Swenshuai.xi ///@param u8Brightness_B \b IN: brightness B value
1050*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_XC_ACE_PicSetBrightness_U2(void * pInstance,MS_BOOL eWindow,MS_U8 u8Brightness_R,MS_U8 u8Brightness_G,MS_U8 u8Brightness_B)1051*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetBrightness_U2(void *pInstance, MS_BOOL eWindow, MS_U8 u8Brightness_R, MS_U8 u8Brightness_G, MS_U8 u8Brightness_B)
1052*53ee8cc1Swenshuai.xi {
1053*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1054*53ee8cc1Swenshuai.xi void *pModule;
1055*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1056*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
1057*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
1058*53ee8cc1Swenshuai.xi pACEResourceStr->u8Brightness_R = u8Brightness_R;
1059*53ee8cc1Swenshuai.xi pACEResourceStr->u8Brightness_G = u8Brightness_G;
1060*53ee8cc1Swenshuai.xi pACEResourceStr->u8Brightness_B = u8Brightness_B;
1061*53ee8cc1Swenshuai.xi #endif
1062*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1063*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1064*53ee8cc1Swenshuai.xi MDrv_ACE_SetBrightness(pInstance, eWindow, u8Brightness_R, u8Brightness_G, u8Brightness_B);
1065*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1066*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1067*53ee8cc1Swenshuai.xi }
1068*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetBrightness(MS_BOOL eWindow,MS_U8 u8Brightness_R,MS_U8 u8Brightness_G,MS_U8 u8Brightness_B)1069*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetBrightness( MS_BOOL eWindow, MS_U8 u8Brightness_R, MS_U8 u8Brightness_G, MS_U8 u8Brightness_B)
1070*53ee8cc1Swenshuai.xi {
1071*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1072*53ee8cc1Swenshuai.xi {
1073*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1074*53ee8cc1Swenshuai.xi return;
1075*53ee8cc1Swenshuai.xi }
1076*53ee8cc1Swenshuai.xi
1077*53ee8cc1Swenshuai.xi stACE_PicSetBrightness ACEArgs;
1078*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1079*53ee8cc1Swenshuai.xi ACEArgs.u8Brightness_R = u8Brightness_R;
1080*53ee8cc1Swenshuai.xi ACEArgs.u8Brightness_G = u8Brightness_G;
1081*53ee8cc1Swenshuai.xi ACEArgs.u8Brightness_B = u8Brightness_B;
1082*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETBRIGHTNESS, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1083*53ee8cc1Swenshuai.xi {
1084*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1085*53ee8cc1Swenshuai.xi }
1086*53ee8cc1Swenshuai.xi return;
1087*53ee8cc1Swenshuai.xi }
1088*53ee8cc1Swenshuai.xi
1089*53ee8cc1Swenshuai.xi /******************************************************************************/
1090*53ee8cc1Swenshuai.xi ///-This function will set up Precise brightness for YPbPr and digital port
1091*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Window type
1092*53ee8cc1Swenshuai.xi ///@param u16Brightness_R \b IN: brightness R value
1093*53ee8cc1Swenshuai.xi ///@param u16Brightness_G \b IN: brightness G value
1094*53ee8cc1Swenshuai.xi ///@param u16Brightness_B \b IN: brightness B value
1095*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_XC_ACE_PicSetBrightnessPrecise_U2(void * pInstance,MS_BOOL eWindow,MS_U16 u16Brightness_R,MS_U16 u16Brightness_G,MS_U16 u16Brightness_B)1096*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetBrightnessPrecise_U2(void *pInstance, MS_BOOL eWindow, MS_U16 u16Brightness_R, MS_U16 u16Brightness_G, MS_U16 u16Brightness_B)
1097*53ee8cc1Swenshuai.xi {
1098*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1099*53ee8cc1Swenshuai.xi MDrv_ACE_SetBrightnessPrecise(pInstance, eWindow, u16Brightness_R, u16Brightness_G, u16Brightness_B);
1100*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1101*53ee8cc1Swenshuai.xi }
1102*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetBrightnessPrecise(MS_BOOL eWindow,MS_U16 u16Brightness_R,MS_U16 u16Brightness_G,MS_U16 u16Brightness_B)1103*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetBrightnessPrecise(MS_BOOL eWindow, MS_U16 u16Brightness_R, MS_U16 u16Brightness_G, MS_U16 u16Brightness_B)
1104*53ee8cc1Swenshuai.xi {
1105*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1106*53ee8cc1Swenshuai.xi {
1107*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1108*53ee8cc1Swenshuai.xi return;
1109*53ee8cc1Swenshuai.xi }
1110*53ee8cc1Swenshuai.xi
1111*53ee8cc1Swenshuai.xi stACE_PicSetBrightnessPrecise ACEArgs;
1112*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1113*53ee8cc1Swenshuai.xi ACEArgs.u16Brightness_R = u16Brightness_R;
1114*53ee8cc1Swenshuai.xi ACEArgs.u16Brightness_G = u16Brightness_G;
1115*53ee8cc1Swenshuai.xi ACEArgs.u16Brightness_B = u16Brightness_B;
1116*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETBRIGHTNESSPRECISE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1117*53ee8cc1Swenshuai.xi {
1118*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1119*53ee8cc1Swenshuai.xi }
1120*53ee8cc1Swenshuai.xi return;
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi
1123*53ee8cc1Swenshuai.xi /******************************************************************************/
1124*53ee8cc1Swenshuai.xi ///-This function will set Pre Y Offset
1125*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Window type
1126*53ee8cc1Swenshuai.xi ///@param u8PreYOffset \b IN: Pre Y Offset value
1127*53ee8cc1Swenshuai.xi /// @return @ref MS_BOOL
1128*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_XC_ACE_PicSetPreYOffset_U2(void * pInstance,MS_BOOL eWindow,MS_U8 u8PreYOffset)1129*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_PicSetPreYOffset_U2(void *pInstance, MS_BOOL eWindow, MS_U8 u8PreYOffset)
1130*53ee8cc1Swenshuai.xi {
1131*53ee8cc1Swenshuai.xi MS_BOOL bResult = FALSE;
1132*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1133*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1134*53ee8cc1Swenshuai.xi bResult = MDrv_ACE_SetPreYOffset(pInstance, eWindow, u8PreYOffset);
1135*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1136*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1137*53ee8cc1Swenshuai.xi return bResult;
1138*53ee8cc1Swenshuai.xi }
1139*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetPreYOffset(MS_BOOL eWindow,MS_U8 u8PreYOffset)1140*53ee8cc1Swenshuai.xi E_XC_ACE_RESULT MApi_XC_ACE_PicSetPreYOffset(MS_BOOL eWindow, MS_U8 u8PreYOffset)
1141*53ee8cc1Swenshuai.xi {
1142*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1143*53ee8cc1Swenshuai.xi {
1144*53ee8cc1Swenshuai.xi printf("[%s]:ACE not initialized!\n", __FUNCTION__);
1145*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
1146*53ee8cc1Swenshuai.xi }
1147*53ee8cc1Swenshuai.xi
1148*53ee8cc1Swenshuai.xi stACE_PreYOffset stACEArgs;
1149*53ee8cc1Swenshuai.xi stACEArgs.eWindow = eWindow;
1150*53ee8cc1Swenshuai.xi stACEArgs.u8PreYOffset = u8PreYOffset;
1151*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSET_PRE_Y_OFFSET, (void*)&stACEArgs) != UTOPIA_STATUS_SUCCESS)
1152*53ee8cc1Swenshuai.xi {
1153*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1154*53ee8cc1Swenshuai.xi return E_XC_ACE_OBTAIN_RESOURCE_FAIL;
1155*53ee8cc1Swenshuai.xi }
1156*53ee8cc1Swenshuai.xi
1157*53ee8cc1Swenshuai.xi return E_XC_ACE_OK;
1158*53ee8cc1Swenshuai.xi }
1159*53ee8cc1Swenshuai.xi
1160*53ee8cc1Swenshuai.xi /******************************************************************************/
1161*53ee8cc1Swenshuai.xi ///-This function will get Pre Y Offset
1162*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Window type
1163*53ee8cc1Swenshuai.xi /// @return @ref MS_U8
1164*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_XC_ACE_PicGetPreYOffset_U2(void * pInstance,MS_BOOL eWindow)1165*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_PicGetPreYOffset_U2(void *pInstance, MS_BOOL eWindow)
1166*53ee8cc1Swenshuai.xi {
1167*53ee8cc1Swenshuai.xi MS_U8 u8PreYOffset = 0;
1168*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1169*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1170*53ee8cc1Swenshuai.xi u8PreYOffset = MDrv_ACE_GetPreYOffset(pInstance, eWindow);
1171*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1172*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1173*53ee8cc1Swenshuai.xi return u8PreYOffset;
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicGetPreYOffset(MS_BOOL eWindow)1176*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_PicGetPreYOffset(MS_BOOL eWindow)
1177*53ee8cc1Swenshuai.xi {
1178*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1179*53ee8cc1Swenshuai.xi {
1180*53ee8cc1Swenshuai.xi printf("[%s]:ACE not initialized!\n", __FUNCTION__);
1181*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
1182*53ee8cc1Swenshuai.xi }
1183*53ee8cc1Swenshuai.xi
1184*53ee8cc1Swenshuai.xi stACE_PreYOffset stACEArgs;
1185*53ee8cc1Swenshuai.xi stACEArgs.eWindow = eWindow;
1186*53ee8cc1Swenshuai.xi stACEArgs.u8PreYOffset = 0;
1187*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICGET_PRE_Y_OFFSET, (void*)&stACEArgs) != UTOPIA_STATUS_SUCCESS)
1188*53ee8cc1Swenshuai.xi {
1189*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1190*53ee8cc1Swenshuai.xi return E_XC_ACE_OBTAIN_RESOURCE_FAIL;
1191*53ee8cc1Swenshuai.xi }
1192*53ee8cc1Swenshuai.xi
1193*53ee8cc1Swenshuai.xi return stACEArgs.u8PreYOffset;
1194*53ee8cc1Swenshuai.xi
1195*53ee8cc1Swenshuai.xi }
1196*53ee8cc1Swenshuai.xi
1197*53ee8cc1Swenshuai.xi /******************************************************************************/
1198*53ee8cc1Swenshuai.xi //-Adjust sharpness
1199*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Window type
1200*53ee8cc1Swenshuai.xi ///@param u8Sharpness \b IN: sharpness value
1201*53ee8cc1Swenshuai.xi //- 0 -0x3f
1202*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_XC_ACE_PicSetSharpness_U2(void * pInstance,MS_BOOL eWindow,MS_U8 u8Sharpness)1203*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetSharpness_U2(void *pInstance, MS_BOOL eWindow, MS_U8 u8Sharpness )
1204*53ee8cc1Swenshuai.xi {
1205*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1206*53ee8cc1Swenshuai.xi void *pModule;
1207*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1208*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
1209*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
1210*53ee8cc1Swenshuai.xi pACEResourceStr->u8Sharpness = u8Sharpness;
1211*53ee8cc1Swenshuai.xi #endif
1212*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1213*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1214*53ee8cc1Swenshuai.xi MDrv_ACE_SetSharpness(pInstance, eWindow, u8Sharpness);
1215*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1216*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1217*53ee8cc1Swenshuai.xi }
1218*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetSharpness(MS_BOOL eWindow,MS_U8 u8Sharpness)1219*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetSharpness( MS_BOOL eWindow, MS_U8 u8Sharpness )
1220*53ee8cc1Swenshuai.xi {
1221*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1222*53ee8cc1Swenshuai.xi {
1223*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1224*53ee8cc1Swenshuai.xi return;
1225*53ee8cc1Swenshuai.xi }
1226*53ee8cc1Swenshuai.xi
1227*53ee8cc1Swenshuai.xi stACE_PicSetSharpness ACEArgs;
1228*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1229*53ee8cc1Swenshuai.xi ACEArgs.u8Sharpness = u8Sharpness;
1230*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETSHARPNESS, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1231*53ee8cc1Swenshuai.xi {
1232*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1233*53ee8cc1Swenshuai.xi }
1234*53ee8cc1Swenshuai.xi return;
1235*53ee8cc1Swenshuai.xi }
1236*53ee8cc1Swenshuai.xi
1237*53ee8cc1Swenshuai.xi /******************************************************************************/
1238*53ee8cc1Swenshuai.xi //-Adjust contrast for YPbPr and digital port
1239*53ee8cc1Swenshuai.xi //@param u8Contrast \b IN:
1240*53ee8cc1Swenshuai.xi //- video color Contrast setting 0 -0xff
1241*53ee8cc1Swenshuai.xi //@param u8SubContrast \b IN:
1242*53ee8cc1Swenshuai.xi //- video color SubContrast setting 0 -0xff
1243*53ee8cc1Swenshuai.xi /******************************************************************************/
1244*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetContrast_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,MS_U8 u8Contrast)1245*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetContrast_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bUseYUVSpace, MS_U8 u8Contrast)
1246*53ee8cc1Swenshuai.xi {
1247*53ee8cc1Swenshuai.xi MS_BOOL bIgnoreColorSpace = FALSE;
1248*53ee8cc1Swenshuai.xi #if defined(UFO_XC_HDR) && defined(UFO_XC_HDR_VERSION) && (UFO_XC_HDR_VERSION == 2)
1249*53ee8cc1Swenshuai.xi XC_HDR_SUPPORTED_CAPS stHdrSupportedCaps;
1250*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_DOLBY;
1251*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
1252*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
1253*53ee8cc1Swenshuai.xi bIgnoreColorSpace = stHdrSupportedCaps.bSupported;
1254*53ee8cc1Swenshuai.xi
1255*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_OPEN;
1256*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
1257*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
1258*53ee8cc1Swenshuai.xi bIgnoreColorSpace |= stHdrSupportedCaps.bSupported;
1259*53ee8cc1Swenshuai.xi #endif
1260*53ee8cc1Swenshuai.xi
1261*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1262*53ee8cc1Swenshuai.xi void *pModule;
1263*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1264*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
1265*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
1266*53ee8cc1Swenshuai.xi pACEResourceStr->bUseYUVSpace = bUseYUVSpace;
1267*53ee8cc1Swenshuai.xi pACEResourceStr->u8Contrast = u8Contrast;
1268*53ee8cc1Swenshuai.xi #endif
1269*53ee8cc1Swenshuai.xi if (bIgnoreColorSpace == TRUE)
1270*53ee8cc1Swenshuai.xi {
1271*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1272*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1273*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetContrast(pInstance, eWindow, bUseYUVSpace, u8Contrast);
1274*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1275*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1276*53ee8cc1Swenshuai.xi }
1277*53ee8cc1Swenshuai.xi else
1278*53ee8cc1Swenshuai.xi {
1279*53ee8cc1Swenshuai.xi if (bUseYUVSpace)
1280*53ee8cc1Swenshuai.xi {
1281*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1282*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1283*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetContrast(pInstance, eWindow, bUseYUVSpace, u8Contrast);
1284*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1285*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1286*53ee8cc1Swenshuai.xi }
1287*53ee8cc1Swenshuai.xi else
1288*53ee8cc1Swenshuai.xi {
1289*53ee8cc1Swenshuai.xi ;
1290*53ee8cc1Swenshuai.xi }
1291*53ee8cc1Swenshuai.xi }
1292*53ee8cc1Swenshuai.xi
1293*53ee8cc1Swenshuai.xi }
1294*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetContrast(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,MS_U8 u8Contrast)1295*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetContrast( MS_BOOL eWindow, MS_BOOL bUseYUVSpace, MS_U8 u8Contrast)
1296*53ee8cc1Swenshuai.xi {
1297*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1298*53ee8cc1Swenshuai.xi {
1299*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1300*53ee8cc1Swenshuai.xi return;
1301*53ee8cc1Swenshuai.xi }
1302*53ee8cc1Swenshuai.xi
1303*53ee8cc1Swenshuai.xi stACE_PicSetContrast ACEArgs;
1304*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1305*53ee8cc1Swenshuai.xi ACEArgs.bUseYUVSpace = bUseYUVSpace;
1306*53ee8cc1Swenshuai.xi ACEArgs.u8Contrast = u8Contrast;
1307*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETCONTRAST, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1308*53ee8cc1Swenshuai.xi {
1309*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1310*53ee8cc1Swenshuai.xi }
1311*53ee8cc1Swenshuai.xi return;
1312*53ee8cc1Swenshuai.xi }
1313*53ee8cc1Swenshuai.xi
1314*53ee8cc1Swenshuai.xi /******************************************************************************/
1315*53ee8cc1Swenshuai.xi ///-Adjust Hue for YPbPr and digital port
1316*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Enable Hue
1317*53ee8cc1Swenshuai.xi ///@param bUseYUVSpace \b IN: Is Yuv space
1318*53ee8cc1Swenshuai.xi ///@param u8Hue \b IN: Hue value
1319*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_XC_ACE_PicSetHue_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,MS_U8 u8Hue)1320*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetHue_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bUseYUVSpace, MS_U8 u8Hue )
1321*53ee8cc1Swenshuai.xi {
1322*53ee8cc1Swenshuai.xi
1323*53ee8cc1Swenshuai.xi MS_BOOL bIgnoreColorSpace = FALSE;
1324*53ee8cc1Swenshuai.xi #if defined(UFO_XC_HDR) && defined(UFO_XC_HDR_VERSION) && (UFO_XC_HDR_VERSION == 2)
1325*53ee8cc1Swenshuai.xi XC_HDR_SUPPORTED_CAPS stHdrSupportedCaps;
1326*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_DOLBY;
1327*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
1328*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
1329*53ee8cc1Swenshuai.xi bIgnoreColorSpace = stHdrSupportedCaps.bSupported;
1330*53ee8cc1Swenshuai.xi
1331*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_OPEN;
1332*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
1333*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
1334*53ee8cc1Swenshuai.xi bIgnoreColorSpace |= stHdrSupportedCaps.bSupported;
1335*53ee8cc1Swenshuai.xi #endif
1336*53ee8cc1Swenshuai.xi
1337*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1338*53ee8cc1Swenshuai.xi void *pModule;
1339*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1340*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
1341*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
1342*53ee8cc1Swenshuai.xi pACEResourceStr->bUseYUVSpace = bUseYUVSpace;
1343*53ee8cc1Swenshuai.xi pACEResourceStr->u8Hue = u8Hue;
1344*53ee8cc1Swenshuai.xi #endif
1345*53ee8cc1Swenshuai.xi if (bIgnoreColorSpace == TRUE)
1346*53ee8cc1Swenshuai.xi {
1347*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1348*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1349*53ee8cc1Swenshuai.xi MDrv_ACE_SetHue(pInstance, eWindow, u8Hue);
1350*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1351*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1352*53ee8cc1Swenshuai.xi }
1353*53ee8cc1Swenshuai.xi else
1354*53ee8cc1Swenshuai.xi {
1355*53ee8cc1Swenshuai.xi if(bUseYUVSpace)
1356*53ee8cc1Swenshuai.xi {
1357*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1358*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1359*53ee8cc1Swenshuai.xi MDrv_ACE_SetHue(pInstance, eWindow, u8Hue);
1360*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1361*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1362*53ee8cc1Swenshuai.xi }
1363*53ee8cc1Swenshuai.xi else
1364*53ee8cc1Swenshuai.xi {
1365*53ee8cc1Swenshuai.xi ;
1366*53ee8cc1Swenshuai.xi }
1367*53ee8cc1Swenshuai.xi }
1368*53ee8cc1Swenshuai.xi }
1369*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetHue(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,MS_U8 u8Hue)1370*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetHue(MS_BOOL eWindow, MS_BOOL bUseYUVSpace, MS_U8 u8Hue)
1371*53ee8cc1Swenshuai.xi {
1372*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1373*53ee8cc1Swenshuai.xi {
1374*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1375*53ee8cc1Swenshuai.xi return;
1376*53ee8cc1Swenshuai.xi }
1377*53ee8cc1Swenshuai.xi
1378*53ee8cc1Swenshuai.xi stACE_PicSetHue ACEArgs;
1379*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1380*53ee8cc1Swenshuai.xi ACEArgs.bUseYUVSpace = bUseYUVSpace;
1381*53ee8cc1Swenshuai.xi ACEArgs.u8Hue = u8Hue;
1382*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETHUE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1383*53ee8cc1Swenshuai.xi {
1384*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1385*53ee8cc1Swenshuai.xi }
1386*53ee8cc1Swenshuai.xi return;
1387*53ee8cc1Swenshuai.xi }
1388*53ee8cc1Swenshuai.xi
1389*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1390*53ee8cc1Swenshuai.xi // Skip Wait Vsync
1391*53ee8cc1Swenshuai.xi /// @param eWindow \b IN: Enable
1392*53ee8cc1Swenshuai.xi /// @param Skip wait Vsync \b IN: Disable wait Vsync
1393*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MApi_XC_ACE_SkipWaitVsync_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bIsSkipWaitVsyn)1394*53ee8cc1Swenshuai.xi E_XC_ACE_RESULT MApi_XC_ACE_SkipWaitVsync_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bIsSkipWaitVsyn)
1395*53ee8cc1Swenshuai.xi {
1396*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1397*53ee8cc1Swenshuai.xi MDrv_ACE_SetSkipWaitVsync(pInstance, eWindow, bIsSkipWaitVsyn);
1398*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1399*53ee8cc1Swenshuai.xi return E_XC_ACE_OK;
1400*53ee8cc1Swenshuai.xi }
1401*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SkipWaitVsync(MS_BOOL eWindow,MS_BOOL bIsSkipWaitVsyn)1402*53ee8cc1Swenshuai.xi E_XC_ACE_RESULT MApi_XC_ACE_SkipWaitVsync( MS_BOOL eWindow, MS_BOOL bIsSkipWaitVsyn)
1403*53ee8cc1Swenshuai.xi {
1404*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1405*53ee8cc1Swenshuai.xi {
1406*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1407*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
1408*53ee8cc1Swenshuai.xi }
1409*53ee8cc1Swenshuai.xi
1410*53ee8cc1Swenshuai.xi stACE_SkipWaitVsync ACEArgs;
1411*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1412*53ee8cc1Swenshuai.xi ACEArgs.bIsSkipWaitVsyn = bIsSkipWaitVsyn;
1413*53ee8cc1Swenshuai.xi ACEArgs.eResult = E_XC_ACE_FAIL;
1414*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SKIPWAITVSYNC, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1415*53ee8cc1Swenshuai.xi {
1416*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1417*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
1418*53ee8cc1Swenshuai.xi }
1419*53ee8cc1Swenshuai.xi else
1420*53ee8cc1Swenshuai.xi {
1421*53ee8cc1Swenshuai.xi return ACEArgs.eResult;
1422*53ee8cc1Swenshuai.xi }
1423*53ee8cc1Swenshuai.xi }
1424*53ee8cc1Swenshuai.xi
1425*53ee8cc1Swenshuai.xi /******************************************************************************/
1426*53ee8cc1Swenshuai.xi //-Adjust Saturation for YPbPr and digital port
1427*53ee8cc1Swenshuai.xi //@param u8Saturation \b IN:
1428*53ee8cc1Swenshuai.xi //- video color setting 0 -100
1429*53ee8cc1Swenshuai.xi /******************************************************************************/
MApi_XC_ACE_PicSetSaturation_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,MS_U8 u8Saturation)1430*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetSaturation_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bUseYUVSpace, MS_U8 u8Saturation)
1431*53ee8cc1Swenshuai.xi {
1432*53ee8cc1Swenshuai.xi MS_BOOL bIgnoreColorSpace = FALSE;
1433*53ee8cc1Swenshuai.xi #if defined(UFO_XC_HDR) && defined(UFO_XC_HDR_VERSION) && (UFO_XC_HDR_VERSION == 2)
1434*53ee8cc1Swenshuai.xi XC_HDR_SUPPORTED_CAPS stHdrSupportedCaps;
1435*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_DOLBY;
1436*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
1437*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
1438*53ee8cc1Swenshuai.xi bIgnoreColorSpace = stHdrSupportedCaps.bSupported;
1439*53ee8cc1Swenshuai.xi
1440*53ee8cc1Swenshuai.xi stHdrSupportedCaps.enHDRType = E_XC_HDR_TYPE_OPEN;
1441*53ee8cc1Swenshuai.xi stHdrSupportedCaps.bSupported = FALSE;
1442*53ee8cc1Swenshuai.xi MApi_XC_GetChipCaps(E_XC_SUPPORT_HDR, (MS_U32*)&stHdrSupportedCaps, sizeof(XC_HDR_SUPPORTED_CAPS));
1443*53ee8cc1Swenshuai.xi bIgnoreColorSpace |= stHdrSupportedCaps.bSupported;
1444*53ee8cc1Swenshuai.xi #endif
1445*53ee8cc1Swenshuai.xi
1446*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1447*53ee8cc1Swenshuai.xi void *pModule;
1448*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1449*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
1450*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
1451*53ee8cc1Swenshuai.xi pACEResourceStr->bUseYUVSpace = bUseYUVSpace;
1452*53ee8cc1Swenshuai.xi pACEResourceStr->u8Saturation = u8Saturation;
1453*53ee8cc1Swenshuai.xi #endif
1454*53ee8cc1Swenshuai.xi
1455*53ee8cc1Swenshuai.xi if (bIgnoreColorSpace == TRUE)
1456*53ee8cc1Swenshuai.xi {
1457*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1458*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1459*53ee8cc1Swenshuai.xi MDrv_ACE_SetSaturation(pInstance, eWindow, u8Saturation);
1460*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1461*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1462*53ee8cc1Swenshuai.xi }
1463*53ee8cc1Swenshuai.xi else
1464*53ee8cc1Swenshuai.xi {
1465*53ee8cc1Swenshuai.xi if(bUseYUVSpace)
1466*53ee8cc1Swenshuai.xi {
1467*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1468*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1469*53ee8cc1Swenshuai.xi MDrv_ACE_SetSaturation(pInstance, eWindow, u8Saturation);
1470*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1471*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1472*53ee8cc1Swenshuai.xi }
1473*53ee8cc1Swenshuai.xi else
1474*53ee8cc1Swenshuai.xi {
1475*53ee8cc1Swenshuai.xi ;
1476*53ee8cc1Swenshuai.xi }
1477*53ee8cc1Swenshuai.xi }
1478*53ee8cc1Swenshuai.xi
1479*53ee8cc1Swenshuai.xi }
1480*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetSaturation(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,MS_U8 u8Saturation)1481*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetSaturation(MS_BOOL eWindow, MS_BOOL bUseYUVSpace, MS_U8 u8Saturation )
1482*53ee8cc1Swenshuai.xi {
1483*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1484*53ee8cc1Swenshuai.xi {
1485*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1486*53ee8cc1Swenshuai.xi return;
1487*53ee8cc1Swenshuai.xi }
1488*53ee8cc1Swenshuai.xi
1489*53ee8cc1Swenshuai.xi stACE_PicSetSaturation ACEArgs;
1490*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1491*53ee8cc1Swenshuai.xi ACEArgs.bUseYUVSpace = bUseYUVSpace;
1492*53ee8cc1Swenshuai.xi ACEArgs.u8Saturation = u8Saturation;
1493*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETSATURATION, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1494*53ee8cc1Swenshuai.xi {
1495*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1496*53ee8cc1Swenshuai.xi }
1497*53ee8cc1Swenshuai.xi return;
1498*53ee8cc1Swenshuai.xi }
1499*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetFleshTone_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bEn,MS_U8 u8FleshTone)1500*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetFleshTone_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bEn, MS_U8 u8FleshTone)
1501*53ee8cc1Swenshuai.xi {
1502*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1503*53ee8cc1Swenshuai.xi MDrv_ACE_SetFleshTone(pInstance, eWindow, bEn, u8FleshTone);
1504*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1505*53ee8cc1Swenshuai.xi }
1506*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetFleshTone(MS_BOOL eWindow,MS_BOOL bEn,MS_U8 u8FleshTone)1507*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetFleshTone(MS_BOOL eWindow, MS_BOOL bEn, MS_U8 u8FleshTone)
1508*53ee8cc1Swenshuai.xi {
1509*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1510*53ee8cc1Swenshuai.xi {
1511*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1512*53ee8cc1Swenshuai.xi return;
1513*53ee8cc1Swenshuai.xi }
1514*53ee8cc1Swenshuai.xi
1515*53ee8cc1Swenshuai.xi stACE_SetFleshTone ACEArgs;
1516*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1517*53ee8cc1Swenshuai.xi ACEArgs.bEn = bEn;
1518*53ee8cc1Swenshuai.xi ACEArgs.u8FleshTone = u8FleshTone;
1519*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETFLESHTONE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1520*53ee8cc1Swenshuai.xi {
1521*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1522*53ee8cc1Swenshuai.xi }
1523*53ee8cc1Swenshuai.xi return;
1524*53ee8cc1Swenshuai.xi }
1525*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetBlackAdjust_U2(void * pInstance,MS_BOOL eWindow,MS_U8 u8BlackAdjust)1526*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetBlackAdjust_U2(void *pInstance, MS_BOOL eWindow, MS_U8 u8BlackAdjust)
1527*53ee8cc1Swenshuai.xi {
1528*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1529*53ee8cc1Swenshuai.xi MDrv_ACE_SetBlackAdjust(pInstance, eWindow, u8BlackAdjust);
1530*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1531*53ee8cc1Swenshuai.xi }
1532*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetBlackAdjust(MS_BOOL eWindow,MS_U8 u8BlackAdjust)1533*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetBlackAdjust(MS_BOOL eWindow, MS_U8 u8BlackAdjust)
1534*53ee8cc1Swenshuai.xi {
1535*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1536*53ee8cc1Swenshuai.xi {
1537*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1538*53ee8cc1Swenshuai.xi return;
1539*53ee8cc1Swenshuai.xi }
1540*53ee8cc1Swenshuai.xi
1541*53ee8cc1Swenshuai.xi stACE_SetBlackAdjust ACEArgs;
1542*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1543*53ee8cc1Swenshuai.xi ACEArgs.u8BlackAdjust = u8BlackAdjust;
1544*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETBLACKADJUST, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1545*53ee8cc1Swenshuai.xi {
1546*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1547*53ee8cc1Swenshuai.xi }
1548*53ee8cc1Swenshuai.xi return;
1549*53ee8cc1Swenshuai.xi }
1550*53ee8cc1Swenshuai.xi
1551*53ee8cc1Swenshuai.xi //*************************************************************************
1552*53ee8cc1Swenshuai.xi ///-set video color
1553*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Enable Color temp
1554*53ee8cc1Swenshuai.xi ///@param bUseYUVSpace \b IN: Is in YUV space
1555*53ee8cc1Swenshuai.xi ///@param pstColorTemp \b IN: Color temp need to be set
1556*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetColorTemp_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp * pstColorTemp)1557*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetColorTemp_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp* pstColorTemp)
1558*53ee8cc1Swenshuai.xi {
1559*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1560*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1561*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetRGB(pInstance, eWindow, bUseYUVSpace , pstColorTemp->cRedColor, pstColorTemp->cGreenColor, pstColorTemp->cBlueColor );
1562*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1563*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1564*53ee8cc1Swenshuai.xi }
1565*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetColorTemp(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp * pstColorTemp)1566*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetColorTemp(MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp* pstColorTemp)
1567*53ee8cc1Swenshuai.xi {
1568*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1569*53ee8cc1Swenshuai.xi {
1570*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1571*53ee8cc1Swenshuai.xi return;
1572*53ee8cc1Swenshuai.xi }
1573*53ee8cc1Swenshuai.xi
1574*53ee8cc1Swenshuai.xi stACE_PicSetColorTemp ACEArgs;
1575*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1576*53ee8cc1Swenshuai.xi ACEArgs.bUseYUVSpace = bUseYUVSpace;
1577*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1578*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETCOLORTEMP, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1579*53ee8cc1Swenshuai.xi {
1580*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1581*53ee8cc1Swenshuai.xi }
1582*53ee8cc1Swenshuai.xi return;
1583*53ee8cc1Swenshuai.xi }
1584*53ee8cc1Swenshuai.xi
1585*53ee8cc1Swenshuai.xi //*************************************************************************
1586*53ee8cc1Swenshuai.xi ///-set video color ex
1587*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Enable Color temp
1588*53ee8cc1Swenshuai.xi ///@param bUseYUVSpace \b IN: Is in YUV space
1589*53ee8cc1Swenshuai.xi ///@param pstColorTemp \b IN: Color temp need to be set
1590*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetColorTempEx_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp_ex * pstColorTemp)1591*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetColorTempEx_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp_ex* pstColorTemp)
1592*53ee8cc1Swenshuai.xi {
1593*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1594*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1595*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetRGB(pInstance, eWindow, bUseYUVSpace , pstColorTemp->cRedColor, pstColorTemp->cGreenColor, pstColorTemp->cBlueColor );
1596*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1597*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1598*53ee8cc1Swenshuai.xi }
1599*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetColorTempEx(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp_ex * pstColorTemp)1600*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetColorTempEx( MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp_ex* pstColorTemp)
1601*53ee8cc1Swenshuai.xi {
1602*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1603*53ee8cc1Swenshuai.xi {
1604*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1605*53ee8cc1Swenshuai.xi return;
1606*53ee8cc1Swenshuai.xi }
1607*53ee8cc1Swenshuai.xi
1608*53ee8cc1Swenshuai.xi stACE_PicSetColorTempEx ACEArgs;
1609*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1610*53ee8cc1Swenshuai.xi ACEArgs.bUseYUVSpace = bUseYUVSpace;
1611*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1612*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETCOLORTEMPEX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1613*53ee8cc1Swenshuai.xi {
1614*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1615*53ee8cc1Swenshuai.xi }
1616*53ee8cc1Swenshuai.xi return;
1617*53ee8cc1Swenshuai.xi }
1618*53ee8cc1Swenshuai.xi
1619*53ee8cc1Swenshuai.xi //*************************************************************************
1620*53ee8cc1Swenshuai.xi ///-set video color 10Bits step length
1621*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Enable Color temp
1622*53ee8cc1Swenshuai.xi ///@param bUseYUVSpace \b IN: Is in YUV space
1623*53ee8cc1Swenshuai.xi ///@param pstColorTemp \b IN: Color temp need to be set
1624*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetColorTemp_10Bits_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp_ex * pstColorTemp)1625*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetColorTemp_10Bits_U2(void *pInstance,MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp_ex* pstColorTemp)
1626*53ee8cc1Swenshuai.xi {
1627*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1628*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1629*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetRGB_10Bits(pInstance, eWindow, bUseYUVSpace , pstColorTemp->cRedColor, pstColorTemp->cGreenColor, pstColorTemp->cBlueColor );
1630*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1631*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1632*53ee8cc1Swenshuai.xi }
1633*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetColorTemp_10Bits(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp_ex * pstColorTemp)1634*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetColorTemp_10Bits( MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp_ex* pstColorTemp)
1635*53ee8cc1Swenshuai.xi {
1636*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1637*53ee8cc1Swenshuai.xi {
1638*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1639*53ee8cc1Swenshuai.xi return;
1640*53ee8cc1Swenshuai.xi }
1641*53ee8cc1Swenshuai.xi
1642*53ee8cc1Swenshuai.xi stACE_PicSetColorTempEx ACEArgs;
1643*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1644*53ee8cc1Swenshuai.xi ACEArgs.bUseYUVSpace = bUseYUVSpace;
1645*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1646*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETCOLORTEMP_10BITS, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1647*53ee8cc1Swenshuai.xi {
1648*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1649*53ee8cc1Swenshuai.xi }
1650*53ee8cc1Swenshuai.xi return;
1651*53ee8cc1Swenshuai.xi }
1652*53ee8cc1Swenshuai.xi
1653*53ee8cc1Swenshuai.xi //*************************************************************************
1654*53ee8cc1Swenshuai.xi ///- set post color temp Version 2
1655*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Enable Color temp
1656*53ee8cc1Swenshuai.xi ///@param pstColorTemp \b IN: Color temp need to be set
1657*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetPostColorTemp_V02_U2(void * pInstance,MS_BOOL eWindow,XC_ACE_color_temp_ex2 * pstColorTemp)1658*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp_V02_U2(void *pInstance, MS_BOOL eWindow, XC_ACE_color_temp_ex2* pstColorTemp)
1659*53ee8cc1Swenshuai.xi {
1660*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1661*53ee8cc1Swenshuai.xi void *pModule;
1662*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
1663*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
1664*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
1665*53ee8cc1Swenshuai.xi memcpy(&(pACEResourceStr->stColorTemp),pstColorTemp,sizeof(XC_ACE_color_temp_ex2));
1666*53ee8cc1Swenshuai.xi #endif
1667*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1668*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1669*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBGainOffset(pInstance, eWindow,
1670*53ee8cc1Swenshuai.xi pstColorTemp->cRedColor, pstColorTemp->cGreenColor, pstColorTemp->cBlueColor,
1671*53ee8cc1Swenshuai.xi pstColorTemp->cRedOffset, pstColorTemp->cGreenOffset, pstColorTemp->cBlueOffset, 0);
1672*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1673*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1674*53ee8cc1Swenshuai.xi }
1675*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetPostColorTemp_V02(MS_BOOL eWindow,XC_ACE_color_temp_ex2 * pstColorTemp)1676*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp_V02(MS_BOOL eWindow, XC_ACE_color_temp_ex2* pstColorTemp)
1677*53ee8cc1Swenshuai.xi {
1678*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1679*53ee8cc1Swenshuai.xi {
1680*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1681*53ee8cc1Swenshuai.xi return;
1682*53ee8cc1Swenshuai.xi }
1683*53ee8cc1Swenshuai.xi
1684*53ee8cc1Swenshuai.xi stACE_PicSetPostColorTemp_V02 ACEArgs;
1685*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1686*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1687*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETPOSTCOLORTEMP_V02, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1688*53ee8cc1Swenshuai.xi {
1689*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1690*53ee8cc1Swenshuai.xi }
1691*53ee8cc1Swenshuai.xi return;
1692*53ee8cc1Swenshuai.xi }
1693*53ee8cc1Swenshuai.xi
1694*53ee8cc1Swenshuai.xi //*************************************************************************
1695*53ee8cc1Swenshuai.xi ///-obosolte!! use MApi_XC_ACE_PicSetPostColorTemp_V02 instead
1696*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetPostColorTemp_U2(void * pInstance,MS_BOOL eWindow,XC_ACE_color_temp * pstColorTemp)1697*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp_U2(void *pInstance, MS_BOOL eWindow, XC_ACE_color_temp* pstColorTemp)
1698*53ee8cc1Swenshuai.xi {
1699*53ee8cc1Swenshuai.xi XC_ACE_color_temp_ex2 stColorTemp2;
1700*53ee8cc1Swenshuai.xi stColorTemp2.cRedOffset = pstColorTemp->cRedOffset<<3 ;
1701*53ee8cc1Swenshuai.xi stColorTemp2.cGreenOffset= pstColorTemp->cGreenOffset<<3;
1702*53ee8cc1Swenshuai.xi stColorTemp2.cBlueOffset= pstColorTemp->cBlueOffset<<3;
1703*53ee8cc1Swenshuai.xi
1704*53ee8cc1Swenshuai.xi stColorTemp2.cRedColor= pstColorTemp->cRedColor << 3;
1705*53ee8cc1Swenshuai.xi stColorTemp2.cGreenColor= pstColorTemp->cGreenColor << 3;
1706*53ee8cc1Swenshuai.xi stColorTemp2.cBlueColor= pstColorTemp->cBlueColor << 3;
1707*53ee8cc1Swenshuai.xi
1708*53ee8cc1Swenshuai.xi stColorTemp2.cRedScaleValue= pstColorTemp->cRedScaleValue;
1709*53ee8cc1Swenshuai.xi stColorTemp2.cGreenScaleValue= pstColorTemp->cGreenScaleValue;
1710*53ee8cc1Swenshuai.xi stColorTemp2.cBlueScaleValue= pstColorTemp->cBlueScaleValue;
1711*53ee8cc1Swenshuai.xi
1712*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1713*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1714*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBGain(pInstance, eWindow, stColorTemp2.cRedColor, stColorTemp2.cGreenColor, stColorTemp2.cBlueColor);
1715*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBOffset(pInstance, eWindow, stColorTemp2.cRedOffset, stColorTemp2.cGreenOffset, stColorTemp2.cBlueOffset, 0);
1716*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1717*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1718*53ee8cc1Swenshuai.xi }
1719*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetPostColorTemp(MS_BOOL eWindow,XC_ACE_color_temp * pstColorTemp)1720*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp(MS_BOOL eWindow, XC_ACE_color_temp* pstColorTemp)
1721*53ee8cc1Swenshuai.xi {
1722*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1723*53ee8cc1Swenshuai.xi {
1724*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1725*53ee8cc1Swenshuai.xi return;
1726*53ee8cc1Swenshuai.xi }
1727*53ee8cc1Swenshuai.xi
1728*53ee8cc1Swenshuai.xi stACE_PicSetPostColorTemp ACEArgs;
1729*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1730*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1731*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETPOSTCOLORTEMP, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1732*53ee8cc1Swenshuai.xi {
1733*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1734*53ee8cc1Swenshuai.xi }
1735*53ee8cc1Swenshuai.xi return;
1736*53ee8cc1Swenshuai.xi }
1737*53ee8cc1Swenshuai.xi
1738*53ee8cc1Swenshuai.xi //*************************************************************************
1739*53ee8cc1Swenshuai.xi ///-obosolte!! use MApi_XC_ACE_PicSetPostColorTemp_V02 instead
1740*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetPostColorTempEx_U2(void * pInstance,MS_BOOL eWindow,XC_ACE_color_temp_ex * pstColorTemp)1741*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTempEx_U2(void *pInstance, MS_BOOL eWindow, XC_ACE_color_temp_ex* pstColorTemp)
1742*53ee8cc1Swenshuai.xi {
1743*53ee8cc1Swenshuai.xi XC_ACE_color_temp_ex2 stColorTemp2;
1744*53ee8cc1Swenshuai.xi stColorTemp2.cRedOffset = pstColorTemp->cRedOffset ;
1745*53ee8cc1Swenshuai.xi stColorTemp2.cGreenOffset= pstColorTemp->cGreenOffset;
1746*53ee8cc1Swenshuai.xi stColorTemp2.cBlueOffset= pstColorTemp->cBlueOffset;
1747*53ee8cc1Swenshuai.xi
1748*53ee8cc1Swenshuai.xi stColorTemp2.cRedColor= pstColorTemp->cRedColor << 3 ;
1749*53ee8cc1Swenshuai.xi stColorTemp2.cGreenColor= pstColorTemp->cGreenColor << 3;
1750*53ee8cc1Swenshuai.xi stColorTemp2.cBlueColor= pstColorTemp->cBlueColor << 3;
1751*53ee8cc1Swenshuai.xi
1752*53ee8cc1Swenshuai.xi stColorTemp2.cRedScaleValue= pstColorTemp->cRedScaleValue;
1753*53ee8cc1Swenshuai.xi stColorTemp2.cGreenScaleValue= pstColorTemp->cGreenScaleValue;
1754*53ee8cc1Swenshuai.xi stColorTemp2.cBlueScaleValue= pstColorTemp->cBlueScaleValue;
1755*53ee8cc1Swenshuai.xi
1756*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1757*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1758*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBGain(pInstance, eWindow, stColorTemp2.cRedColor, stColorTemp2.cGreenColor, stColorTemp2.cBlueColor);
1759*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBOffset(pInstance, eWindow, stColorTemp2.cRedOffset, stColorTemp2.cGreenOffset, stColorTemp2.cBlueOffset, 0);
1760*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1761*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1762*53ee8cc1Swenshuai.xi }
1763*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetPostColorTempEx(MS_BOOL eWindow,XC_ACE_color_temp_ex * pstColorTemp)1764*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTempEx(MS_BOOL eWindow, XC_ACE_color_temp_ex* pstColorTemp)
1765*53ee8cc1Swenshuai.xi {
1766*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1767*53ee8cc1Swenshuai.xi {
1768*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1769*53ee8cc1Swenshuai.xi return;
1770*53ee8cc1Swenshuai.xi }
1771*53ee8cc1Swenshuai.xi
1772*53ee8cc1Swenshuai.xi stACE_PicSetPostColorTempEx ACEArgs;
1773*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1774*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1775*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETPOSTCOLORTEMPEX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1776*53ee8cc1Swenshuai.xi {
1777*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1778*53ee8cc1Swenshuai.xi }
1779*53ee8cc1Swenshuai.xi return;
1780*53ee8cc1Swenshuai.xi }
1781*53ee8cc1Swenshuai.xi
1782*53ee8cc1Swenshuai.xi //*************************************************************************
1783*53ee8cc1Swenshuai.xi ///-set video color
1784*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Enable Color temp
1785*53ee8cc1Swenshuai.xi ///@param bUseYUVSpace \b IN: Is in YUV space
1786*53ee8cc1Swenshuai.xi ///@param pstColorTemp \b IN: Color temp need to be set
1787*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetPostColorTemp2_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp * pstColorTemp)1788*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp2_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp* pstColorTemp)
1789*53ee8cc1Swenshuai.xi {
1790*53ee8cc1Swenshuai.xi XC_ACE_color_temp_ex2 stColorTemp2;
1791*53ee8cc1Swenshuai.xi
1792*53ee8cc1Swenshuai.xi // error handle & data prepare
1793*53ee8cc1Swenshuai.xi if(pstColorTemp == NULL)
1794*53ee8cc1Swenshuai.xi return;
1795*53ee8cc1Swenshuai.xi
1796*53ee8cc1Swenshuai.xi stColorTemp2.cRedOffset = pstColorTemp->cRedOffset<<3 ;
1797*53ee8cc1Swenshuai.xi stColorTemp2.cGreenOffset= pstColorTemp->cGreenOffset<<3;
1798*53ee8cc1Swenshuai.xi stColorTemp2.cBlueOffset= pstColorTemp->cBlueOffset<<3;
1799*53ee8cc1Swenshuai.xi
1800*53ee8cc1Swenshuai.xi stColorTemp2.cRedColor= pstColorTemp->cRedColor << 3;
1801*53ee8cc1Swenshuai.xi stColorTemp2.cGreenColor= pstColorTemp->cGreenColor << 3;
1802*53ee8cc1Swenshuai.xi stColorTemp2.cBlueColor= pstColorTemp->cBlueColor << 3;
1803*53ee8cc1Swenshuai.xi
1804*53ee8cc1Swenshuai.xi stColorTemp2.cRedScaleValue= pstColorTemp->cRedScaleValue;
1805*53ee8cc1Swenshuai.xi stColorTemp2.cGreenScaleValue= pstColorTemp->cGreenScaleValue;
1806*53ee8cc1Swenshuai.xi stColorTemp2.cBlueScaleValue= pstColorTemp->cBlueScaleValue;
1807*53ee8cc1Swenshuai.xi
1808*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1809*53ee8cc1Swenshuai.xi
1810*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1811*53ee8cc1Swenshuai.xi // bypass ACE color setting
1812*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetRGB(pInstance, eWindow, bUseYUVSpace , XC_ACE_BYPASS_COLOR_GAIN, XC_ACE_BYPASS_COLOR_GAIN, XC_ACE_BYPASS_COLOR_GAIN );
1813*53ee8cc1Swenshuai.xi
1814*53ee8cc1Swenshuai.xi // use HW color gain setting
1815*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBGain(pInstance, eWindow, stColorTemp2.cRedColor, stColorTemp2.cGreenColor, stColorTemp2.cBlueColor);
1816*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBOffset(pInstance, eWindow, stColorTemp2.cRedOffset, stColorTemp2.cGreenOffset, stColorTemp2.cBlueOffset, 0);
1817*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1818*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1819*53ee8cc1Swenshuai.xi }
1820*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetPostColorTemp2(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp * pstColorTemp)1821*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp2(MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp* pstColorTemp)
1822*53ee8cc1Swenshuai.xi {
1823*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1824*53ee8cc1Swenshuai.xi {
1825*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1826*53ee8cc1Swenshuai.xi return;
1827*53ee8cc1Swenshuai.xi }
1828*53ee8cc1Swenshuai.xi
1829*53ee8cc1Swenshuai.xi stACE_PicSetPostColorTemp ACEArgs;
1830*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1831*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1832*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETPOSTCOLORTEMP2, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1833*53ee8cc1Swenshuai.xi {
1834*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1835*53ee8cc1Swenshuai.xi }
1836*53ee8cc1Swenshuai.xi return;
1837*53ee8cc1Swenshuai.xi }
1838*53ee8cc1Swenshuai.xi
1839*53ee8cc1Swenshuai.xi //*************************************************************************
1840*53ee8cc1Swenshuai.xi ///-set video color ex
1841*53ee8cc1Swenshuai.xi ///@param eWindow \b IN: Enable Color temp
1842*53ee8cc1Swenshuai.xi ///@param bUseYUVSpace \b IN: Is in YUV space
1843*53ee8cc1Swenshuai.xi ///@param pstColorTemp \b IN: Color temp need to be set
1844*53ee8cc1Swenshuai.xi //*************************************************************************
MApi_XC_ACE_PicSetPostColorTemp2Ex_U2(void * pInstance,MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp_ex * pstColorTemp)1845*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp2Ex_U2(void *pInstance, MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp_ex* pstColorTemp)
1846*53ee8cc1Swenshuai.xi {
1847*53ee8cc1Swenshuai.xi XC_ACE_color_temp_ex2 stColorTemp2;
1848*53ee8cc1Swenshuai.xi
1849*53ee8cc1Swenshuai.xi // error handle & data prepare
1850*53ee8cc1Swenshuai.xi if(pstColorTemp == NULL)
1851*53ee8cc1Swenshuai.xi return;
1852*53ee8cc1Swenshuai.xi
1853*53ee8cc1Swenshuai.xi stColorTemp2.cRedOffset = pstColorTemp->cRedOffset ;
1854*53ee8cc1Swenshuai.xi stColorTemp2.cGreenOffset= pstColorTemp->cGreenOffset;
1855*53ee8cc1Swenshuai.xi stColorTemp2.cBlueOffset= pstColorTemp->cBlueOffset;
1856*53ee8cc1Swenshuai.xi
1857*53ee8cc1Swenshuai.xi stColorTemp2.cRedColor= pstColorTemp->cRedColor << 3 ;
1858*53ee8cc1Swenshuai.xi stColorTemp2.cGreenColor= pstColorTemp->cGreenColor << 3;
1859*53ee8cc1Swenshuai.xi stColorTemp2.cBlueColor= pstColorTemp->cBlueColor << 3;
1860*53ee8cc1Swenshuai.xi
1861*53ee8cc1Swenshuai.xi stColorTemp2.cRedScaleValue= pstColorTemp->cRedScaleValue;
1862*53ee8cc1Swenshuai.xi stColorTemp2.cGreenScaleValue= pstColorTemp->cGreenScaleValue;
1863*53ee8cc1Swenshuai.xi stColorTemp2.cBlueScaleValue= pstColorTemp->cBlueScaleValue;
1864*53ee8cc1Swenshuai.xi
1865*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1866*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
1867*53ee8cc1Swenshuai.xi // bypass ACE color setting
1868*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetRGB(pInstance, eWindow, bUseYUVSpace , XC_ACE_BYPASS_COLOR_GAIN, XC_ACE_BYPASS_COLOR_GAIN, XC_ACE_BYPASS_COLOR_GAIN );
1869*53ee8cc1Swenshuai.xi
1870*53ee8cc1Swenshuai.xi // use HW color gain setting
1871*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBGain(pInstance, eWindow, stColorTemp2.cRedColor, stColorTemp2.cGreenColor, stColorTemp2.cBlueColor);
1872*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBOffset(pInstance, eWindow, stColorTemp2.cRedOffset, stColorTemp2.cGreenOffset, stColorTemp2.cBlueOffset, 0);
1873*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
1874*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1875*53ee8cc1Swenshuai.xi }
1876*53ee8cc1Swenshuai.xi
MApi_XC_ACE_PicSetPostColorTemp2Ex(MS_BOOL eWindow,MS_BOOL bUseYUVSpace,XC_ACE_color_temp_ex * pstColorTemp)1877*53ee8cc1Swenshuai.xi void MApi_XC_ACE_PicSetPostColorTemp2Ex(MS_BOOL eWindow, MS_BOOL bUseYUVSpace, XC_ACE_color_temp_ex* pstColorTemp)
1878*53ee8cc1Swenshuai.xi {
1879*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1880*53ee8cc1Swenshuai.xi {
1881*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1882*53ee8cc1Swenshuai.xi return;
1883*53ee8cc1Swenshuai.xi }
1884*53ee8cc1Swenshuai.xi
1885*53ee8cc1Swenshuai.xi stACE_PicSetPostColorTempEx ACEArgs;
1886*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
1887*53ee8cc1Swenshuai.xi ACEArgs.bUseYUVSpace = bUseYUVSpace;
1888*53ee8cc1Swenshuai.xi ACEArgs.pstColorTemp = pstColorTemp;
1889*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_PICSETPOSTCOLORTEMP2EX, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1890*53ee8cc1Swenshuai.xi {
1891*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1892*53ee8cc1Swenshuai.xi }
1893*53ee8cc1Swenshuai.xi return;
1894*53ee8cc1Swenshuai.xi }
1895*53ee8cc1Swenshuai.xi
1896*53ee8cc1Swenshuai.xi /******************************************************************************/
1897*53ee8cc1Swenshuai.xi /* Local */
1898*53ee8cc1Swenshuai.xi /* ****************************************************************************/
1899*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetLibVer_U2(void * pInstance,const MSIF_Version ** ppVersion)1900*53ee8cc1Swenshuai.xi E_XC_ACE_RESULT MApi_XC_ACE_GetLibVer_U2(void *pInstance, const MSIF_Version **ppVersion) // Get version
1901*53ee8cc1Swenshuai.xi {
1902*53ee8cc1Swenshuai.xi if (!ppVersion)
1903*53ee8cc1Swenshuai.xi {
1904*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
1905*53ee8cc1Swenshuai.xi }
1906*53ee8cc1Swenshuai.xi
1907*53ee8cc1Swenshuai.xi *ppVersion = &_api_xc_ace_version;
1908*53ee8cc1Swenshuai.xi return E_XC_ACE_OK;
1909*53ee8cc1Swenshuai.xi }
1910*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetLibVer(const MSIF_Version ** ppVersion)1911*53ee8cc1Swenshuai.xi E_XC_ACE_RESULT MApi_XC_ACE_GetLibVer(const MSIF_Version **ppVersion) // Get version
1912*53ee8cc1Swenshuai.xi {
1913*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1914*53ee8cc1Swenshuai.xi {
1915*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1916*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
1917*53ee8cc1Swenshuai.xi }
1918*53ee8cc1Swenshuai.xi
1919*53ee8cc1Swenshuai.xi stACE_GetLibVer ACEArgs;
1920*53ee8cc1Swenshuai.xi ACEArgs.ppVersion = ppVersion;
1921*53ee8cc1Swenshuai.xi ACEArgs.eResult = E_XC_ACE_FAIL;
1922*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_GETLIBVER, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1923*53ee8cc1Swenshuai.xi {
1924*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1925*53ee8cc1Swenshuai.xi return E_XC_ACE_FAIL;
1926*53ee8cc1Swenshuai.xi }
1927*53ee8cc1Swenshuai.xi else
1928*53ee8cc1Swenshuai.xi {
1929*53ee8cc1Swenshuai.xi return ACEArgs.eResult;
1930*53ee8cc1Swenshuai.xi }
1931*53ee8cc1Swenshuai.xi }
1932*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetInfo_U2(void * pInstance)1933*53ee8cc1Swenshuai.xi const XC_ACE_ApiInfo * MApi_XC_ACE_GetInfo_U2(void *pInstance) // Get info from driver
1934*53ee8cc1Swenshuai.xi {
1935*53ee8cc1Swenshuai.xi return &_stXC_ACE_ApiInfo;
1936*53ee8cc1Swenshuai.xi }
1937*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetInfo(void)1938*53ee8cc1Swenshuai.xi const XC_ACE_ApiInfo * MApi_XC_ACE_GetInfo(void) // Get info from driver
1939*53ee8cc1Swenshuai.xi {
1940*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1941*53ee8cc1Swenshuai.xi {
1942*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1943*53ee8cc1Swenshuai.xi return NULL;
1944*53ee8cc1Swenshuai.xi }
1945*53ee8cc1Swenshuai.xi
1946*53ee8cc1Swenshuai.xi stACE_GetInfo ACEArgs;
1947*53ee8cc1Swenshuai.xi ACEArgs.pstApiInfo = NULL;
1948*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_GETINFO, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1949*53ee8cc1Swenshuai.xi {
1950*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1951*53ee8cc1Swenshuai.xi return NULL;
1952*53ee8cc1Swenshuai.xi }
1953*53ee8cc1Swenshuai.xi else
1954*53ee8cc1Swenshuai.xi {
1955*53ee8cc1Swenshuai.xi return ACEArgs.pstApiInfo;
1956*53ee8cc1Swenshuai.xi }
1957*53ee8cc1Swenshuai.xi }
1958*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetStatus_U2(void * pInstance,XC_ACE_ApiStatus * pDrvStatus,MS_BOOL bWindow)1959*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_GetStatus_U2(void *pInstance, XC_ACE_ApiStatus *pDrvStatus, MS_BOOL bWindow) // Get DLC current status
1960*53ee8cc1Swenshuai.xi {
1961*53ee8cc1Swenshuai.xi if(bWindow == 0)
1962*53ee8cc1Swenshuai.xi {
1963*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
1964*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
1965*53ee8cc1Swenshuai.xi pDrvStatus->ACEinit = g_XC_ACE_InitData;
1966*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
1967*53ee8cc1Swenshuai.xi }
1968*53ee8cc1Swenshuai.xi return TRUE;
1969*53ee8cc1Swenshuai.xi }
1970*53ee8cc1Swenshuai.xi
MApi_XC_ACE_GetStatus(XC_ACE_ApiStatus * pDrvStatus,MS_BOOL bWindow)1971*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_GetStatus(XC_ACE_ApiStatus *pDrvStatus, MS_BOOL bWindow) // Get DLC current status
1972*53ee8cc1Swenshuai.xi {
1973*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
1974*53ee8cc1Swenshuai.xi {
1975*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
1976*53ee8cc1Swenshuai.xi return FALSE;
1977*53ee8cc1Swenshuai.xi }
1978*53ee8cc1Swenshuai.xi
1979*53ee8cc1Swenshuai.xi stACE_GetStatus ACEArgs;
1980*53ee8cc1Swenshuai.xi ACEArgs.pDrvStatus = pDrvStatus;
1981*53ee8cc1Swenshuai.xi ACEArgs.bWindow = bWindow;
1982*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
1983*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_GETSTATUS, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
1984*53ee8cc1Swenshuai.xi {
1985*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
1986*53ee8cc1Swenshuai.xi return FALSE;
1987*53ee8cc1Swenshuai.xi }
1988*53ee8cc1Swenshuai.xi else
1989*53ee8cc1Swenshuai.xi {
1990*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
1991*53ee8cc1Swenshuai.xi }
1992*53ee8cc1Swenshuai.xi }
1993*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetDbgLevel_U2(void * pInstance,MS_U16 u16DbgSwitch)1994*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetDbgLevel_U2(void *pInstance, MS_U16 u16DbgSwitch)
1995*53ee8cc1Swenshuai.xi {
1996*53ee8cc1Swenshuai.xi #ifdef XC_ACE_DBG
1997*53ee8cc1Swenshuai.xi _u16XC_ACEDbgSwitch = u16DbgSwitch;
1998*53ee8cc1Swenshuai.xi #endif
1999*53ee8cc1Swenshuai.xi return TRUE;
2000*53ee8cc1Swenshuai.xi }
2001*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetDbgLevel(MS_U16 u16DbgSwitch)2002*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetDbgLevel(MS_U16 u16DbgSwitch)
2003*53ee8cc1Swenshuai.xi {
2004*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2005*53ee8cc1Swenshuai.xi {
2006*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_ACE, &pu32ACEInst, 0, NULL) != UTOPIA_STATUS_SUCCESS)
2007*53ee8cc1Swenshuai.xi {
2008*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2009*53ee8cc1Swenshuai.xi return FALSE;
2010*53ee8cc1Swenshuai.xi }
2011*53ee8cc1Swenshuai.xi }
2012*53ee8cc1Swenshuai.xi stACE_SetDbgLevel ACEArgs;
2013*53ee8cc1Swenshuai.xi ACEArgs.u16DbgSwitch = u16DbgSwitch;
2014*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
2015*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETDBGLEVEL, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2016*53ee8cc1Swenshuai.xi {
2017*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2018*53ee8cc1Swenshuai.xi return FALSE;
2019*53ee8cc1Swenshuai.xi }
2020*53ee8cc1Swenshuai.xi else
2021*53ee8cc1Swenshuai.xi {
2022*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
2023*53ee8cc1Swenshuai.xi }
2024*53ee8cc1Swenshuai.xi }
2025*53ee8cc1Swenshuai.xi
2026*53ee8cc1Swenshuai.xi /******************************************************************************/
2027*53ee8cc1Swenshuai.xi /* Functions */
2028*53ee8cc1Swenshuai.xi /******************************************************************************/
2029*53ee8cc1Swenshuai.xi
MApi_XC_ACE_EnableMWE_U2(void * pInstance,MS_BOOL bEnable)2030*53ee8cc1Swenshuai.xi void MApi_XC_ACE_EnableMWE_U2(void *pInstance, MS_BOOL bEnable)
2031*53ee8cc1Swenshuai.xi {
2032*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2033*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2034*53ee8cc1Swenshuai.xi MDrv_XC_SetMWEStatus(pInstance, bEnable);
2035*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2036*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWEEnable(pInstance, bEnable, _bMWESkipDriverSetting);
2037*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2038*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2039*53ee8cc1Swenshuai.xi }
2040*53ee8cc1Swenshuai.xi
MApi_XC_ACE_EnableMWE(MS_BOOL bEnable)2041*53ee8cc1Swenshuai.xi void MApi_XC_ACE_EnableMWE(MS_BOOL bEnable)
2042*53ee8cc1Swenshuai.xi {
2043*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2044*53ee8cc1Swenshuai.xi {
2045*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2046*53ee8cc1Swenshuai.xi return;
2047*53ee8cc1Swenshuai.xi }
2048*53ee8cc1Swenshuai.xi
2049*53ee8cc1Swenshuai.xi stACE_EnableMWE ACEArgs;
2050*53ee8cc1Swenshuai.xi ACEArgs.bEnable = bEnable;
2051*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_ENABLEMWE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2052*53ee8cc1Swenshuai.xi {
2053*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2054*53ee8cc1Swenshuai.xi }
2055*53ee8cc1Swenshuai.xi return;
2056*53ee8cc1Swenshuai.xi }
2057*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWESetMirrorMode_U2(void * pInstance,E_XC_ACE_MWE_MIRROR_TYPE eMirrorMode)2058*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWESetMirrorMode_U2(void *pInstance, E_XC_ACE_MWE_MIRROR_TYPE eMirrorMode)
2059*53ee8cc1Swenshuai.xi {
2060*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2061*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2062*53ee8cc1Swenshuai.xi _enMirrorMode = eMirrorMode;
2063*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2064*53ee8cc1Swenshuai.xi
2065*53ee8cc1Swenshuai.xi }
2066*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWESetMirrorMode(E_XC_ACE_MWE_MIRROR_TYPE eMirrorMode)2067*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWESetMirrorMode( E_XC_ACE_MWE_MIRROR_TYPE eMirrorMode )
2068*53ee8cc1Swenshuai.xi {
2069*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2070*53ee8cc1Swenshuai.xi {
2071*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2072*53ee8cc1Swenshuai.xi return;
2073*53ee8cc1Swenshuai.xi }
2074*53ee8cc1Swenshuai.xi
2075*53ee8cc1Swenshuai.xi stACE_MWESetMirrorMode ACEArgs;
2076*53ee8cc1Swenshuai.xi ACEArgs.eMirrorMode = eMirrorMode;
2077*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_MWESETMIRRORMODE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2078*53ee8cc1Swenshuai.xi {
2079*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2080*53ee8cc1Swenshuai.xi }
2081*53ee8cc1Swenshuai.xi return;
2082*53ee8cc1Swenshuai.xi }
2083*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWECloneVisualEffect_U2(void * pInstance)2084*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWECloneVisualEffect_U2(void *pInstance)
2085*53ee8cc1Swenshuai.xi {
2086*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2087*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2088*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2089*53ee8cc1Swenshuai.xi if(!_bMWESkipDriverSetting)
2090*53ee8cc1Swenshuai.xi {
2091*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWECloneVisualEffect(pInstance);
2092*53ee8cc1Swenshuai.xi }
2093*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2094*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2095*53ee8cc1Swenshuai.xi }
2096*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWECloneVisualEffect(void)2097*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWECloneVisualEffect(void)
2098*53ee8cc1Swenshuai.xi {
2099*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2100*53ee8cc1Swenshuai.xi {
2101*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2102*53ee8cc1Swenshuai.xi return;
2103*53ee8cc1Swenshuai.xi }
2104*53ee8cc1Swenshuai.xi
2105*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_MWECLONEVISUALEFFECT, (void*)NULL) != UTOPIA_STATUS_SUCCESS)
2106*53ee8cc1Swenshuai.xi {
2107*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2108*53ee8cc1Swenshuai.xi }
2109*53ee8cc1Swenshuai.xi return;
2110*53ee8cc1Swenshuai.xi }
2111*53ee8cc1Swenshuai.xi
MApi_XC_ACE_3DClonePQMap_U2(void * pInstance,XC_ACE_WEAVETYPE enWeaveType)2112*53ee8cc1Swenshuai.xi void MApi_XC_ACE_3DClonePQMap_U2(void *pInstance, XC_ACE_WEAVETYPE enWeaveType)
2113*53ee8cc1Swenshuai.xi {
2114*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2115*53ee8cc1Swenshuai.xi MDrv_ACE_3DClonePQMap(pInstance, enWeaveType);
2116*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2117*53ee8cc1Swenshuai.xi }
2118*53ee8cc1Swenshuai.xi
MApi_XC_ACE_3DClonePQMap(XC_ACE_WEAVETYPE enWeaveType)2119*53ee8cc1Swenshuai.xi void MApi_XC_ACE_3DClonePQMap(XC_ACE_WEAVETYPE enWeaveType)
2120*53ee8cc1Swenshuai.xi {
2121*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2122*53ee8cc1Swenshuai.xi {
2123*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2124*53ee8cc1Swenshuai.xi return;
2125*53ee8cc1Swenshuai.xi }
2126*53ee8cc1Swenshuai.xi
2127*53ee8cc1Swenshuai.xi stACE_3DClonePQMap ACEArgs;
2128*53ee8cc1Swenshuai.xi ACEArgs.enWeaveType = enWeaveType;
2129*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_3DCLONEPQMAP, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2130*53ee8cc1Swenshuai.xi {
2131*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2132*53ee8cc1Swenshuai.xi }
2133*53ee8cc1Swenshuai.xi return;
2134*53ee8cc1Swenshuai.xi }
2135*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWESetRegTable_U2(void * pInstance,XC_ACE_TAB_Info * pMWETable)2136*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_MWESetRegTable_U2(void *pInstance, XC_ACE_TAB_Info *pMWETable)
2137*53ee8cc1Swenshuai.xi {
2138*53ee8cc1Swenshuai.xi MS_U32 u32Addr;
2139*53ee8cc1Swenshuai.xi MS_U8 u8Mask;
2140*53ee8cc1Swenshuai.xi MS_U8 u8Value;
2141*53ee8cc1Swenshuai.xi MS_U16 i;
2142*53ee8cc1Swenshuai.xi MS_U8 u8DoNotSet;
2143*53ee8cc1Swenshuai.xi if((NULL == pMWETable->pTable) || (pMWETable->u8TabRows < 2))
2144*53ee8cc1Swenshuai.xi {
2145*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("Invalid Table Format!\n");
2146*53ee8cc1Swenshuai.xi return FALSE;
2147*53ee8cc1Swenshuai.xi }
2148*53ee8cc1Swenshuai.xi
2149*53ee8cc1Swenshuai.xi if((ACE_TABINFO_REG_ADDR_SIZE + ACE_TABINFO_REG_MASK_SIZE + pMWETable->u8TabIdx * ACE_TABINFO_REG_DATA_SIZE) >= pMWETable->u8TabCols)
2150*53ee8cc1Swenshuai.xi {
2151*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("Invalid Table Format!\n");
2152*53ee8cc1Swenshuai.xi return FALSE;
2153*53ee8cc1Swenshuai.xi }
2154*53ee8cc1Swenshuai.xi
2155*53ee8cc1Swenshuai.xi for(i=0; i < pMWETable->u8TabRows - 1; i++)
2156*53ee8cc1Swenshuai.xi {
2157*53ee8cc1Swenshuai.xi u32Addr = (MS_U32)((pMWETable->pTable[0] << 8) + pMWETable->pTable[1]);
2158*53ee8cc1Swenshuai.xi u8Mask = pMWETable->pTable[ACE_TABINFO_REG_ADDR_SIZE];
2159*53ee8cc1Swenshuai.xi u8DoNotSet = pMWETable->pTable[ACE_TABINFO_REG_ADDR_SIZE + ACE_TABINFO_REG_MASK_SIZE + pMWETable->u8TabIdx * ACE_TABINFO_REG_DATA_SIZE];
2160*53ee8cc1Swenshuai.xi u8Value = pMWETable->pTable[ACE_TABINFO_REG_ADDR_SIZE + ACE_TABINFO_REG_MASK_SIZE + pMWETable->u8TabIdx * ACE_TABINFO_REG_DATA_SIZE + 1];
2161*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("[addr=%04x, msk=%02x, enb=%02x, val=%02x]\n", u32Addr, u8Mask, u8DoNotSet, u8Value);
2162*53ee8cc1Swenshuai.xi if(u32Addr == 0xFFFF) //check end of table
2163*53ee8cc1Swenshuai.xi {
2164*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("end of table!\n");
2165*53ee8cc1Swenshuai.xi break;
2166*53ee8cc1Swenshuai.xi }
2167*53ee8cc1Swenshuai.xi if(!u8DoNotSet)
2168*53ee8cc1Swenshuai.xi {
2169*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2170*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWESetRegRow(pInstance, u32Addr, u8Value, u8Mask);
2171*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2172*53ee8cc1Swenshuai.xi }
2173*53ee8cc1Swenshuai.xi pMWETable->pTable += pMWETable->u8TabCols; //next
2174*53ee8cc1Swenshuai.xi }
2175*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2176*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2177*53ee8cc1Swenshuai.xi _bMWESkipDriverSetting = TRUE;
2178*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2179*53ee8cc1Swenshuai.xi return TRUE;
2180*53ee8cc1Swenshuai.xi }
2181*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWESetRegTable(XC_ACE_TAB_Info * pMWETable)2182*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_MWESetRegTable(XC_ACE_TAB_Info *pMWETable)
2183*53ee8cc1Swenshuai.xi {
2184*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2185*53ee8cc1Swenshuai.xi {
2186*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2187*53ee8cc1Swenshuai.xi return FALSE;
2188*53ee8cc1Swenshuai.xi }
2189*53ee8cc1Swenshuai.xi
2190*53ee8cc1Swenshuai.xi stACE_MWESetRegTable ACEArgs;
2191*53ee8cc1Swenshuai.xi ACEArgs.pMWETable = pMWETable;
2192*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
2193*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_MWESETREGTABLE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2194*53ee8cc1Swenshuai.xi {
2195*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2196*53ee8cc1Swenshuai.xi return FALSE;
2197*53ee8cc1Swenshuai.xi }
2198*53ee8cc1Swenshuai.xi else
2199*53ee8cc1Swenshuai.xi {
2200*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
2201*53ee8cc1Swenshuai.xi }
2202*53ee8cc1Swenshuai.xi }
2203*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetMWELoadFromPQ_U2(void * pInstance,MS_BOOL bEnable)2204*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetMWELoadFromPQ_U2(void *pInstance, MS_BOOL bEnable)
2205*53ee8cc1Swenshuai.xi {
2206*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2207*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2208*53ee8cc1Swenshuai.xi _bMWESkipDriverSetting = bEnable;
2209*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2210*53ee8cc1Swenshuai.xi return TRUE;
2211*53ee8cc1Swenshuai.xi }
2212*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetMWELoadFromPQ(MS_BOOL bEnable)2213*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetMWELoadFromPQ(MS_BOOL bEnable)
2214*53ee8cc1Swenshuai.xi {
2215*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2216*53ee8cc1Swenshuai.xi {
2217*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2218*53ee8cc1Swenshuai.xi return FALSE;
2219*53ee8cc1Swenshuai.xi }
2220*53ee8cc1Swenshuai.xi
2221*53ee8cc1Swenshuai.xi stACE_SetMWELoadFromPQ ACEArgs;
2222*53ee8cc1Swenshuai.xi ACEArgs.bEnable = bEnable;
2223*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
2224*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETMWELOADFROMPQ, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2225*53ee8cc1Swenshuai.xi {
2226*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2227*53ee8cc1Swenshuai.xi return FALSE;
2228*53ee8cc1Swenshuai.xi }
2229*53ee8cc1Swenshuai.xi else
2230*53ee8cc1Swenshuai.xi {
2231*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
2232*53ee8cc1Swenshuai.xi }
2233*53ee8cc1Swenshuai.xi }
2234*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWESetDispWin_U2(void * pInstance,MS_U16 u16MWE_Disp_Hstart,MS_U16 u16MWE_Disp_Vstart,MS_U16 u16MWE_Disp_Width,MS_U16 u16MWE_Disp_Height)2235*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWESetDispWin_U2(void *pInstance, MS_U16 u16MWE_Disp_Hstart, MS_U16 u16MWE_Disp_Vstart, MS_U16 u16MWE_Disp_Width, MS_U16 u16MWE_Disp_Height)
2236*53ee8cc1Swenshuai.xi {
2237*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2238*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2239*53ee8cc1Swenshuai.xi g_XC_ACE_InitData.u16MWE_Disp_Hstart = u16MWE_Disp_Hstart;
2240*53ee8cc1Swenshuai.xi g_XC_ACE_InitData.u16MWE_Disp_Vstart = u16MWE_Disp_Vstart;
2241*53ee8cc1Swenshuai.xi g_XC_ACE_InitData.u16MWE_Disp_Width = u16MWE_Disp_Width;
2242*53ee8cc1Swenshuai.xi g_XC_ACE_InitData.u16MWE_Disp_Height = u16MWE_Disp_Height;
2243*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2244*53ee8cc1Swenshuai.xi }
2245*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWESetDispWin(MS_U16 u16MWE_Disp_Hstart,MS_U16 u16MWE_Disp_Vstart,MS_U16 u16MWE_Disp_Width,MS_U16 u16MWE_Disp_Height)2246*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWESetDispWin(MS_U16 u16MWE_Disp_Hstart, MS_U16 u16MWE_Disp_Vstart, MS_U16 u16MWE_Disp_Width, MS_U16 u16MWE_Disp_Height)
2247*53ee8cc1Swenshuai.xi {
2248*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2249*53ee8cc1Swenshuai.xi {
2250*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2251*53ee8cc1Swenshuai.xi return;
2252*53ee8cc1Swenshuai.xi }
2253*53ee8cc1Swenshuai.xi
2254*53ee8cc1Swenshuai.xi stACE_MWESetDispWin ACEArgs;
2255*53ee8cc1Swenshuai.xi ACEArgs.u16MWE_Disp_Hstart = u16MWE_Disp_Hstart;
2256*53ee8cc1Swenshuai.xi ACEArgs.u16MWE_Disp_Vstart = u16MWE_Disp_Vstart;
2257*53ee8cc1Swenshuai.xi ACEArgs.u16MWE_Disp_Width = u16MWE_Disp_Width;
2258*53ee8cc1Swenshuai.xi ACEArgs.u16MWE_Disp_Height = u16MWE_Disp_Height;
2259*53ee8cc1Swenshuai.xi
2260*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_MWESETDISPWIN, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2261*53ee8cc1Swenshuai.xi {
2262*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2263*53ee8cc1Swenshuai.xi }
2264*53ee8cc1Swenshuai.xi return;
2265*53ee8cc1Swenshuai.xi }
2266*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWEStatus_U2(void * pInstance)2267*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_MWEStatus_U2(void *pInstance)
2268*53ee8cc1Swenshuai.xi {
2269*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2270*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2271*53ee8cc1Swenshuai.xi
2272*53ee8cc1Swenshuai.xi MS_BOOL bMWEStatusRet = MDrv_XC_GetMWEStatus(pInstance);
2273*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2274*53ee8cc1Swenshuai.xi return bMWEStatusRet;
2275*53ee8cc1Swenshuai.xi }
2276*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWEStatus(void)2277*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_MWEStatus(void)
2278*53ee8cc1Swenshuai.xi {
2279*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2280*53ee8cc1Swenshuai.xi {
2281*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2282*53ee8cc1Swenshuai.xi return FALSE;
2283*53ee8cc1Swenshuai.xi }
2284*53ee8cc1Swenshuai.xi
2285*53ee8cc1Swenshuai.xi stACE_MWEStatus ACEArgs;
2286*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
2287*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_MWESTATUS, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2288*53ee8cc1Swenshuai.xi {
2289*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2290*53ee8cc1Swenshuai.xi return FALSE;
2291*53ee8cc1Swenshuai.xi }
2292*53ee8cc1Swenshuai.xi else
2293*53ee8cc1Swenshuai.xi {
2294*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
2295*53ee8cc1Swenshuai.xi }
2296*53ee8cc1Swenshuai.xi }
2297*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWEFuncSel_U2(void * pInstance,MS_BOOL eWindow,E_XC_ACE_MWE_FUNC mwe_func)2298*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWEFuncSel_U2(void *pInstance, MS_BOOL eWindow, E_XC_ACE_MWE_FUNC mwe_func)
2299*53ee8cc1Swenshuai.xi {
2300*53ee8cc1Swenshuai.xi MS_U8 u8border_color;
2301*53ee8cc1Swenshuai.xi MS_U16 u16border_l, u16border_r, u16border_t, u16border_d;
2302*53ee8cc1Swenshuai.xi MS_BOOL border_en;
2303*53ee8cc1Swenshuai.xi MS_S16 s16HShiftStep;
2304*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2305*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2306*53ee8cc1Swenshuai.xi
2307*53ee8cc1Swenshuai.xi if (mwe_func == E_XC_ACE_MWE_MODE_OFF && _MWEFunc == E_XC_ACE_MWE_MODE_OFF)
2308*53ee8cc1Swenshuai.xi {
2309*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2310*53ee8cc1Swenshuai.xi return;
2311*53ee8cc1Swenshuai.xi }
2312*53ee8cc1Swenshuai.xi
2313*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2314*53ee8cc1Swenshuai.xi
2315*53ee8cc1Swenshuai.xi _MWEFunc = mwe_func;
2316*53ee8cc1Swenshuai.xi u16border_l = 0x00;
2317*53ee8cc1Swenshuai.xi u16border_r = 0x00;
2318*53ee8cc1Swenshuai.xi u16border_t = 0x00;
2319*53ee8cc1Swenshuai.xi u16border_d = 0x00;
2320*53ee8cc1Swenshuai.xi
2321*53ee8cc1Swenshuai.xi switch (_MWEFunc)
2322*53ee8cc1Swenshuai.xi {
2323*53ee8cc1Swenshuai.xi default:
2324*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_OFF:
2325*53ee8cc1Swenshuai.xi gMWERect.Xsize = 0xFFF;
2326*53ee8cc1Swenshuai.xi gMWERect.Ysize = 0xFFF;
2327*53ee8cc1Swenshuai.xi gMWERect.Xpos = 0;
2328*53ee8cc1Swenshuai.xi gMWERect.Ypos = 0;
2329*53ee8cc1Swenshuai.xi u8border_color = MWE_BORDER_COLOR_BLACK;
2330*53ee8cc1Swenshuai.xi border_en = DISABLE;
2331*53ee8cc1Swenshuai.xi break;
2332*53ee8cc1Swenshuai.xi
2333*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_H_SCAN:
2334*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_H_SPLIT:
2335*53ee8cc1Swenshuai.xi
2336*53ee8cc1Swenshuai.xi if( _MWEFunc == E_XC_ACE_MWE_MODE_H_SPLIT )
2337*53ee8cc1Swenshuai.xi {
2338*53ee8cc1Swenshuai.xi gMWERect.Xpos = 0;
2339*53ee8cc1Swenshuai.xi gMWERect.Ypos = 0;
2340*53ee8cc1Swenshuai.xi }
2341*53ee8cc1Swenshuai.xi
2342*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG(" [MWE] H-SPLIT-RIGHT/H-SCAN Function \n");
2343*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("[MWE]_in_panel;_enMirrorMode=%u,Ds-x[%u],Ds-y[%u],Ds-w[%u],Ds-h[%u].\n",_enMirrorMode,
2344*53ee8cc1Swenshuai.xi g_XC_ACE_InitData.u16MWEHstart,g_XC_ACE_InitData.u16MWEVstart, g_XC_ACE_InitData.u16MWEWidth,g_XC_ACE_InitData.u16MWEHeight);
2345*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("[MWE]_in_buffer;_enMirrorMode=%u,Ds-x[%u],Ds-y[%u],Ds-w[%u],Ds-h[%u].\n",_enMirrorMode,
2346*53ee8cc1Swenshuai.xi gMWERect.Xpos,gMWERect.Ypos,gMWERect.Xsize,gMWERect.Ysize);
2347*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("[MWE]_in_disp;_enMirrorMode=%u,Ds-x[%u],Ds-y[%u],Ds-w[%u],Ds-h[%u].\n",_enMirrorMode,
2348*53ee8cc1Swenshuai.xi g_XC_ACE_InitData.u16MWE_Disp_Hstart,g_XC_ACE_InitData.u16MWE_Disp_Vstart,g_XC_ACE_InitData.u16MWE_Disp_Width/2,g_XC_ACE_InitData.u16MWE_Disp_Height);
2349*53ee8cc1Swenshuai.xi
2350*53ee8cc1Swenshuai.xi //for fix H shift step when Display is 1/2.
2351*53ee8cc1Swenshuai.xi s16HShiftStep = g_XC_ACE_InitData.u16MWE_Disp_Width - g_XC_ACE_InitData.u16MWEWidth;
2352*53ee8cc1Swenshuai.xi
2353*53ee8cc1Swenshuai.xi
2354*53ee8cc1Swenshuai.xi //w and h size
2355*53ee8cc1Swenshuai.xi if(_enMirrorMode == E_XC_ACE_MWE_MIRROR_HV)
2356*53ee8cc1Swenshuai.xi {
2357*53ee8cc1Swenshuai.xi //for fix screen shift function in contrast expander function
2358*53ee8cc1Swenshuai.xi if((abs(g_XC_ACE_InitData.u16MWE_Disp_Width - g_XC_ACE_InitData.u16MWEWidth)) <= 10)
2359*53ee8cc1Swenshuai.xi {
2360*53ee8cc1Swenshuai.xi if (g_XC_ACE_InitData.u16MWE_Disp_Hstart == 0)
2361*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWEWidth/2;
2362*53ee8cc1Swenshuai.xi else
2363*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWEWidth/2 + s16HShiftStep;
2364*53ee8cc1Swenshuai.xi }
2365*53ee8cc1Swenshuai.xi else
2366*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWE_Disp_Width/2;
2367*53ee8cc1Swenshuai.xi }
2368*53ee8cc1Swenshuai.xi else
2369*53ee8cc1Swenshuai.xi {
2370*53ee8cc1Swenshuai.xi //for fix screen shift function in contrast expander function
2371*53ee8cc1Swenshuai.xi if((abs(g_XC_ACE_InitData.u16MWE_Disp_Width - g_XC_ACE_InitData.u16MWEWidth)) <= 10)
2372*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWEWidth/2 + s16HShiftStep;
2373*53ee8cc1Swenshuai.xi else
2374*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWE_Disp_Width/2;
2375*53ee8cc1Swenshuai.xi }
2376*53ee8cc1Swenshuai.xi
2377*53ee8cc1Swenshuai.xi gMWERect.Ysize = g_XC_ACE_InitData.u16MWE_Disp_Height;
2378*53ee8cc1Swenshuai.xi
2379*53ee8cc1Swenshuai.xi //x and y start position
2380*53ee8cc1Swenshuai.xi if(_enMirrorMode == E_XC_ACE_MWE_MIRROR_NORMAL || _enMirrorMode == E_XC_ACE_MWE_MIRROR_V_ONLY)
2381*53ee8cc1Swenshuai.xi {
2382*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWE_Disp_Vstart+g_XC_ACE_InitData.u16MWE_Disp_Height - gMWERect.Ysize;
2383*53ee8cc1Swenshuai.xi //for patch 4:3 in contrast expander function
2384*53ee8cc1Swenshuai.xi if (g_XC_ACE_InitData.u16MWEWidth > g_XC_ACE_InitData.u16MWE_Disp_Hstart)
2385*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWEWidth/2;
2386*53ee8cc1Swenshuai.xi else
2387*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWE_Disp_Hstart + g_XC_ACE_InitData.u16MWEWidth/2;
2388*53ee8cc1Swenshuai.xi }
2389*53ee8cc1Swenshuai.xi else if(_enMirrorMode == E_XC_ACE_MWE_MIRROR_HV)
2390*53ee8cc1Swenshuai.xi {
2391*53ee8cc1Swenshuai.xi if( g_XC_ACE_InitData.u16MWEWidth > ( g_XC_ACE_InitData.u16MWE_Disp_Hstart + g_XC_ACE_InitData.u16MWE_Disp_Width) )
2392*53ee8cc1Swenshuai.xi {
2393*53ee8cc1Swenshuai.xi //for patch 4:3 in contrast expander function
2394*53ee8cc1Swenshuai.xi if (g_XC_ACE_InitData.u16MWEWidth > g_XC_ACE_InitData.u16MWE_Disp_Hstart)
2395*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWEWidth - ( gMWERect.Xpos + g_XC_ACE_InitData.u16MWE_Disp_Width ) - g_XC_ACE_InitData.u16MWE_Disp_Hstart;
2396*53ee8cc1Swenshuai.xi else
2397*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWEWidth - ( gMWERect.Xpos + g_XC_ACE_InitData.u16MWE_Disp_Width );
2398*53ee8cc1Swenshuai.xi }
2399*53ee8cc1Swenshuai.xi else
2400*53ee8cc1Swenshuai.xi {
2401*53ee8cc1Swenshuai.xi gMWERect.Xpos = 0;
2402*53ee8cc1Swenshuai.xi }
2403*53ee8cc1Swenshuai.xi
2404*53ee8cc1Swenshuai.xi if( g_XC_ACE_InitData.u16MWEHeight > ( g_XC_ACE_InitData.u16MWE_Disp_Vstart + g_XC_ACE_InitData.u16MWE_Disp_Height) )
2405*53ee8cc1Swenshuai.xi {
2406*53ee8cc1Swenshuai.xi //for patch smart view in contrast expander function
2407*53ee8cc1Swenshuai.xi if ((g_XC_ACE_InitData.u16MWE_Disp_Vstart != 0) && (g_XC_ACE_InitData.u16MWE_Disp_Height != g_XC_ACE_InitData.u16MWEHeight))
2408*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWEHeight- ( gMWERect.Ypos + g_XC_ACE_InitData.u16MWE_Disp_Height ) - g_XC_ACE_InitData.u16MWE_Disp_Vstart;
2409*53ee8cc1Swenshuai.xi else
2410*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWEHeight - ( gMWERect.Ypos + g_XC_ACE_InitData.u16MWE_Disp_Height );
2411*53ee8cc1Swenshuai.xi }
2412*53ee8cc1Swenshuai.xi else
2413*53ee8cc1Swenshuai.xi {
2414*53ee8cc1Swenshuai.xi gMWERect.Ypos = 0;
2415*53ee8cc1Swenshuai.xi }
2416*53ee8cc1Swenshuai.xi }
2417*53ee8cc1Swenshuai.xi else
2418*53ee8cc1Swenshuai.xi {
2419*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWE_Disp_Hstart+g_XC_ACE_InitData.u16MWE_Disp_Width - gMWERect.Xsize;
2420*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWE_Disp_Vstart+g_XC_ACE_InitData.u16MWE_Disp_Height - gMWERect.Ysize;
2421*53ee8cc1Swenshuai.xi }
2422*53ee8cc1Swenshuai.xi
2423*53ee8cc1Swenshuai.xi XC_ACE_DBG_MSG("[MWE]_out2;_enMirrorMode=%u,Ds-x[%u],Ds-y[%u],Ds-w[%u],Ds-h[%u].\n",_enMirrorMode,gMWERect.Xpos,gMWERect.Ypos,
2424*53ee8cc1Swenshuai.xi gMWERect.Xsize,gMWERect.Ysize);
2425*53ee8cc1Swenshuai.xi
2426*53ee8cc1Swenshuai.xi u8border_color = MWE_BORDER_COLOR_BLUE;
2427*53ee8cc1Swenshuai.xi u16border_l = 0x02;
2428*53ee8cc1Swenshuai.xi border_en = ENABLE;
2429*53ee8cc1Swenshuai.xi break;
2430*53ee8cc1Swenshuai.xi
2431*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_H_SPLIT_LEFT:
2432*53ee8cc1Swenshuai.xi ACE_DBG_MSG(" [MWE] H-SPLIT-LEFT\n");
2433*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWE_Disp_Width / 2;
2434*53ee8cc1Swenshuai.xi gMWERect.Ysize = g_XC_ACE_InitData.u16MWE_Disp_Height;
2435*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWE_Disp_Hstart;
2436*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWE_Disp_Vstart;
2437*53ee8cc1Swenshuai.xi u8border_color = MWE_BORDER_COLOR_BLUE;
2438*53ee8cc1Swenshuai.xi u16border_l = 0x02;
2439*53ee8cc1Swenshuai.xi border_en = ENABLE;
2440*53ee8cc1Swenshuai.xi break;
2441*53ee8cc1Swenshuai.xi
2442*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_MOVE:
2443*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWE_Disp_Width/3;
2444*53ee8cc1Swenshuai.xi gMWERect.Ysize =g_XC_ACE_InitData.u16MWE_Disp_Height/3;
2445*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWE_Disp_Hstart+g_XC_ACE_InitData.u16MWE_Disp_Width - gMWERect.Xsize;
2446*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWE_Disp_Vstart+g_XC_ACE_InitData.u16MWE_Disp_Height - gMWERect.Ysize;
2447*53ee8cc1Swenshuai.xi u8border_color = MWE_BORDER_COLOR_BLUE;
2448*53ee8cc1Swenshuai.xi u16border_l = 0x11;
2449*53ee8cc1Swenshuai.xi u16border_r = 0x11;
2450*53ee8cc1Swenshuai.xi u16border_t = 0x11;
2451*53ee8cc1Swenshuai.xi u16border_d = 0x11;
2452*53ee8cc1Swenshuai.xi border_en = ENABLE;
2453*53ee8cc1Swenshuai.xi break;
2454*53ee8cc1Swenshuai.xi
2455*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_ZOOM:
2456*53ee8cc1Swenshuai.xi gMWERect.Xsize = g_XC_ACE_InitData.u16MWE_Disp_Width/2;
2457*53ee8cc1Swenshuai.xi gMWERect.Ysize = g_XC_ACE_InitData.u16MWE_Disp_Height/2;
2458*53ee8cc1Swenshuai.xi gMWERect.Xpos = g_XC_ACE_InitData.u16MWE_Disp_Hstart+g_XC_ACE_InitData.u16MWE_Disp_Width - gMWERect.Xsize;
2459*53ee8cc1Swenshuai.xi gMWERect.Ypos = g_XC_ACE_InitData.u16MWE_Disp_Vstart+g_XC_ACE_InitData.u16MWE_Disp_Height - gMWERect.Ysize;
2460*53ee8cc1Swenshuai.xi u8border_color = MWE_BORDER_COLOR_BLUE;
2461*53ee8cc1Swenshuai.xi border_en = DISABLE;
2462*53ee8cc1Swenshuai.xi break;
2463*53ee8cc1Swenshuai.xi }
2464*53ee8cc1Swenshuai.xi
2465*53ee8cc1Swenshuai.xi //ToDo: need to use drvPQ to adjsut picture quality
2466*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWESetWin(pInstance, &gMWERect);
2467*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWESetBorder(pInstance, eWindow, border_en, u8border_color,
2468*53ee8cc1Swenshuai.xi u16border_l, u16border_r, u16border_t, u16border_d);
2469*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2470*53ee8cc1Swenshuai.xi
2471*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2472*53ee8cc1Swenshuai.xi }
2473*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWEFuncSel(MS_BOOL eWindow,E_XC_ACE_MWE_FUNC mwe_func)2474*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWEFuncSel( MS_BOOL eWindow, E_XC_ACE_MWE_FUNC mwe_func)
2475*53ee8cc1Swenshuai.xi {
2476*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2477*53ee8cc1Swenshuai.xi {
2478*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2479*53ee8cc1Swenshuai.xi return;
2480*53ee8cc1Swenshuai.xi }
2481*53ee8cc1Swenshuai.xi
2482*53ee8cc1Swenshuai.xi stACE_MWEFuncSel ACEArgs;
2483*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
2484*53ee8cc1Swenshuai.xi ACEArgs.mwe_func = mwe_func;
2485*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_MWEFUNCSEL, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2486*53ee8cc1Swenshuai.xi {
2487*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2488*53ee8cc1Swenshuai.xi }
2489*53ee8cc1Swenshuai.xi return;
2490*53ee8cc1Swenshuai.xi }
2491*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWEScan(void * pInstance)2492*53ee8cc1Swenshuai.xi static void MApi_XC_ACE_MWEScan(void *pInstance)
2493*53ee8cc1Swenshuai.xi {
2494*53ee8cc1Swenshuai.xi MS_U32 xpos;
2495*53ee8cc1Swenshuai.xi MS_U32 MWE_MAX_XPOS, MWE_MIN_XPOS;
2496*53ee8cc1Swenshuai.xi MWE_RECT *pRect;
2497*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2498*53ee8cc1Swenshuai.xi
2499*53ee8cc1Swenshuai.xi pRect = &gMWERect;
2500*53ee8cc1Swenshuai.xi
2501*53ee8cc1Swenshuai.xi MWE_MIN_XPOS = g_XC_ACE_InitData.u16MWE_Disp_Hstart;
2502*53ee8cc1Swenshuai.xi MWE_MAX_XPOS = MWE_MIN_XPOS + g_XC_ACE_InitData.u16MWE_Disp_Width -1;
2503*53ee8cc1Swenshuai.xi xpos = pRect->Xpos;
2504*53ee8cc1Swenshuai.xi
2505*53ee8cc1Swenshuai.xi if(_MWEFlag& MWE_MOVE_RIGHT)
2506*53ee8cc1Swenshuai.xi {
2507*53ee8cc1Swenshuai.xi if( (xpos + MWE_H_STEP) > ((MS_U32)MWE_MAX_XPOS))
2508*53ee8cc1Swenshuai.xi {
2509*53ee8cc1Swenshuai.xi xpos = MWE_MAX_XPOS;
2510*53ee8cc1Swenshuai.xi _MWEFlag &= ~MWE_MOVE_RIGHT;
2511*53ee8cc1Swenshuai.xi }
2512*53ee8cc1Swenshuai.xi else
2513*53ee8cc1Swenshuai.xi {
2514*53ee8cc1Swenshuai.xi xpos += MWE_H_STEP;
2515*53ee8cc1Swenshuai.xi }
2516*53ee8cc1Swenshuai.xi }
2517*53ee8cc1Swenshuai.xi else
2518*53ee8cc1Swenshuai.xi {
2519*53ee8cc1Swenshuai.xi if(xpos > MWE_H_STEP)
2520*53ee8cc1Swenshuai.xi {
2521*53ee8cc1Swenshuai.xi if ( (xpos - MWE_H_STEP) > ((MS_U32)MWE_MIN_XPOS))
2522*53ee8cc1Swenshuai.xi {
2523*53ee8cc1Swenshuai.xi xpos -= MWE_H_STEP;
2524*53ee8cc1Swenshuai.xi }
2525*53ee8cc1Swenshuai.xi else
2526*53ee8cc1Swenshuai.xi {
2527*53ee8cc1Swenshuai.xi xpos = MWE_MIN_XPOS;
2528*53ee8cc1Swenshuai.xi _MWEFlag |= MWE_MOVE_RIGHT;
2529*53ee8cc1Swenshuai.xi }
2530*53ee8cc1Swenshuai.xi }
2531*53ee8cc1Swenshuai.xi else
2532*53ee8cc1Swenshuai.xi {
2533*53ee8cc1Swenshuai.xi _MWEFlag |= MWE_MOVE_RIGHT;
2534*53ee8cc1Swenshuai.xi }
2535*53ee8cc1Swenshuai.xi }
2536*53ee8cc1Swenshuai.xi
2537*53ee8cc1Swenshuai.xi if (xpos > pRect->Xpos)
2538*53ee8cc1Swenshuai.xi {
2539*53ee8cc1Swenshuai.xi pRect->Xsize -= (xpos-pRect->Xpos);
2540*53ee8cc1Swenshuai.xi }
2541*53ee8cc1Swenshuai.xi else
2542*53ee8cc1Swenshuai.xi {
2543*53ee8cc1Swenshuai.xi pRect->Xsize += (pRect->Xpos-xpos);
2544*53ee8cc1Swenshuai.xi }
2545*53ee8cc1Swenshuai.xi pRect->Xpos = xpos;
2546*53ee8cc1Swenshuai.xi
2547*53ee8cc1Swenshuai.xi ACE_DBG_MSG(" HScan %u, %u\n", pRect->Xpos, pRect->Xsize);
2548*53ee8cc1Swenshuai.xi
2549*53ee8cc1Swenshuai.xi }
2550*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWEHandle_U2(void * pInstance)2551*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWEHandle_U2(void *pInstance)
2552*53ee8cc1Swenshuai.xi {
2553*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2554*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2555*53ee8cc1Swenshuai.xi
2556*53ee8cc1Swenshuai.xi if (_MWEFunc != E_XC_ACE_MWE_MODE_H_SCAN)
2557*53ee8cc1Swenshuai.xi return;
2558*53ee8cc1Swenshuai.xi
2559*53ee8cc1Swenshuai.xi if ((MsOS_GetSystemTime()-_MWETimer) < MWE_TIMER)
2560*53ee8cc1Swenshuai.xi return;
2561*53ee8cc1Swenshuai.xi _MWETimer = MsOS_GetSystemTime();
2562*53ee8cc1Swenshuai.xi
2563*53ee8cc1Swenshuai.xi switch (_MWEFunc)
2564*53ee8cc1Swenshuai.xi {
2565*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_H_SCAN:
2566*53ee8cc1Swenshuai.xi MApi_XC_ACE_MWEScan(pInstance);
2567*53ee8cc1Swenshuai.xi break;
2568*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_MOVE:
2569*53ee8cc1Swenshuai.xi case E_XC_ACE_MWE_MODE_ZOOM:
2570*53ee8cc1Swenshuai.xi default:
2571*53ee8cc1Swenshuai.xi return;
2572*53ee8cc1Swenshuai.xi }
2573*53ee8cc1Swenshuai.xi
2574*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2575*53ee8cc1Swenshuai.xi
2576*53ee8cc1Swenshuai.xi //MApi_XC_WaitOutputVSync(1, 50);
2577*53ee8cc1Swenshuai.xi MDrv_XC_ACE_MWESetWin(pInstance, &gMWERect);
2578*53ee8cc1Swenshuai.xi
2579*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2580*53ee8cc1Swenshuai.xi
2581*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2582*53ee8cc1Swenshuai.xi
2583*53ee8cc1Swenshuai.xi }
2584*53ee8cc1Swenshuai.xi
MApi_XC_ACE_MWEHandle(void)2585*53ee8cc1Swenshuai.xi void MApi_XC_ACE_MWEHandle( void )
2586*53ee8cc1Swenshuai.xi {
2587*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2588*53ee8cc1Swenshuai.xi {
2589*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2590*53ee8cc1Swenshuai.xi return;
2591*53ee8cc1Swenshuai.xi }
2592*53ee8cc1Swenshuai.xi
2593*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_MWEHANDLE, (void*)NULL) != UTOPIA_STATUS_SUCCESS)
2594*53ee8cc1Swenshuai.xi {
2595*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2596*53ee8cc1Swenshuai.xi }
2597*53ee8cc1Swenshuai.xi return;
2598*53ee8cc1Swenshuai.xi }
2599*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Set_IHC_SRAM_U2(void * pInstance,MS_U16 * pBuf,MS_U16 u16ByteSize)2600*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Set_IHC_SRAM_U2(void *pInstance, MS_U16 *pBuf, MS_U16 u16ByteSize)
2601*53ee8cc1Swenshuai.xi {
2602*53ee8cc1Swenshuai.xi MS_BOOL bRet;
2603*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2604*53ee8cc1Swenshuai.xi
2605*53ee8cc1Swenshuai.xi bRet = MDrv_XC_ACE_Set_IHC_SRAM(pInstance, pBuf, u16ByteSize);
2606*53ee8cc1Swenshuai.xi
2607*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2608*53ee8cc1Swenshuai.xi
2609*53ee8cc1Swenshuai.xi return bRet;
2610*53ee8cc1Swenshuai.xi }
2611*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Set_IHC_SRAM(MS_U16 * pBuf,MS_U16 u16ByteSize)2612*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Set_IHC_SRAM(MS_U16 *pBuf, MS_U16 u16ByteSize)
2613*53ee8cc1Swenshuai.xi {
2614*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2615*53ee8cc1Swenshuai.xi {
2616*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2617*53ee8cc1Swenshuai.xi return FALSE;
2618*53ee8cc1Swenshuai.xi }
2619*53ee8cc1Swenshuai.xi
2620*53ee8cc1Swenshuai.xi stACE_Set_IHC_SRAM ACEArgs;
2621*53ee8cc1Swenshuai.xi ACEArgs.pBuf = pBuf;
2622*53ee8cc1Swenshuai.xi ACEArgs.u16ByteSize = u16ByteSize;
2623*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
2624*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SET_IHC_SRAM, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2625*53ee8cc1Swenshuai.xi {
2626*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2627*53ee8cc1Swenshuai.xi return FALSE;
2628*53ee8cc1Swenshuai.xi }
2629*53ee8cc1Swenshuai.xi else
2630*53ee8cc1Swenshuai.xi {
2631*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
2632*53ee8cc1Swenshuai.xi }
2633*53ee8cc1Swenshuai.xi }
2634*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Set_ICC_SRAM_U2(void * pInstance,MS_U16 * pBuf,MS_U16 u16ByteSize)2635*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Set_ICC_SRAM_U2(void *pInstance, MS_U16 *pBuf, MS_U16 u16ByteSize)
2636*53ee8cc1Swenshuai.xi {
2637*53ee8cc1Swenshuai.xi MS_BOOL bRet;
2638*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2639*53ee8cc1Swenshuai.xi
2640*53ee8cc1Swenshuai.xi bRet = MDrv_XC_ACE_Set_ICC_SRAM(pInstance, pBuf, u16ByteSize);
2641*53ee8cc1Swenshuai.xi
2642*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2643*53ee8cc1Swenshuai.xi
2644*53ee8cc1Swenshuai.xi return bRet;
2645*53ee8cc1Swenshuai.xi }
2646*53ee8cc1Swenshuai.xi
MApi_XC_ACE_Set_ICC_SRAM(MS_U16 * pBuf,MS_U16 u16ByteSize)2647*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_Set_ICC_SRAM(MS_U16 *pBuf, MS_U16 u16ByteSize)
2648*53ee8cc1Swenshuai.xi {
2649*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2650*53ee8cc1Swenshuai.xi {
2651*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2652*53ee8cc1Swenshuai.xi return FALSE;
2653*53ee8cc1Swenshuai.xi }
2654*53ee8cc1Swenshuai.xi
2655*53ee8cc1Swenshuai.xi stACE_Set_ICC_SRAM ACEArgs;
2656*53ee8cc1Swenshuai.xi ACEArgs.pBuf = pBuf;
2657*53ee8cc1Swenshuai.xi ACEArgs.u16ByteSize = u16ByteSize;
2658*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE;
2659*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SET_ICC_SRAM, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2660*53ee8cc1Swenshuai.xi {
2661*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2662*53ee8cc1Swenshuai.xi return FALSE;
2663*53ee8cc1Swenshuai.xi }
2664*53ee8cc1Swenshuai.xi else
2665*53ee8cc1Swenshuai.xi {
2666*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
2667*53ee8cc1Swenshuai.xi }
2668*53ee8cc1Swenshuai.xi }
2669*53ee8cc1Swenshuai.xi
2670*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2671*53ee8cc1Swenshuai.xi //
2672*53ee8cc1Swenshuai.xi // DynamicNR start
2673*53ee8cc1Swenshuai.xi //
2674*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2675*53ee8cc1Swenshuai.xi #define NR_DBG(x) //x
2676*53ee8cc1Swenshuai.xi
2677*53ee8cc1Swenshuai.xi #define DYNAMIC_NR_TBL_REG_NUM 8
2678*53ee8cc1Swenshuai.xi #define DYNAMICNR_DEFLICKER_PRECISION_SHFIT 64UL
2679*53ee8cc1Swenshuai.xi #define DYNAMICNR_DEFLICK_TOTAL 32UL
2680*53ee8cc1Swenshuai.xi #define DYNAMICNR_DEFLICK_STABLE_CNT 0x10
2681*53ee8cc1Swenshuai.xi
2682*53ee8cc1Swenshuai.xi #if 0
2683*53ee8cc1Swenshuai.xi MS_U8 g_u8MotionStableCnt;
2684*53ee8cc1Swenshuai.xi MS_U8 g_u8LumaStableCnt;
2685*53ee8cc1Swenshuai.xi MS_U8 g_u8FlickStableCnt;
2686*53ee8cc1Swenshuai.xi #endif
2687*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Get_PrecisionShift_U2(void * pInstance)2688*53ee8cc1Swenshuai.xi MS_U16 MApi_XC_ACE_DNR_Get_PrecisionShift_U2(void *pInstance)
2689*53ee8cc1Swenshuai.xi {
2690*53ee8cc1Swenshuai.xi return DYNAMICNR_DEFLICKER_PRECISION_SHFIT;
2691*53ee8cc1Swenshuai.xi }
2692*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Get_PrecisionShift(void)2693*53ee8cc1Swenshuai.xi MS_U16 MApi_XC_ACE_DNR_Get_PrecisionShift(void)
2694*53ee8cc1Swenshuai.xi {
2695*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2696*53ee8cc1Swenshuai.xi {
2697*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2698*53ee8cc1Swenshuai.xi return 0;
2699*53ee8cc1Swenshuai.xi }
2700*53ee8cc1Swenshuai.xi
2701*53ee8cc1Swenshuai.xi stACE_DNR_Get_PrecisionShift ACEArgs;
2702*53ee8cc1Swenshuai.xi ACEArgs.u16Return = 0;
2703*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_GET_PRECISIONSHIFT, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2704*53ee8cc1Swenshuai.xi {
2705*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2706*53ee8cc1Swenshuai.xi return 0;
2707*53ee8cc1Swenshuai.xi }
2708*53ee8cc1Swenshuai.xi else
2709*53ee8cc1Swenshuai.xi {
2710*53ee8cc1Swenshuai.xi return ACEArgs.u16Return;
2711*53ee8cc1Swenshuai.xi }
2712*53ee8cc1Swenshuai.xi }
2713*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Blending_NRTbl_U2(void * pInstance,MS_U8 * pu8NewNR,MS_U8 u8Weight,MS_U8 u8Step,MS_U16 * pu16PreY0,MS_U16 * pu16PreY1,MS_U8 * pu8NRTBL)2714*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Blending_NRTbl_U2(
2715*53ee8cc1Swenshuai.xi void *pInstance,
2716*53ee8cc1Swenshuai.xi MS_U8 *pu8NewNR,
2717*53ee8cc1Swenshuai.xi MS_U8 u8Weight,
2718*53ee8cc1Swenshuai.xi MS_U8 u8Step,
2719*53ee8cc1Swenshuai.xi MS_U16 *pu16PreY0,
2720*53ee8cc1Swenshuai.xi MS_U16 *pu16PreY1,
2721*53ee8cc1Swenshuai.xi MS_U8 *pu8NRTBL)
2722*53ee8cc1Swenshuai.xi {
2723*53ee8cc1Swenshuai.xi MS_U8 i;
2724*53ee8cc1Swenshuai.xi MS_U16 u16TmpBlend[2];
2725*53ee8cc1Swenshuai.xi
2726*53ee8cc1Swenshuai.xi NR_DBG(printk("CurNR:"));
2727*53ee8cc1Swenshuai.xi for(i=0; i<DYNAMIC_NR_TBL_REG_NUM; i++)
2728*53ee8cc1Swenshuai.xi {
2729*53ee8cc1Swenshuai.xi u16TmpBlend[0] = (MS_U16)(((((MS_U32)u8Weight * ((MS_U32)pu8NewNR[i] & 0x0FL)) * DYNAMICNR_DEFLICKER_PRECISION_SHFIT) +
2730*53ee8cc1Swenshuai.xi ((MS_U32)DYNAMICNR_DEFLICK_TOTAL - (MS_U32)u8Weight) * (MS_U32)pu16PreY0[i]) / DYNAMICNR_DEFLICK_TOTAL);
2731*53ee8cc1Swenshuai.xi
2732*53ee8cc1Swenshuai.xi u16TmpBlend[1] = (MS_U16)(((((MS_U32)u8Weight * (((MS_U32)pu8NewNR[i] & 0xF0L)>>4)) * DYNAMICNR_DEFLICKER_PRECISION_SHFIT) +
2733*53ee8cc1Swenshuai.xi ((MS_U32)DYNAMICNR_DEFLICK_TOTAL - (MS_U32)u8Weight) * (MS_U32)pu16PreY1[i]) / DYNAMICNR_DEFLICK_TOTAL);
2734*53ee8cc1Swenshuai.xi
2735*53ee8cc1Swenshuai.xi
2736*53ee8cc1Swenshuai.xi if(u16TmpBlend[0] > pu16PreY0[i])
2737*53ee8cc1Swenshuai.xi {
2738*53ee8cc1Swenshuai.xi if( (u16TmpBlend[0] - (MS_U16)pu16PreY0[i]) > ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step))
2739*53ee8cc1Swenshuai.xi u16TmpBlend[0] = pu16PreY0[i] + ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step);
2740*53ee8cc1Swenshuai.xi }
2741*53ee8cc1Swenshuai.xi else if(u16TmpBlend[0] < (MS_U16)pu16PreY0[i])
2742*53ee8cc1Swenshuai.xi {
2743*53ee8cc1Swenshuai.xi if( ((MS_U16)pu16PreY0[i] - u16TmpBlend[0]) > ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step))
2744*53ee8cc1Swenshuai.xi u16TmpBlend[0] = pu16PreY0[i] - ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step);
2745*53ee8cc1Swenshuai.xi }
2746*53ee8cc1Swenshuai.xi pu16PreY0[i] = u16TmpBlend[0];
2747*53ee8cc1Swenshuai.xi
2748*53ee8cc1Swenshuai.xi if(u16TmpBlend[1] > pu16PreY1[i])
2749*53ee8cc1Swenshuai.xi {
2750*53ee8cc1Swenshuai.xi if( (u16TmpBlend[1] - (MS_U16)pu16PreY1[i]) > ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step))
2751*53ee8cc1Swenshuai.xi u16TmpBlend[1] = pu16PreY1[i] + ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step);
2752*53ee8cc1Swenshuai.xi }
2753*53ee8cc1Swenshuai.xi else if(u16TmpBlend[1] < (MS_U16)pu16PreY1[i])
2754*53ee8cc1Swenshuai.xi {
2755*53ee8cc1Swenshuai.xi if( ((MS_U16)pu16PreY1[i] - u16TmpBlend[1]) > ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step))
2756*53ee8cc1Swenshuai.xi u16TmpBlend[1] = pu16PreY1[i] - ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step);
2757*53ee8cc1Swenshuai.xi }
2758*53ee8cc1Swenshuai.xi pu16PreY1[i] = u16TmpBlend[1];
2759*53ee8cc1Swenshuai.xi pu8NRTBL[i] = (MS_U8)(((u16TmpBlend[1] / DYNAMICNR_DEFLICKER_PRECISION_SHFIT)<<4) | (u16TmpBlend[0] / DYNAMICNR_DEFLICKER_PRECISION_SHFIT));
2760*53ee8cc1Swenshuai.xi
2761*53ee8cc1Swenshuai.xi NR_DBG(printk(" %02bx, ", pu8NRTBL[i]));
2762*53ee8cc1Swenshuai.xi }
2763*53ee8cc1Swenshuai.xi NR_DBG(printk("\n"));
2764*53ee8cc1Swenshuai.xi }
2765*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Blending_NRTbl(MS_U8 * pu8NewNR,MS_U8 u8Weight,MS_U8 u8Step,MS_U16 * pu16PreY0,MS_U16 * pu16PreY1,MS_U8 * pu8NRTBL)2766*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Blending_NRTbl(
2767*53ee8cc1Swenshuai.xi MS_U8 *pu8NewNR,
2768*53ee8cc1Swenshuai.xi MS_U8 u8Weight,
2769*53ee8cc1Swenshuai.xi MS_U8 u8Step,
2770*53ee8cc1Swenshuai.xi MS_U16 *pu16PreY0,
2771*53ee8cc1Swenshuai.xi MS_U16 *pu16PreY1,
2772*53ee8cc1Swenshuai.xi MS_U8 *pu8NRTBL)
2773*53ee8cc1Swenshuai.xi {
2774*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2775*53ee8cc1Swenshuai.xi {
2776*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2777*53ee8cc1Swenshuai.xi return;
2778*53ee8cc1Swenshuai.xi }
2779*53ee8cc1Swenshuai.xi
2780*53ee8cc1Swenshuai.xi stACE_DNR_Blending_NRTbl ACEArgs;
2781*53ee8cc1Swenshuai.xi ACEArgs.pu8NewNR = pu8NewNR;
2782*53ee8cc1Swenshuai.xi ACEArgs.u8Weight = u8Weight;
2783*53ee8cc1Swenshuai.xi ACEArgs.pu16PreY0 = pu16PreY0;
2784*53ee8cc1Swenshuai.xi ACEArgs.pu16PreY1 = pu16PreY1;
2785*53ee8cc1Swenshuai.xi ACEArgs.pu8NRTBL = pu8NRTBL;
2786*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_BLENDING_NRTBL, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2787*53ee8cc1Swenshuai.xi {
2788*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2789*53ee8cc1Swenshuai.xi }
2790*53ee8cc1Swenshuai.xi return;
2791*53ee8cc1Swenshuai.xi }
2792*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Blending_U2(void * pInstance,MS_U8 u8NewItem,MS_U16 u16PreItem,MS_U8 u8Weight)2793*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_Blending_U2(void *pInstance, MS_U8 u8NewItem, MS_U16 u16PreItem, MS_U8 u8Weight)
2794*53ee8cc1Swenshuai.xi {
2795*53ee8cc1Swenshuai.xi MS_U8 u8Blend;
2796*53ee8cc1Swenshuai.xi
2797*53ee8cc1Swenshuai.xi u8Blend = (MS_U8)(((((MS_U32)u8Weight * (MS_U32)u8NewItem)) +
2798*53ee8cc1Swenshuai.xi ((MS_U32)DYNAMICNR_DEFLICK_TOTAL - (MS_U32)u8Weight) * (MS_U32)u16PreItem) / DYNAMICNR_DEFLICK_TOTAL);
2799*53ee8cc1Swenshuai.xi return u8Blend;
2800*53ee8cc1Swenshuai.xi }
2801*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Blending(MS_U8 u8NewItem,MS_U16 u16PreItem,MS_U8 u8Weight)2802*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_Blending(MS_U8 u8NewItem, MS_U16 u16PreItem, MS_U8 u8Weight)
2803*53ee8cc1Swenshuai.xi {
2804*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2805*53ee8cc1Swenshuai.xi {
2806*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2807*53ee8cc1Swenshuai.xi return 0;
2808*53ee8cc1Swenshuai.xi }
2809*53ee8cc1Swenshuai.xi
2810*53ee8cc1Swenshuai.xi stACE_DNR_Blending ACEArgs;
2811*53ee8cc1Swenshuai.xi ACEArgs.u8NewItem = u8NewItem;
2812*53ee8cc1Swenshuai.xi ACEArgs.u16PreItem = u16PreItem;
2813*53ee8cc1Swenshuai.xi ACEArgs.u8Weight = u8Weight;
2814*53ee8cc1Swenshuai.xi ACEArgs.u8Return = 0;
2815*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_BLENDING, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2816*53ee8cc1Swenshuai.xi {
2817*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2818*53ee8cc1Swenshuai.xi return 0;
2819*53ee8cc1Swenshuai.xi }
2820*53ee8cc1Swenshuai.xi else
2821*53ee8cc1Swenshuai.xi {
2822*53ee8cc1Swenshuai.xi return ACEArgs.u8Return;
2823*53ee8cc1Swenshuai.xi }
2824*53ee8cc1Swenshuai.xi }
2825*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Blending_MISC_U2(void * pInstance,MS_U8 u8NewItem,MS_U16 u16PreItem,MS_U8 u8Weight,MS_U8 u8Step)2826*53ee8cc1Swenshuai.xi MS_U16 MApi_XC_ACE_DNR_Blending_MISC_U2(
2827*53ee8cc1Swenshuai.xi void *pInstance,
2828*53ee8cc1Swenshuai.xi MS_U8 u8NewItem,
2829*53ee8cc1Swenshuai.xi MS_U16 u16PreItem,
2830*53ee8cc1Swenshuai.xi MS_U8 u8Weight,
2831*53ee8cc1Swenshuai.xi MS_U8 u8Step)
2832*53ee8cc1Swenshuai.xi {
2833*53ee8cc1Swenshuai.xi MS_U16 u16Blend;
2834*53ee8cc1Swenshuai.xi
2835*53ee8cc1Swenshuai.xi u16Blend = ((((MS_U32)u8Weight * (MS_U32)u8NewItem) * DYNAMICNR_DEFLICKER_PRECISION_SHFIT) +
2836*53ee8cc1Swenshuai.xi ((MS_U32)DYNAMICNR_DEFLICK_TOTAL - (MS_U32)u8Weight) * (MS_U32)u16PreItem) / DYNAMICNR_DEFLICK_TOTAL;
2837*53ee8cc1Swenshuai.xi
2838*53ee8cc1Swenshuai.xi
2839*53ee8cc1Swenshuai.xi if(u16Blend > u16PreItem)
2840*53ee8cc1Swenshuai.xi {
2841*53ee8cc1Swenshuai.xi if( (u16Blend - u16PreItem) > ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step))
2842*53ee8cc1Swenshuai.xi u16Blend = u16PreItem + ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step);
2843*53ee8cc1Swenshuai.xi }
2844*53ee8cc1Swenshuai.xi else if(u16Blend < u16PreItem)
2845*53ee8cc1Swenshuai.xi {
2846*53ee8cc1Swenshuai.xi if( ((MS_U16)u16PreItem - u16Blend) > ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step))
2847*53ee8cc1Swenshuai.xi u16Blend = u16PreItem - ((MS_U16)DYNAMICNR_DEFLICKER_PRECISION_SHFIT * (MS_U16) u8Step);
2848*53ee8cc1Swenshuai.xi }
2849*53ee8cc1Swenshuai.xi
2850*53ee8cc1Swenshuai.xi return u16Blend;
2851*53ee8cc1Swenshuai.xi }
2852*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Blending_MISC(MS_U8 u8NewItem,MS_U16 u16PreItem,MS_U8 u8Weight,MS_U8 u8Step)2853*53ee8cc1Swenshuai.xi MS_U16 MApi_XC_ACE_DNR_Blending_MISC(
2854*53ee8cc1Swenshuai.xi MS_U8 u8NewItem,
2855*53ee8cc1Swenshuai.xi MS_U16 u16PreItem,
2856*53ee8cc1Swenshuai.xi MS_U8 u8Weight,
2857*53ee8cc1Swenshuai.xi MS_U8 u8Step)
2858*53ee8cc1Swenshuai.xi {
2859*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2860*53ee8cc1Swenshuai.xi {
2861*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2862*53ee8cc1Swenshuai.xi return 0;
2863*53ee8cc1Swenshuai.xi }
2864*53ee8cc1Swenshuai.xi
2865*53ee8cc1Swenshuai.xi stACE_DNR_Blending_MISC ACEArgs;
2866*53ee8cc1Swenshuai.xi ACEArgs.u8NewItem = u8NewItem;
2867*53ee8cc1Swenshuai.xi ACEArgs.u16PreItem = u16PreItem;
2868*53ee8cc1Swenshuai.xi ACEArgs.u8Weight = u8Weight;
2869*53ee8cc1Swenshuai.xi ACEArgs.u8Step = u8Step;
2870*53ee8cc1Swenshuai.xi ACEArgs.u16Return = 0;
2871*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_BLENDING_MISC, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2872*53ee8cc1Swenshuai.xi {
2873*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2874*53ee8cc1Swenshuai.xi return 0;
2875*53ee8cc1Swenshuai.xi }
2876*53ee8cc1Swenshuai.xi else
2877*53ee8cc1Swenshuai.xi {
2878*53ee8cc1Swenshuai.xi return ACEArgs.u16Return;
2879*53ee8cc1Swenshuai.xi }
2880*53ee8cc1Swenshuai.xi }
2881*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetMotion_U2(void * pInstance)2882*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetMotion_U2(void *pInstance)
2883*53ee8cc1Swenshuai.xi {
2884*53ee8cc1Swenshuai.xi MS_U8 u8Ret;
2885*53ee8cc1Swenshuai.xi
2886*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
2887*53ee8cc1Swenshuai.xi
2888*53ee8cc1Swenshuai.xi u8Ret = MDrv_XC_ACE_DNR_GetMotion(pInstance);
2889*53ee8cc1Swenshuai.xi
2890*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
2891*53ee8cc1Swenshuai.xi
2892*53ee8cc1Swenshuai.xi return u8Ret;
2893*53ee8cc1Swenshuai.xi }
2894*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetMotion(void)2895*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetMotion(void)
2896*53ee8cc1Swenshuai.xi {
2897*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2898*53ee8cc1Swenshuai.xi {
2899*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2900*53ee8cc1Swenshuai.xi return 0;
2901*53ee8cc1Swenshuai.xi }
2902*53ee8cc1Swenshuai.xi
2903*53ee8cc1Swenshuai.xi stACE_DNR_GetMotion ACEArgs;
2904*53ee8cc1Swenshuai.xi ACEArgs.u8Return = 0;
2905*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_GETMOTION, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
2906*53ee8cc1Swenshuai.xi {
2907*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
2908*53ee8cc1Swenshuai.xi return 0;
2909*53ee8cc1Swenshuai.xi }
2910*53ee8cc1Swenshuai.xi else
2911*53ee8cc1Swenshuai.xi {
2912*53ee8cc1Swenshuai.xi return ACEArgs.u8Return;
2913*53ee8cc1Swenshuai.xi }
2914*53ee8cc1Swenshuai.xi }
2915*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetMotion_Weight_U2(void * pInstance,MS_U8 u8CurMotion,MS_U8 u8PreMotion,MS_U8 u8CurMotionLvl,MS_U8 u8PreMotionLvl,MS_U8 u8DeFlick_Thre,MS_U8 u8DeFilick_Step)2916*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetMotion_Weight_U2(
2917*53ee8cc1Swenshuai.xi void *pInstance,
2918*53ee8cc1Swenshuai.xi MS_U8 u8CurMotion,
2919*53ee8cc1Swenshuai.xi MS_U8 u8PreMotion,
2920*53ee8cc1Swenshuai.xi MS_U8 u8CurMotionLvl,
2921*53ee8cc1Swenshuai.xi MS_U8 u8PreMotionLvl,
2922*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Thre,
2923*53ee8cc1Swenshuai.xi MS_U8 u8DeFilick_Step)
2924*53ee8cc1Swenshuai.xi {
2925*53ee8cc1Swenshuai.xi MS_U8 u8Weight;
2926*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
2927*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
2928*53ee8cc1Swenshuai.xi
2929*53ee8cc1Swenshuai.xi if(u8CurMotion > u8PreMotion)
2930*53ee8cc1Swenshuai.xi {
2931*53ee8cc1Swenshuai.xi if((u8CurMotion - u8PreMotion) < u8DeFlick_Thre)
2932*53ee8cc1Swenshuai.xi {
2933*53ee8cc1Swenshuai.xi if((u8CurMotionLvl - u8PreMotionLvl) <= 1)
2934*53ee8cc1Swenshuai.xi {
2935*53ee8cc1Swenshuai.xi if(g_u8MotionStableCnt != 0xFF)
2936*53ee8cc1Swenshuai.xi g_u8MotionStableCnt++;
2937*53ee8cc1Swenshuai.xi }
2938*53ee8cc1Swenshuai.xi else
2939*53ee8cc1Swenshuai.xi {
2940*53ee8cc1Swenshuai.xi g_u8MotionStableCnt = 0;
2941*53ee8cc1Swenshuai.xi }
2942*53ee8cc1Swenshuai.xi u8Weight = (g_u8MotionStableCnt > DYNAMICNR_DEFLICK_STABLE_CNT) ?
2943*53ee8cc1Swenshuai.xi DYNAMICNR_DEFLICK_TOTAL : u8DeFlick_Thre;
2944*53ee8cc1Swenshuai.xi }
2945*53ee8cc1Swenshuai.xi else
2946*53ee8cc1Swenshuai.xi {
2947*53ee8cc1Swenshuai.xi g_u8MotionStableCnt = 0;
2948*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
2949*53ee8cc1Swenshuai.xi }
2950*53ee8cc1Swenshuai.xi }
2951*53ee8cc1Swenshuai.xi else
2952*53ee8cc1Swenshuai.xi {
2953*53ee8cc1Swenshuai.xi if((u8PreMotion - u8CurMotion) < u8DeFilick_Step)
2954*53ee8cc1Swenshuai.xi {
2955*53ee8cc1Swenshuai.xi if((u8CurMotionLvl - u8PreMotionLvl) <= 1)
2956*53ee8cc1Swenshuai.xi {
2957*53ee8cc1Swenshuai.xi if(g_u8MotionStableCnt != 0xFF)
2958*53ee8cc1Swenshuai.xi g_u8MotionStableCnt++;
2959*53ee8cc1Swenshuai.xi }
2960*53ee8cc1Swenshuai.xi else
2961*53ee8cc1Swenshuai.xi {
2962*53ee8cc1Swenshuai.xi g_u8MotionStableCnt = 0;
2963*53ee8cc1Swenshuai.xi }
2964*53ee8cc1Swenshuai.xi u8Weight = (g_u8MotionStableCnt > DYNAMICNR_DEFLICK_STABLE_CNT) ?
2965*53ee8cc1Swenshuai.xi DYNAMICNR_DEFLICK_TOTAL : u8DeFilick_Step;
2966*53ee8cc1Swenshuai.xi }
2967*53ee8cc1Swenshuai.xi else
2968*53ee8cc1Swenshuai.xi {
2969*53ee8cc1Swenshuai.xi g_u8MotionStableCnt = 0;
2970*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
2971*53ee8cc1Swenshuai.xi }
2972*53ee8cc1Swenshuai.xi }
2973*53ee8cc1Swenshuai.xi
2974*53ee8cc1Swenshuai.xi if(u8Weight > DYNAMICNR_DEFLICK_TOTAL)
2975*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
2976*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
2977*53ee8cc1Swenshuai.xi
2978*53ee8cc1Swenshuai.xi return u8Weight;
2979*53ee8cc1Swenshuai.xi }
2980*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetMotion_Weight(MS_U8 u8CurMotion,MS_U8 u8PreMotion,MS_U8 u8CurMotionLvl,MS_U8 u8PreMotionLvl,MS_U8 u8DeFlick_Thre,MS_U8 u8DeFilick_Step)2981*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetMotion_Weight(
2982*53ee8cc1Swenshuai.xi MS_U8 u8CurMotion,
2983*53ee8cc1Swenshuai.xi MS_U8 u8PreMotion,
2984*53ee8cc1Swenshuai.xi MS_U8 u8CurMotionLvl,
2985*53ee8cc1Swenshuai.xi MS_U8 u8PreMotionLvl,
2986*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Thre,
2987*53ee8cc1Swenshuai.xi MS_U8 u8DeFilick_Step)
2988*53ee8cc1Swenshuai.xi {
2989*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
2990*53ee8cc1Swenshuai.xi {
2991*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
2992*53ee8cc1Swenshuai.xi return 0;
2993*53ee8cc1Swenshuai.xi }
2994*53ee8cc1Swenshuai.xi
2995*53ee8cc1Swenshuai.xi stACE_DNR_GetMotion_Weight ACEArgs;
2996*53ee8cc1Swenshuai.xi ACEArgs.u8CurMotion = u8CurMotion;
2997*53ee8cc1Swenshuai.xi ACEArgs.u8PreMotion = u8PreMotion;
2998*53ee8cc1Swenshuai.xi ACEArgs.u8CurMotionLvl = u8CurMotionLvl;
2999*53ee8cc1Swenshuai.xi ACEArgs.u8PreMotionLvl = u8CurMotionLvl;
3000*53ee8cc1Swenshuai.xi ACEArgs.u8DeFlick_Thre = u8DeFlick_Thre;
3001*53ee8cc1Swenshuai.xi ACEArgs.u8DeFilick_Step = u8DeFilick_Step;
3002*53ee8cc1Swenshuai.xi ACEArgs.u8Return = 0;
3003*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_GETMOTION_WEIGHT, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3004*53ee8cc1Swenshuai.xi {
3005*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3006*53ee8cc1Swenshuai.xi return 0;
3007*53ee8cc1Swenshuai.xi }
3008*53ee8cc1Swenshuai.xi else
3009*53ee8cc1Swenshuai.xi {
3010*53ee8cc1Swenshuai.xi return ACEArgs.u8Return;
3011*53ee8cc1Swenshuai.xi }
3012*53ee8cc1Swenshuai.xi }
3013*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetLuma_Weight_U2(void * pInstance,MS_U8 u8CurAvgLuma,MS_U8 u8PreAvgLuam,MS_U8 u8CurLumaLvl,MS_U8 u8PreLumaLvl,MS_U8 u8DeFlick_Th,MS_U8 u8DeFlick_Step)3014*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetLuma_Weight_U2(
3015*53ee8cc1Swenshuai.xi void *pInstance,
3016*53ee8cc1Swenshuai.xi MS_U8 u8CurAvgLuma,
3017*53ee8cc1Swenshuai.xi MS_U8 u8PreAvgLuam,
3018*53ee8cc1Swenshuai.xi MS_U8 u8CurLumaLvl,
3019*53ee8cc1Swenshuai.xi MS_U8 u8PreLumaLvl,
3020*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Th,
3021*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Step)
3022*53ee8cc1Swenshuai.xi {
3023*53ee8cc1Swenshuai.xi MS_U8 u8Weight;
3024*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3025*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
3026*53ee8cc1Swenshuai.xi
3027*53ee8cc1Swenshuai.xi // Blending for Coring and SNR
3028*53ee8cc1Swenshuai.xi if(u8CurAvgLuma > u8PreAvgLuam)
3029*53ee8cc1Swenshuai.xi {
3030*53ee8cc1Swenshuai.xi if((u8CurAvgLuma - u8PreAvgLuam) < u8DeFlick_Th)
3031*53ee8cc1Swenshuai.xi {
3032*53ee8cc1Swenshuai.xi if((u8CurLumaLvl - u8PreLumaLvl)<=1)
3033*53ee8cc1Swenshuai.xi {
3034*53ee8cc1Swenshuai.xi if(g_u8LumaStableCnt != 0xFF)
3035*53ee8cc1Swenshuai.xi g_u8LumaStableCnt++;
3036*53ee8cc1Swenshuai.xi }
3037*53ee8cc1Swenshuai.xi else
3038*53ee8cc1Swenshuai.xi {
3039*53ee8cc1Swenshuai.xi g_u8LumaStableCnt = 0;
3040*53ee8cc1Swenshuai.xi }
3041*53ee8cc1Swenshuai.xi u8Weight = (g_u8LumaStableCnt > DYNAMICNR_DEFLICK_STABLE_CNT) ?
3042*53ee8cc1Swenshuai.xi DYNAMICNR_DEFLICK_TOTAL :
3043*53ee8cc1Swenshuai.xi u8DeFlick_Step;
3044*53ee8cc1Swenshuai.xi }
3045*53ee8cc1Swenshuai.xi else
3046*53ee8cc1Swenshuai.xi {
3047*53ee8cc1Swenshuai.xi g_u8LumaStableCnt = 0;
3048*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
3049*53ee8cc1Swenshuai.xi }
3050*53ee8cc1Swenshuai.xi }
3051*53ee8cc1Swenshuai.xi else
3052*53ee8cc1Swenshuai.xi {
3053*53ee8cc1Swenshuai.xi if((u8PreAvgLuam - u8CurAvgLuma) < u8DeFlick_Th)
3054*53ee8cc1Swenshuai.xi {
3055*53ee8cc1Swenshuai.xi if((u8CurLumaLvl - u8PreLumaLvl)<=1)
3056*53ee8cc1Swenshuai.xi {
3057*53ee8cc1Swenshuai.xi if(g_u8LumaStableCnt != 0xFF)
3058*53ee8cc1Swenshuai.xi g_u8LumaStableCnt++;
3059*53ee8cc1Swenshuai.xi }
3060*53ee8cc1Swenshuai.xi else
3061*53ee8cc1Swenshuai.xi {
3062*53ee8cc1Swenshuai.xi g_u8LumaStableCnt = 0;
3063*53ee8cc1Swenshuai.xi }
3064*53ee8cc1Swenshuai.xi u8Weight = (g_u8LumaStableCnt > DYNAMICNR_DEFLICK_STABLE_CNT) ?
3065*53ee8cc1Swenshuai.xi DYNAMICNR_DEFLICK_TOTAL :
3066*53ee8cc1Swenshuai.xi u8DeFlick_Step;
3067*53ee8cc1Swenshuai.xi }
3068*53ee8cc1Swenshuai.xi else
3069*53ee8cc1Swenshuai.xi {
3070*53ee8cc1Swenshuai.xi g_u8LumaStableCnt = 0;
3071*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
3072*53ee8cc1Swenshuai.xi }
3073*53ee8cc1Swenshuai.xi }
3074*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3075*53ee8cc1Swenshuai.xi
3076*53ee8cc1Swenshuai.xi return u8Weight;
3077*53ee8cc1Swenshuai.xi }
3078*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetLuma_Weight(MS_U8 u8CurAvgLuma,MS_U8 u8PreAvgLuam,MS_U8 u8CurLumaLvl,MS_U8 u8PreLumaLvl,MS_U8 u8DeFlick_Th,MS_U8 u8DeFlick_Step)3079*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetLuma_Weight(
3080*53ee8cc1Swenshuai.xi MS_U8 u8CurAvgLuma,
3081*53ee8cc1Swenshuai.xi MS_U8 u8PreAvgLuam,
3082*53ee8cc1Swenshuai.xi MS_U8 u8CurLumaLvl,
3083*53ee8cc1Swenshuai.xi MS_U8 u8PreLumaLvl,
3084*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Th,
3085*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Step)
3086*53ee8cc1Swenshuai.xi {
3087*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3088*53ee8cc1Swenshuai.xi {
3089*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3090*53ee8cc1Swenshuai.xi return 0;
3091*53ee8cc1Swenshuai.xi }
3092*53ee8cc1Swenshuai.xi
3093*53ee8cc1Swenshuai.xi stACE_DNR_GetLuma_Weight ACEArgs;
3094*53ee8cc1Swenshuai.xi ACEArgs.u8CurAvgLuma = u8CurAvgLuma;
3095*53ee8cc1Swenshuai.xi ACEArgs.u8PreAvgLuam = u8PreAvgLuam;
3096*53ee8cc1Swenshuai.xi ACEArgs.u8CurLumaLvl = u8CurLumaLvl;
3097*53ee8cc1Swenshuai.xi ACEArgs.u8PreLumaLvl = u8PreLumaLvl;
3098*53ee8cc1Swenshuai.xi ACEArgs.u8DeFlick_Th = u8DeFlick_Th;
3099*53ee8cc1Swenshuai.xi ACEArgs.u8DeFlick_Step = u8DeFlick_Step;
3100*53ee8cc1Swenshuai.xi ACEArgs.u8Return = 0;
3101*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_GETLUMA_WEIGHT, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3102*53ee8cc1Swenshuai.xi {
3103*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3104*53ee8cc1Swenshuai.xi return 0;
3105*53ee8cc1Swenshuai.xi }
3106*53ee8cc1Swenshuai.xi else
3107*53ee8cc1Swenshuai.xi {
3108*53ee8cc1Swenshuai.xi return ACEArgs.u8Return;
3109*53ee8cc1Swenshuai.xi }
3110*53ee8cc1Swenshuai.xi }
3111*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetNoise_Weight_U2(void * pInstance,MS_U8 u8CurNoise,MS_U8 u8PreNoise,MS_U8 u8Range,MS_U8 u8DeFlick_Th,MS_U8 u8DeFlick_Step)3112*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetNoise_Weight_U2(
3113*53ee8cc1Swenshuai.xi void *pInstance,
3114*53ee8cc1Swenshuai.xi MS_U8 u8CurNoise,
3115*53ee8cc1Swenshuai.xi MS_U8 u8PreNoise,
3116*53ee8cc1Swenshuai.xi MS_U8 u8Range,
3117*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Th,
3118*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Step)
3119*53ee8cc1Swenshuai.xi {
3120*53ee8cc1Swenshuai.xi MS_U8 u8Weight;
3121*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3122*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
3123*53ee8cc1Swenshuai.xi
3124*53ee8cc1Swenshuai.xi if(u8CurNoise > u8PreNoise)
3125*53ee8cc1Swenshuai.xi {
3126*53ee8cc1Swenshuai.xi if((u8CurNoise - u8PreNoise) < (u8DeFlick_Th))
3127*53ee8cc1Swenshuai.xi {
3128*53ee8cc1Swenshuai.xi g_u8FlickStableCnt =
3129*53ee8cc1Swenshuai.xi ((u8CurNoise - u8PreNoise) < u8Range) ?
3130*53ee8cc1Swenshuai.xi g_u8FlickStableCnt + 1 : 0;
3131*53ee8cc1Swenshuai.xi
3132*53ee8cc1Swenshuai.xi u8Weight = (g_u8FlickStableCnt == DYNAMICNR_DEFLICK_STABLE_CNT) ?
3133*53ee8cc1Swenshuai.xi DYNAMICNR_DEFLICK_TOTAL :
3134*53ee8cc1Swenshuai.xi u8DeFlick_Step;
3135*53ee8cc1Swenshuai.xi }
3136*53ee8cc1Swenshuai.xi else
3137*53ee8cc1Swenshuai.xi {
3138*53ee8cc1Swenshuai.xi g_u8FlickStableCnt = 0;
3139*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
3140*53ee8cc1Swenshuai.xi }
3141*53ee8cc1Swenshuai.xi }
3142*53ee8cc1Swenshuai.xi else
3143*53ee8cc1Swenshuai.xi {
3144*53ee8cc1Swenshuai.xi if((u8PreNoise - u8CurNoise) < (u8DeFlick_Th))
3145*53ee8cc1Swenshuai.xi {
3146*53ee8cc1Swenshuai.xi g_u8FlickStableCnt =
3147*53ee8cc1Swenshuai.xi ((u8CurNoise - u8PreNoise) < u8Range) ?
3148*53ee8cc1Swenshuai.xi g_u8FlickStableCnt + 1 : 0;
3149*53ee8cc1Swenshuai.xi u8Weight = (g_u8FlickStableCnt == DYNAMICNR_DEFLICK_STABLE_CNT) ?
3150*53ee8cc1Swenshuai.xi DYNAMICNR_DEFLICK_TOTAL :
3151*53ee8cc1Swenshuai.xi u8DeFlick_Step;
3152*53ee8cc1Swenshuai.xi }
3153*53ee8cc1Swenshuai.xi else
3154*53ee8cc1Swenshuai.xi {
3155*53ee8cc1Swenshuai.xi g_u8FlickStableCnt = 0;
3156*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
3157*53ee8cc1Swenshuai.xi }
3158*53ee8cc1Swenshuai.xi }
3159*53ee8cc1Swenshuai.xi
3160*53ee8cc1Swenshuai.xi if(u8Weight > DYNAMICNR_DEFLICK_TOTAL)
3161*53ee8cc1Swenshuai.xi u8Weight = DYNAMICNR_DEFLICK_TOTAL;
3162*53ee8cc1Swenshuai.xi if(u8Weight == 0)
3163*53ee8cc1Swenshuai.xi u8Weight = 1;
3164*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3165*53ee8cc1Swenshuai.xi
3166*53ee8cc1Swenshuai.xi return u8Weight;
3167*53ee8cc1Swenshuai.xi }
3168*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetNoise_Weight(MS_U8 u8CurNoise,MS_U8 u8PreNoise,MS_U8 u8Range,MS_U8 u8DeFlick_Th,MS_U8 u8DeFlick_Step)3169*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetNoise_Weight(
3170*53ee8cc1Swenshuai.xi MS_U8 u8CurNoise,
3171*53ee8cc1Swenshuai.xi MS_U8 u8PreNoise,
3172*53ee8cc1Swenshuai.xi MS_U8 u8Range,
3173*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Th,
3174*53ee8cc1Swenshuai.xi MS_U8 u8DeFlick_Step)
3175*53ee8cc1Swenshuai.xi {
3176*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3177*53ee8cc1Swenshuai.xi {
3178*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3179*53ee8cc1Swenshuai.xi return 0;
3180*53ee8cc1Swenshuai.xi }
3181*53ee8cc1Swenshuai.xi
3182*53ee8cc1Swenshuai.xi stACE_DNR_GetNoise_Weight ACEArgs;
3183*53ee8cc1Swenshuai.xi ACEArgs.u8CurNoise = u8CurNoise;
3184*53ee8cc1Swenshuai.xi ACEArgs.u8PreNoise = u8PreNoise;
3185*53ee8cc1Swenshuai.xi ACEArgs.u8Range = u8Range;
3186*53ee8cc1Swenshuai.xi ACEArgs.u8Range = u8Range;
3187*53ee8cc1Swenshuai.xi ACEArgs.u8DeFlick_Th = u8DeFlick_Th;
3188*53ee8cc1Swenshuai.xi ACEArgs.u8DeFlick_Step = u8DeFlick_Step;
3189*53ee8cc1Swenshuai.xi ACEArgs.u8Return = 0;
3190*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_GETNOISE_WEIGHT, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3191*53ee8cc1Swenshuai.xi {
3192*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3193*53ee8cc1Swenshuai.xi return 0;
3194*53ee8cc1Swenshuai.xi }
3195*53ee8cc1Swenshuai.xi else
3196*53ee8cc1Swenshuai.xi {
3197*53ee8cc1Swenshuai.xi return ACEArgs.u8Return;
3198*53ee8cc1Swenshuai.xi }
3199*53ee8cc1Swenshuai.xi }
3200*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Init_Motion_U2(void * pInstance)3201*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Init_Motion_U2(void *pInstance)
3202*53ee8cc1Swenshuai.xi {
3203*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3204*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
3205*53ee8cc1Swenshuai.xi g_u8MotionStableCnt = 0;
3206*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3207*53ee8cc1Swenshuai.xi }
3208*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Init_Motion(void)3209*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Init_Motion(void)
3210*53ee8cc1Swenshuai.xi {
3211*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3212*53ee8cc1Swenshuai.xi {
3213*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3214*53ee8cc1Swenshuai.xi return;
3215*53ee8cc1Swenshuai.xi }
3216*53ee8cc1Swenshuai.xi
3217*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_INIT_MOTION, (void*)NULL) != UTOPIA_STATUS_SUCCESS)
3218*53ee8cc1Swenshuai.xi {
3219*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3220*53ee8cc1Swenshuai.xi }
3221*53ee8cc1Swenshuai.xi return;
3222*53ee8cc1Swenshuai.xi }
3223*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Init_Luma_U2(void * pInstance)3224*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Init_Luma_U2(void *pInstance)
3225*53ee8cc1Swenshuai.xi {
3226*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3227*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
3228*53ee8cc1Swenshuai.xi g_u8LumaStableCnt = 0;
3229*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3230*53ee8cc1Swenshuai.xi }
3231*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Init_Luma(void)3232*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Init_Luma(void)
3233*53ee8cc1Swenshuai.xi {
3234*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3235*53ee8cc1Swenshuai.xi {
3236*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3237*53ee8cc1Swenshuai.xi return;
3238*53ee8cc1Swenshuai.xi }
3239*53ee8cc1Swenshuai.xi
3240*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_INIT_LUMA, (void*)NULL) != UTOPIA_STATUS_SUCCESS)
3241*53ee8cc1Swenshuai.xi {
3242*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3243*53ee8cc1Swenshuai.xi }
3244*53ee8cc1Swenshuai.xi return;
3245*53ee8cc1Swenshuai.xi }
3246*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Init_Noise_U2(void * pInstance)3247*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Init_Noise_U2(void *pInstance)
3248*53ee8cc1Swenshuai.xi {
3249*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3250*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
3251*53ee8cc1Swenshuai.xi g_u8FlickStableCnt = 0;
3252*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3253*53ee8cc1Swenshuai.xi }
3254*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_Init_Noise(void)3255*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_Init_Noise(void)
3256*53ee8cc1Swenshuai.xi {
3257*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3258*53ee8cc1Swenshuai.xi {
3259*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3260*53ee8cc1Swenshuai.xi return;
3261*53ee8cc1Swenshuai.xi }
3262*53ee8cc1Swenshuai.xi
3263*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_INIT_NOISE, (void*)NULL) != UTOPIA_STATUS_SUCCESS)
3264*53ee8cc1Swenshuai.xi {
3265*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3266*53ee8cc1Swenshuai.xi }
3267*53ee8cc1Swenshuai.xi return;
3268*53ee8cc1Swenshuai.xi }
3269*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetParam_U2(void * pInstance,MS_BOOL eWindow,XC_ACE_DNR_Param eParam)3270*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetParam_U2(void *pInstance, MS_BOOL eWindow, XC_ACE_DNR_Param eParam)
3271*53ee8cc1Swenshuai.xi {
3272*53ee8cc1Swenshuai.xi MS_U8 u8val;
3273*53ee8cc1Swenshuai.xi
3274*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
3275*53ee8cc1Swenshuai.xi
3276*53ee8cc1Swenshuai.xi switch(eParam)
3277*53ee8cc1Swenshuai.xi {
3278*53ee8cc1Swenshuai.xi case E_ACE_DNR_PEAKING_CORING_THRESHOLD:
3279*53ee8cc1Swenshuai.xi u8val = MDrv_ACE_DNR_GetCoringThreshold(pInstance, eWindow);
3280*53ee8cc1Swenshuai.xi break;
3281*53ee8cc1Swenshuai.xi
3282*53ee8cc1Swenshuai.xi case E_ACE_DNR_SHARPNESS_ADJUST:
3283*53ee8cc1Swenshuai.xi u8val = MDrv_ACE_DNR_GetSharpnessAdjust(pInstance, eWindow);
3284*53ee8cc1Swenshuai.xi break;
3285*53ee8cc1Swenshuai.xi
3286*53ee8cc1Swenshuai.xi case E_ACE_DNR_GUASSIN_SNR_THRESHOLD:
3287*53ee8cc1Swenshuai.xi u8val = MDrv_ACE_DNR_GetGuassin_SNR_Threshold(pInstance, eWindow);
3288*53ee8cc1Swenshuai.xi break;
3289*53ee8cc1Swenshuai.xi
3290*53ee8cc1Swenshuai.xi default:
3291*53ee8cc1Swenshuai.xi ACE_DBG_MSG("XC_ACE_DNR: unknown get param %u\n", eParam);
3292*53ee8cc1Swenshuai.xi u8val = 0;
3293*53ee8cc1Swenshuai.xi break;
3294*53ee8cc1Swenshuai.xi }
3295*53ee8cc1Swenshuai.xi
3296*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
3297*53ee8cc1Swenshuai.xi
3298*53ee8cc1Swenshuai.xi return u8val;
3299*53ee8cc1Swenshuai.xi }
3300*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_GetParam(MS_BOOL eWindow,XC_ACE_DNR_Param eParam)3301*53ee8cc1Swenshuai.xi MS_U8 MApi_XC_ACE_DNR_GetParam(MS_BOOL eWindow, XC_ACE_DNR_Param eParam)
3302*53ee8cc1Swenshuai.xi {
3303*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3304*53ee8cc1Swenshuai.xi {
3305*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3306*53ee8cc1Swenshuai.xi return 0;
3307*53ee8cc1Swenshuai.xi }
3308*53ee8cc1Swenshuai.xi
3309*53ee8cc1Swenshuai.xi stACE_DNR_GetParam ACEArgs;
3310*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
3311*53ee8cc1Swenshuai.xi ACEArgs.eParam = eParam;
3312*53ee8cc1Swenshuai.xi ACEArgs.u8Return = 0;
3313*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_GETPARAM, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3314*53ee8cc1Swenshuai.xi {
3315*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3316*53ee8cc1Swenshuai.xi return 0;
3317*53ee8cc1Swenshuai.xi }
3318*53ee8cc1Swenshuai.xi else
3319*53ee8cc1Swenshuai.xi {
3320*53ee8cc1Swenshuai.xi return ACEArgs.u8Return;
3321*53ee8cc1Swenshuai.xi }
3322*53ee8cc1Swenshuai.xi }
3323*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_SetParam_U2(void * pInstance,MS_BOOL eWindow,XC_ACE_DNR_Param eParam,MS_U16 u16val)3324*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_SetParam_U2(void *pInstance, MS_BOOL eWindow, XC_ACE_DNR_Param eParam, MS_U16 u16val)
3325*53ee8cc1Swenshuai.xi {
3326*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
3327*53ee8cc1Swenshuai.xi
3328*53ee8cc1Swenshuai.xi switch(eParam)
3329*53ee8cc1Swenshuai.xi {
3330*53ee8cc1Swenshuai.xi case E_ACE_DNR_PEAKING_BANK_CORING:
3331*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetBank_Coring(pInstance, eWindow, u16val);
3332*53ee8cc1Swenshuai.xi break;
3333*53ee8cc1Swenshuai.xi
3334*53ee8cc1Swenshuai.xi case E_ACE_DNR_GUASSIN_SNR_THRESHOLD:
3335*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetGuassin_SNR_Threshold(pInstance, eWindow, u16val);
3336*53ee8cc1Swenshuai.xi break;
3337*53ee8cc1Swenshuai.xi
3338*53ee8cc1Swenshuai.xi case E_ACE_DNR_PEAKING_CORING_THRESHOLD:
3339*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetCoringThreshold(pInstance, eWindow, u16val);
3340*53ee8cc1Swenshuai.xi break;
3341*53ee8cc1Swenshuai.xi
3342*53ee8cc1Swenshuai.xi case E_ACE_DNR_SHARPNESS_ADJUST:
3343*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetSharpnessAdjust(pInstance, eWindow, u16val);
3344*53ee8cc1Swenshuai.xi break;
3345*53ee8cc1Swenshuai.xi
3346*53ee8cc1Swenshuai.xi case E_ACE_DNR_NM_V:
3347*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetNM_V(pInstance, eWindow, u16val);
3348*53ee8cc1Swenshuai.xi break;
3349*53ee8cc1Swenshuai.xi
3350*53ee8cc1Swenshuai.xi case E_ACE_DNR_GNR_0:
3351*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetGNR_0(pInstance, eWindow, u16val);
3352*53ee8cc1Swenshuai.xi break;
3353*53ee8cc1Swenshuai.xi
3354*53ee8cc1Swenshuai.xi case E_ACE_DNR_GNR_1:
3355*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetGNR_1(pInstance, eWindow, u16val);
3356*53ee8cc1Swenshuai.xi break;
3357*53ee8cc1Swenshuai.xi
3358*53ee8cc1Swenshuai.xi case E_ACE_DNR_CP:
3359*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetCP(pInstance, eWindow, u16val);
3360*53ee8cc1Swenshuai.xi break;
3361*53ee8cc1Swenshuai.xi
3362*53ee8cc1Swenshuai.xi case E_ACE_DNR_DP:
3363*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetDP(pInstance, eWindow, u16val);
3364*53ee8cc1Swenshuai.xi break;
3365*53ee8cc1Swenshuai.xi
3366*53ee8cc1Swenshuai.xi case E_ACE_DNR_NM_H_0:
3367*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetNM_H_0(pInstance, eWindow, u16val);
3368*53ee8cc1Swenshuai.xi break;
3369*53ee8cc1Swenshuai.xi
3370*53ee8cc1Swenshuai.xi case E_ACE_DNR_NM_H_1:
3371*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetNM_H_1(pInstance, eWindow, u16val);
3372*53ee8cc1Swenshuai.xi break;
3373*53ee8cc1Swenshuai.xi
3374*53ee8cc1Swenshuai.xi case E_ACE_DNR_GRAY_GROUND_GAIN:
3375*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetGray_Ground_Gain(pInstance, u16val);
3376*53ee8cc1Swenshuai.xi break;
3377*53ee8cc1Swenshuai.xi
3378*53ee8cc1Swenshuai.xi case E_ACE_DNR_GRAY_GROUND_EN:
3379*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetGray_Ground_En(pInstance, eWindow, u16val);
3380*53ee8cc1Swenshuai.xi break;
3381*53ee8cc1Swenshuai.xi
3382*53ee8cc1Swenshuai.xi case E_ACE_DNR_SC_CORING:
3383*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetSC_Coring(pInstance, eWindow, u16val);
3384*53ee8cc1Swenshuai.xi break;
3385*53ee8cc1Swenshuai.xi
3386*53ee8cc1Swenshuai.xi case E_ACE_DNR_SPIKE_NR_0:
3387*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetSpikeNR_0(pInstance, u16val);
3388*53ee8cc1Swenshuai.xi break;
3389*53ee8cc1Swenshuai.xi
3390*53ee8cc1Swenshuai.xi case E_ACE_DNR_SPIKE_NR_1:
3391*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetSpikeNR_1(pInstance, u16val);
3392*53ee8cc1Swenshuai.xi break;
3393*53ee8cc1Swenshuai.xi
3394*53ee8cc1Swenshuai.xi case E_ACE_DNR_SNR_NM:
3395*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetSNR_NM(pInstance, u16val);
3396*53ee8cc1Swenshuai.xi break;
3397*53ee8cc1Swenshuai.xi
3398*53ee8cc1Swenshuai.xi default:
3399*53ee8cc1Swenshuai.xi ACE_DBG_MSG("XC_ACE_DNR: unknown set Param %u\n", eParam);
3400*53ee8cc1Swenshuai.xi break;
3401*53ee8cc1Swenshuai.xi }
3402*53ee8cc1Swenshuai.xi
3403*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
3404*53ee8cc1Swenshuai.xi }
3405*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_SetParam(MS_BOOL eWindow,XC_ACE_DNR_Param eParam,MS_U16 u16val)3406*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_SetParam(MS_BOOL eWindow, XC_ACE_DNR_Param eParam, MS_U16 u16val)
3407*53ee8cc1Swenshuai.xi {
3408*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3409*53ee8cc1Swenshuai.xi {
3410*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3411*53ee8cc1Swenshuai.xi return;
3412*53ee8cc1Swenshuai.xi }
3413*53ee8cc1Swenshuai.xi
3414*53ee8cc1Swenshuai.xi stACE_DNR_SetParam ACEArgs;
3415*53ee8cc1Swenshuai.xi ACEArgs.eWindow = eWindow;
3416*53ee8cc1Swenshuai.xi ACEArgs.eParam = eParam;
3417*53ee8cc1Swenshuai.xi ACEArgs.u16val = u16val;
3418*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_SETPARAM, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3419*53ee8cc1Swenshuai.xi {
3420*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3421*53ee8cc1Swenshuai.xi }
3422*53ee8cc1Swenshuai.xi return;
3423*53ee8cc1Swenshuai.xi }
3424*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_SetNRTbl_U2(void * pInstance,MS_U8 * pu8Tbl)3425*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_SetNRTbl_U2(void *pInstance, MS_U8 *pu8Tbl)
3426*53ee8cc1Swenshuai.xi {
3427*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3428*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
3429*53ee8cc1Swenshuai.xi MDrv_ACE_DNR_SetNRTable(pInstance, pu8Tbl);
3430*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
3431*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3432*53ee8cc1Swenshuai.xi }
3433*53ee8cc1Swenshuai.xi
MApi_XC_ACE_DNR_SetNRTbl(MS_U8 * pu8Tbl)3434*53ee8cc1Swenshuai.xi void MApi_XC_ACE_DNR_SetNRTbl(MS_U8 *pu8Tbl)
3435*53ee8cc1Swenshuai.xi {
3436*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3437*53ee8cc1Swenshuai.xi {
3438*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3439*53ee8cc1Swenshuai.xi return;
3440*53ee8cc1Swenshuai.xi }
3441*53ee8cc1Swenshuai.xi
3442*53ee8cc1Swenshuai.xi stACE_DNR_SetNRTbl ACEArgs;
3443*53ee8cc1Swenshuai.xi ACEArgs.pu8Tbl = pu8Tbl;
3444*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_DNR_SETNRTBL, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3445*53ee8cc1Swenshuai.xi {
3446*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3447*53ee8cc1Swenshuai.xi }
3448*53ee8cc1Swenshuai.xi return;
3449*53ee8cc1Swenshuai.xi }
3450*53ee8cc1Swenshuai.xi
MApi_XC_ACE_ColorCorrectionTable_U2(void * pInstance,MS_BOOL bScalerWin,MS_S16 * psColorCorrectionTable)3451*53ee8cc1Swenshuai.xi void MApi_XC_ACE_ColorCorrectionTable_U2(void *pInstance, MS_BOOL bScalerWin, MS_S16 *psColorCorrectionTable)
3452*53ee8cc1Swenshuai.xi {
3453*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3454*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
3455*53ee8cc1Swenshuai.xi MDrv_ACE_ColorCorrectionTable(pInstance, bScalerWin, psColorCorrectionTable );
3456*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
3457*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3458*53ee8cc1Swenshuai.xi }
3459*53ee8cc1Swenshuai.xi
MApi_XC_ACE_ColorCorrectionTable(MS_BOOL bScalerWin,MS_S16 * psColorCorrectionTable)3460*53ee8cc1Swenshuai.xi void MApi_XC_ACE_ColorCorrectionTable( MS_BOOL bScalerWin, MS_S16 *psColorCorrectionTable )
3461*53ee8cc1Swenshuai.xi {
3462*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3463*53ee8cc1Swenshuai.xi {
3464*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3465*53ee8cc1Swenshuai.xi return;
3466*53ee8cc1Swenshuai.xi }
3467*53ee8cc1Swenshuai.xi
3468*53ee8cc1Swenshuai.xi stACE_ColorCorrectionTable ACEArgs;
3469*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
3470*53ee8cc1Swenshuai.xi ACEArgs.psColorCorrectionTable = psColorCorrectionTable;
3471*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_COLORCORRECTIONTABLE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3472*53ee8cc1Swenshuai.xi {
3473*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3474*53ee8cc1Swenshuai.xi }
3475*53ee8cc1Swenshuai.xi return;
3476*53ee8cc1Swenshuai.xi }
3477*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetColorMatrixControl_U2(void * pInstance,MS_BOOL bScalerWin,MS_BOOL bEnable)3478*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetColorMatrixControl_U2(void *pInstance, MS_BOOL bScalerWin, MS_BOOL bEnable)
3479*53ee8cc1Swenshuai.xi {
3480*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3481*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
3482*53ee8cc1Swenshuai.xi MDrv_ACE_SetColorMatrixControl(pInstance, bScalerWin, bEnable );
3483*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
3484*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3485*53ee8cc1Swenshuai.xi }
3486*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetColorMatrixControl(MS_BOOL bScalerWin,MS_BOOL bEnable)3487*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetColorMatrixControl( MS_BOOL bScalerWin, MS_BOOL bEnable )
3488*53ee8cc1Swenshuai.xi {
3489*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3490*53ee8cc1Swenshuai.xi {
3491*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3492*53ee8cc1Swenshuai.xi return;
3493*53ee8cc1Swenshuai.xi }
3494*53ee8cc1Swenshuai.xi
3495*53ee8cc1Swenshuai.xi stACE_SetColorMatrixControl ACEArgs;
3496*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
3497*53ee8cc1Swenshuai.xi ACEArgs.bEnable = bEnable;
3498*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETCOLORMATRIXCONTROL, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3499*53ee8cc1Swenshuai.xi {
3500*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3501*53ee8cc1Swenshuai.xi }
3502*53ee8cc1Swenshuai.xi return;
3503*53ee8cc1Swenshuai.xi }
3504*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetRBChannelRange_U2(void * pInstance,MS_BOOL bScalerWin,MS_BOOL bRange)3505*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetRBChannelRange_U2(void *pInstance, MS_BOOL bScalerWin, MS_BOOL bRange)
3506*53ee8cc1Swenshuai.xi {
3507*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3508*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
3509*53ee8cc1Swenshuai.xi MDrv_ACE_SetRBChannelRange(pInstance, bScalerWin, bRange );
3510*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
3511*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3512*53ee8cc1Swenshuai.xi }
3513*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetRBChannelRange(MS_BOOL bScalerWin,MS_BOOL bRange)3514*53ee8cc1Swenshuai.xi void MApi_XC_ACE_SetRBChannelRange( MS_BOOL bScalerWin, MS_BOOL bRange )
3515*53ee8cc1Swenshuai.xi {
3516*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3517*53ee8cc1Swenshuai.xi {
3518*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3519*53ee8cc1Swenshuai.xi return;
3520*53ee8cc1Swenshuai.xi }
3521*53ee8cc1Swenshuai.xi
3522*53ee8cc1Swenshuai.xi stACE_SetRBChannelRange ACEArgs;
3523*53ee8cc1Swenshuai.xi ACEArgs.bScalerWin = bScalerWin;
3524*53ee8cc1Swenshuai.xi ACEArgs.bRange = bRange;
3525*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SETRBCHANNELRANGE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3526*53ee8cc1Swenshuai.xi {
3527*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3528*53ee8cc1Swenshuai.xi }
3529*53ee8cc1Swenshuai.xi return;
3530*53ee8cc1Swenshuai.xi }
3531*53ee8cc1Swenshuai.xi
3532*53ee8cc1Swenshuai.xi #define LOGTIMECOST FALSE
MApi_XC_ACE_SetPowerState_U2(void * pInstance,EN_POWER_MODE enPowerState)3533*53ee8cc1Swenshuai.xi MS_U32 MApi_XC_ACE_SetPowerState_U2(void* pInstance, EN_POWER_MODE enPowerState)
3534*53ee8cc1Swenshuai.xi {
3535*53ee8cc1Swenshuai.xi static EN_POWER_MODE _enPrevPowerState = E_POWER_MECHANICAL;
3536*53ee8cc1Swenshuai.xi MS_U32 u32Ret = UTOPIA_STATUS_FAIL;
3537*53ee8cc1Swenshuai.xi
3538*53ee8cc1Swenshuai.xi #if LOGTIMECOST
3539*53ee8cc1Swenshuai.xi MS_U32 u32Begin = MsOS_GetSystemTime();
3540*53ee8cc1Swenshuai.xi #endif
3541*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
3542*53ee8cc1Swenshuai.xi void *pModule;
3543*53ee8cc1Swenshuai.xi UtopiaInstanceGetModule(pInstance, &pModule);
3544*53ee8cc1Swenshuai.xi ACE_REGS_SAVE_AREA *pACEResourceStr = NULL;
3545*53ee8cc1Swenshuai.xi UtopiaModuleGetSTRPrivate(pModule, (void**)&pACEResourceStr);
3546*53ee8cc1Swenshuai.xi #endif
3547*53ee8cc1Swenshuai.xi
3548*53ee8cc1Swenshuai.xi if (enPowerState == E_POWER_SUSPEND)
3549*53ee8cc1Swenshuai.xi {
3550*53ee8cc1Swenshuai.xi _enPrevPowerState = enPowerState;
3551*53ee8cc1Swenshuai.xi u32Ret = UTOPIA_STATUS_SUCCESS;
3552*53ee8cc1Swenshuai.xi }
3553*53ee8cc1Swenshuai.xi else if (enPowerState == E_POWER_RESUME)
3554*53ee8cc1Swenshuai.xi {
3555*53ee8cc1Swenshuai.xi if (_enPrevPowerState == E_POWER_SUSPEND)
3556*53ee8cc1Swenshuai.xi {
3557*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_ENTRY(pInstance);
3558*53ee8cc1Swenshuai.xi MDrv_ACE_SetSkipWaitVsync(pInstance,MAIN_WINDOW, TRUE);
3559*53ee8cc1Swenshuai.xi MDrv_ACE_SetSkipWaitVsync(pInstance,SUB_WINDOW, TRUE);
3560*53ee8cc1Swenshuai.xi _ACE_GET_VARIABLE();
3561*53ee8cc1Swenshuai.xi MS_BOOL bRet = _MApi_XC_ACE_Init_WithoutCreateMutex(pInstance, &g_XC_ACE_InitData, TRUE);
3562*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
3563*53ee8cc1Swenshuai.xi XC_ACE_ENTRY();
3564*53ee8cc1Swenshuai.xi //arbiter STR
3565*53ee8cc1Swenshuai.xi //E_ACE_CMD_COLORCORRECTIONTABLE
3566*53ee8cc1Swenshuai.xi MDrv_ACE_ColorCorrectionTable(pInstance, MAIN_WINDOW, psACEResPri->stdrvACE.s_AceInfo[MAIN_WINDOW].psColorCorrectionMatrix);
3567*53ee8cc1Swenshuai.xi //E_ACE_CMD_SETPCYUV2RGB
3568*53ee8cc1Swenshuai.xi MDrv_ACE_PCForceYUVtoRGB(pInstance, MAIN_WINDOW , pACEResourceStr->bSetPCYUV2RGB_Enable);
3569*53ee8cc1Swenshuai.xi //E_ACE_CMD_PICSETPOSTCOLORTEMP_V02
3570*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetPostRGBGainOffset(pInstance, MAIN_WINDOW,
3571*53ee8cc1Swenshuai.xi pACEResourceStr->stColorTemp.cRedColor, pACEResourceStr->stColorTemp.cGreenColor,
3572*53ee8cc1Swenshuai.xi pACEResourceStr->stColorTemp.cBlueColor, pACEResourceStr->stColorTemp.cRedOffset,
3573*53ee8cc1Swenshuai.xi pACEResourceStr->stColorTemp.cGreenOffset, pACEResourceStr->stColorTemp.cBlueOffset, 0);
3574*53ee8cc1Swenshuai.xi if(pACEResourceStr->bUseYUVSpace)
3575*53ee8cc1Swenshuai.xi {
3576*53ee8cc1Swenshuai.xi //E_ACE_CMD_PICSETCONTRAST
3577*53ee8cc1Swenshuai.xi MDrv_ACE_PicSetContrast(pInstance, MAIN_WINDOW, pACEResourceStr->bUseYUVSpace, pACEResourceStr->u8Contrast);
3578*53ee8cc1Swenshuai.xi }
3579*53ee8cc1Swenshuai.xi //E_ACE_CMD_PICSETBRIGHTNESS
3580*53ee8cc1Swenshuai.xi MDrv_ACE_SetBrightness(pInstance, MAIN_WINDOW, pACEResourceStr->u8Brightness_R, pACEResourceStr->u8Brightness_G, pACEResourceStr->u8Brightness_B);
3581*53ee8cc1Swenshuai.xi //E_ACE_CMD_PICSETHUE
3582*53ee8cc1Swenshuai.xi //E_ACE_CMD_PICSETSATURATION
3583*53ee8cc1Swenshuai.xi if(pACEResourceStr->bUseYUVSpace)
3584*53ee8cc1Swenshuai.xi {
3585*53ee8cc1Swenshuai.xi MDrv_ACE_SetHue(pInstance, MAIN_WINDOW, pACEResourceStr->u8Hue);
3586*53ee8cc1Swenshuai.xi MDrv_ACE_SetSaturation(pInstance, MAIN_WINDOW, pACEResourceStr->u8Saturation);
3587*53ee8cc1Swenshuai.xi }
3588*53ee8cc1Swenshuai.xi //E_ACE_CMD_PICSETSHARPNESS
3589*53ee8cc1Swenshuai.xi MDrv_ACE_SetSharpness(pInstance, MAIN_WINDOW, pACEResourceStr->u8Sharpness);
3590*53ee8cc1Swenshuai.xi XC_ACE_RETURN();
3591*53ee8cc1Swenshuai.xi #endif
3592*53ee8cc1Swenshuai.xi MDrv_ACE_SetSkipWaitVsync(pInstance,MAIN_WINDOW, FALSE);
3593*53ee8cc1Swenshuai.xi MDrv_ACE_SetSkipWaitVsync(pInstance,SUB_WINDOW, FALSE);
3594*53ee8cc1Swenshuai.xi _ACE_SEMAPHORE_RETURN(pInstance);
3595*53ee8cc1Swenshuai.xi if(bRet == TRUE)
3596*53ee8cc1Swenshuai.xi {
3597*53ee8cc1Swenshuai.xi u32Ret = UTOPIA_STATUS_SUCCESS;
3598*53ee8cc1Swenshuai.xi }
3599*53ee8cc1Swenshuai.xi else
3600*53ee8cc1Swenshuai.xi {
3601*53ee8cc1Swenshuai.xi printf("[%s,%5d]ACE init fail!\n",__FUNCTION__,__LINE__);
3602*53ee8cc1Swenshuai.xi u32Ret = UTOPIA_STATUS_FAIL;
3603*53ee8cc1Swenshuai.xi }
3604*53ee8cc1Swenshuai.xi _enPrevPowerState = enPowerState;
3605*53ee8cc1Swenshuai.xi }
3606*53ee8cc1Swenshuai.xi else
3607*53ee8cc1Swenshuai.xi {
3608*53ee8cc1Swenshuai.xi printf("[%s,%5d]It is not suspended yet. We shouldn't resume\n",__FUNCTION__,__LINE__);
3609*53ee8cc1Swenshuai.xi u32Ret = UTOPIA_STATUS_FAIL;
3610*53ee8cc1Swenshuai.xi }
3611*53ee8cc1Swenshuai.xi }
3612*53ee8cc1Swenshuai.xi else
3613*53ee8cc1Swenshuai.xi {
3614*53ee8cc1Swenshuai.xi printf("[%s,%5d]Do Nothing: %u\n",__FUNCTION__,__LINE__,enPowerState);
3615*53ee8cc1Swenshuai.xi u32Ret = UTOPIA_STATUS_FAIL;
3616*53ee8cc1Swenshuai.xi }
3617*53ee8cc1Swenshuai.xi
3618*53ee8cc1Swenshuai.xi
3619*53ee8cc1Swenshuai.xi #if LOGTIMECOST
3620*53ee8cc1Swenshuai.xi printf("=========[%s,%5d] cost %lu ms========\n", __FUNCTION__, __LINE__, MsOS_GetSystemTime() - u32Begin);
3621*53ee8cc1Swenshuai.xi #endif
3622*53ee8cc1Swenshuai.xi
3623*53ee8cc1Swenshuai.xi return u32Ret;
3624*53ee8cc1Swenshuai.xi }
3625*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetPowerState(EN_POWER_MODE enPowerState)3626*53ee8cc1Swenshuai.xi MS_U32 MApi_XC_ACE_SetPowerState(EN_POWER_MODE enPowerState)
3627*53ee8cc1Swenshuai.xi {
3628*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3629*53ee8cc1Swenshuai.xi {
3630*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3631*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_FAIL;
3632*53ee8cc1Swenshuai.xi }
3633*53ee8cc1Swenshuai.xi
3634*53ee8cc1Swenshuai.xi stACE_Set_PowerState ACEArgs;
3635*53ee8cc1Swenshuai.xi ACEArgs.enPowerState = enPowerState;
3636*53ee8cc1Swenshuai.xi ACEArgs.u32Return = UTOPIA_STATUS_FAIL;
3637*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SET_POWERSTATE, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3638*53ee8cc1Swenshuai.xi {
3639*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3640*53ee8cc1Swenshuai.xi }
3641*53ee8cc1Swenshuai.xi return ACEArgs.u32Return;
3642*53ee8cc1Swenshuai.xi }
3643*53ee8cc1Swenshuai.xi
_XC_ACE_GET_DEVICE_NUM(void)3644*53ee8cc1Swenshuai.xi MS_U32 _XC_ACE_GET_DEVICE_NUM(void)
3645*53ee8cc1Swenshuai.xi {
3646*53ee8cc1Swenshuai.xi return MDrv_ACE_GetDeviceNum();
3647*53ee8cc1Swenshuai.xi }
3648*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetHDRInit_U2(void * pInstance,XC_ACE_HDRinit * pstACE_HDRInitData)3649*53ee8cc1Swenshuai.xi MS_BOOL MApi_XC_ACE_SetHDRInit_U2(void * pInstance ,XC_ACE_HDRinit * pstACE_HDRInitData)
3650*53ee8cc1Swenshuai.xi {
3651*53ee8cc1Swenshuai.xi MS_BOOL bReturn=FALSE;
3652*53ee8cc1Swenshuai.xi MS_U16 u16CopiedLength = sizeof(XC_ACE_HDRinit);
3653*53ee8cc1Swenshuai.xi
3654*53ee8cc1Swenshuai.xi if((NULL == pstACE_HDRInitData) || (pstACE_HDRInitData->u16HDRInitLength == 0))
3655*53ee8cc1Swenshuai.xi {
3656*53ee8cc1Swenshuai.xi //We cosider compatible operation form version2 , so reject the info init when version invalid
3657*53ee8cc1Swenshuai.xi printf("MApi_XC_ACE_SetHDRInit: Null paramter or Wrong u16HDRInitLength!!\n");
3658*53ee8cc1Swenshuai.xi return bReturn;
3659*53ee8cc1Swenshuai.xi }
3660*53ee8cc1Swenshuai.xi
3661*53ee8cc1Swenshuai.xi // the version control is coming in with version 1
3662*53ee8cc1Swenshuai.xi if(pstACE_HDRInitData->u16HDRVerInfo < 1)
3663*53ee8cc1Swenshuai.xi {
3664*53ee8cc1Swenshuai.xi //We cosider compatible operation form version1 , so reject the info init when version invalid
3665*53ee8cc1Swenshuai.xi printf("MApi_XC_ACE_SetHDRInit: please check your u16HDRVerInfo, it should not set to 0!!\n");
3666*53ee8cc1Swenshuai.xi return bReturn;
3667*53ee8cc1Swenshuai.xi }
3668*53ee8cc1Swenshuai.xi
3669*53ee8cc1Swenshuai.xi if(pstACE_HDRInitData->u16HDRVerInfo > XC_ACE_HDR_VERSION)
3670*53ee8cc1Swenshuai.xi {
3671*53ee8cc1Swenshuai.xi //We cosider compatible operation form version1 , so reject the info init when version invalid
3672*53ee8cc1Swenshuai.xi #if defined (__aarch64__)
3673*53ee8cc1Swenshuai.xi printf("MApi_XC_ACE_SetHDRInit: this old version ACE lib has only length:%lu driver status!!\n",sizeof(XC_ACE_HDRinit));
3674*53ee8cc1Swenshuai.xi #else
3675*53ee8cc1Swenshuai.xi printf("MApi_XC_ACE_SetHDRInit: this old version ACE lib has only length:%u driver status!!\n",sizeof(XC_ACE_HDRinit));
3676*53ee8cc1Swenshuai.xi #endif
3677*53ee8cc1Swenshuai.xi //we still copy the min size of both structure, but AP should take care of it.
3678*53ee8cc1Swenshuai.xi u16CopiedLength = sizeof(XC_ACE_HDRinit);
3679*53ee8cc1Swenshuai.xi }
3680*53ee8cc1Swenshuai.xi
3681*53ee8cc1Swenshuai.xi //old AP + new lib, driver shouldn't access to the space which doesn't exist in old structure
3682*53ee8cc1Swenshuai.xi if((pstACE_HDRInitData->u16HDRVerInfo < XC_ACE_HDR_VERSION) || (pstACE_HDRInitData->u16HDRInitLength < sizeof(XC_ACE_HDRinit)))
3683*53ee8cc1Swenshuai.xi {
3684*53ee8cc1Swenshuai.xi //We cosider compatible operation form version1 , so reject the info init when version invalid
3685*53ee8cc1Swenshuai.xi printf("MApi_XC_ACE_SetHDRInit : new version ACE lib shouldn't access to the space which doesn't exist in old structure!!\n");
3686*53ee8cc1Swenshuai.xi u16CopiedLength = pstACE_HDRInitData->u16HDRInitLength;
3687*53ee8cc1Swenshuai.xi }
3688*53ee8cc1Swenshuai.xi
3689*53ee8cc1Swenshuai.xi ACE_DRV_HDRinit ACE_HDRInitInfo;
3690*53ee8cc1Swenshuai.xi memset(&ACE_HDRInitInfo, 0 , sizeof(ACE_DRV_HDRinit));
3691*53ee8cc1Swenshuai.xi memcpy(&ACE_HDRInitInfo, pstACE_HDRInitData, u16CopiedLength);
3692*53ee8cc1Swenshuai.xi ACE_HDRInitInfo.u16HDRInitLength = u16CopiedLength;
3693*53ee8cc1Swenshuai.xi
3694*53ee8cc1Swenshuai.xi bReturn=MDrv_ACE_SetHDRInit(pInstance ,&ACE_HDRInitInfo);
3695*53ee8cc1Swenshuai.xi
3696*53ee8cc1Swenshuai.xi return bReturn;
3697*53ee8cc1Swenshuai.xi }
3698*53ee8cc1Swenshuai.xi
MApi_XC_ACE_SetHDRInit(XC_ACE_HDRinit * pstACE_HDRInitData)3699*53ee8cc1Swenshuai.xi MS_BOOL SYMBOL_WEAK MApi_XC_ACE_SetHDRInit(XC_ACE_HDRinit *pstACE_HDRInitData)
3700*53ee8cc1Swenshuai.xi {
3701*53ee8cc1Swenshuai.xi if (pu32ACEInst == NULL)
3702*53ee8cc1Swenshuai.xi {
3703*53ee8cc1Swenshuai.xi printf("ACE not initialized!\n");
3704*53ee8cc1Swenshuai.xi return FALSE;
3705*53ee8cc1Swenshuai.xi }
3706*53ee8cc1Swenshuai.xi
3707*53ee8cc1Swenshuai.xi stACE_SetHDRInitData ACEArgs;
3708*53ee8cc1Swenshuai.xi ACEArgs.pstHDRInitData = pstACE_HDRInitData;
3709*53ee8cc1Swenshuai.xi
3710*53ee8cc1Swenshuai.xi ACEArgs.bReturn = FALSE ;
3711*53ee8cc1Swenshuai.xi
3712*53ee8cc1Swenshuai.xi // wait until Jesse.Huang set the definition of return value, I will exchange this with another return value
3713*53ee8cc1Swenshuai.xi // instead of 0
3714*53ee8cc1Swenshuai.xi if(UtopiaIoctl(pu32ACEInst, E_ACE_CMD_SET_HDR_INFO, (void*)&ACEArgs) != UTOPIA_STATUS_SUCCESS)
3715*53ee8cc1Swenshuai.xi {
3716*53ee8cc1Swenshuai.xi printf("Obtain ACE engine fail\n");
3717*53ee8cc1Swenshuai.xi return FALSE ;
3718*53ee8cc1Swenshuai.xi }
3719*53ee8cc1Swenshuai.xi else
3720*53ee8cc1Swenshuai.xi {
3721*53ee8cc1Swenshuai.xi return ACEArgs.bReturn;
3722*53ee8cc1Swenshuai.xi }
3723*53ee8cc1Swenshuai.xi }
3724*53ee8cc1Swenshuai.xi
3725*53ee8cc1Swenshuai.xi
3726*53ee8cc1Swenshuai.xi #undef _API_XC_ACE_C_
3727*53ee8cc1Swenshuai.xi #endif // _API_XC_ACE_C_
3728*53ee8cc1Swenshuai.xi
3729