xref: /utopia/UTPA2-700.0.x/modules/dlc/hal/maserati/dlc/MsDlc.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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  Copyright (c) 2008 MStar Semiconductor, Inc.
80*53ee8cc1Swenshuai.xi  All rights reserved.
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi  [Module Name]: MsDLC.c
83*53ee8cc1Swenshuai.xi  [Date]: 2009-03-20
84*53ee8cc1Swenshuai.xi  [Comment]:
85*53ee8cc1Swenshuai.xi    MST DLC subroutines.
86*53ee8cc1Swenshuai.xi  [Reversion History]:
87*53ee8cc1Swenshuai.xi *******************************************************************************/
88*53ee8cc1Swenshuai.xi 
89*53ee8cc1Swenshuai.xi #define _MSDLC_C_
90*53ee8cc1Swenshuai.xi 
91*53ee8cc1Swenshuai.xi #include "MsDlc_LIB.h"
92*53ee8cc1Swenshuai.xi #include "MsDlc.h"
93*53ee8cc1Swenshuai.xi 
94*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
95*53ee8cc1Swenshuai.xi     #include <sys/ioctl.h>
96*53ee8cc1Swenshuai.xi     #include <unistd.h>
97*53ee8cc1Swenshuai.xi     #include <fcntl.h> // O_RDWR
98*53ee8cc1Swenshuai.xi     #include "../../../graphic/drv/gop/mdrv_gflip_io.h"
99*53ee8cc1Swenshuai.xi #endif
100*53ee8cc1Swenshuai.xi 
101*53ee8cc1Swenshuai.xi // Compiler option
102*53ee8cc1Swenshuai.xi #define DLC_LIB_VERSION             0x3300 //v32.61 // fix bugs of u8_L_H_U & u8_L_H_D
103*53ee8cc1Swenshuai.xi                                            //v32.59 // 1. Add guard condition to msDlcOnOff & msDlc_CGC_Init. msDlcOnOff & msDlc_CGC_Init will check DLC On/Off status before execution.
104*53ee8cc1Swenshuai.xi                                            //v32.58 // 1. change register data width from WORD -> DWORD 2. Fixs float point issue.
105*53ee8cc1Swenshuai.xi                                            //v32.57 // fix bug imgae flick while curve change, fix bug for g_DlcParameters.ucDlcAvgDeltaStill & g_DlcParameters.ucDlcAvgDelta
106*53ee8cc1Swenshuai.xi                                            //v32.56 // fix bug for g_DlcParameters.ucDlcAvgDeltaStill
107*53ee8cc1Swenshuai.xi                                            //v32.55 // change the resolution of Yavg for g_DlcParameters.ucDlcAvgDeltaStill
108*53ee8cc1Swenshuai.xi                                            //v32.54 // add C Gain (CGC) On Off
109*53ee8cc1Swenshuai.xi                                            //v32.53 // modify msDlc_AP_ReinitWithoutPara() for debug command
110*53ee8cc1Swenshuai.xi                                            //v32.52 // Include DebugTool Command + move g_u8Yth to CGC parameter groups
111*53ee8cc1Swenshuai.xi                                            //v32.51 // Modify CGC initial flow
112*53ee8cc1Swenshuai.xi                                            //v32.50 // Fix CGC Limit definition
113*53ee8cc1Swenshuai.xi                                            //v32.49 // add Cgain control by Jason.Chen, add protect when AvgMax < Avg Min for pure image
114*53ee8cc1Swenshuai.xi                                            //v32.48 // reserved for Paulo/Lomeo version number.
115*53ee8cc1Swenshuai.xi                                            //v32.47 // fix Yavg threshold problem
116*53ee8cc1Swenshuai.xi                                            //v32.46 // rename parameters, add Yavg threshold, g_DlcParameters.ucDlcYAvgThresholdH & g_DlcParameters.ucDlcYAvgThresholdL
117*53ee8cc1Swenshuai.xi                                            //v32.45 // fix level[14] over flow issue & unstable when LH2(g_DlcParameters.u8_L_H_D) is high
118*53ee8cc1Swenshuai.xi                                            //v32.44 // finetune v32.43
119*53ee8cc1Swenshuai.xi                                            //v32.43 // (test) add new parameter for stop curve cgange when Avg Delta <= g_DlcParameters.ucDlcAvgDeltaStill
120*53ee8cc1Swenshuai.xi                                            //v32.42 // remove Delay1ms() and replace to a Macro msDlc_Delay1ms
121*53ee8cc1Swenshuai.xi                                            //v32.41 // change usage of timeout event, use Delay1ms(n);
122*53ee8cc1Swenshuai.xi                                            //v32.40 // add new parameter for WLE/BLE g_DlcParameters.ucDlcBLEPoint, g_DlcParameters.ucDlcWLEPoint, add new parameter for Avg offset (Compal), add timeout in initial stage
123*53ee8cc1Swenshuai.xi                                            //v32.39 // modify for get stable pixel count "g_wLumiTotalCount"
124*53ee8cc1Swenshuai.xi                                            //v32.38 // fix re-init error in Histogram request bit (bit2)
125*53ee8cc1Swenshuai.xi                                            //v32.37 // seperate code msDlcLumiDiffCtrl()
126*53ee8cc1Swenshuai.xi                                            //v32.36 // add more overflow/underflow protection
127*53ee8cc1Swenshuai.xi                                            //v32.35 // to fix the bug => luma curve (0) is almost  "0x00" for all kind of pattern.
128*53ee8cc1Swenshuai.xi                                            //v32.34 // add compiler option ENABLE_HISTOGRAM_8 and function msDlcSetVarHistogramRange()
129*53ee8cc1Swenshuai.xi                                            //v32.33 // add histogram range of H
130*53ee8cc1Swenshuai.xi                                            //v32.32 // add registers initial table
131*53ee8cc1Swenshuai.xi                                            //v32.31 // add some definition & add function enter and exit
132*53ee8cc1Swenshuai.xi                                            //v32.30 // modify for ATV/DTV are compatible
133*53ee8cc1Swenshuai.xi                                            //v32.23 // change definition of g_wAvgDelta =>  Delta = n * 3 , add function msGetAverageLuminous()
134*53ee8cc1Swenshuai.xi                                            //v32.22 // add g_DlcParameters.ucDlcFastAlphaBlending, update g_wAvgDelta
135*53ee8cc1Swenshuai.xi                                            //v32.21 // add g_wAvgDelta
136*53ee8cc1Swenshuai.xi                                            //v32.20 // add level limit
137*53ee8cc1Swenshuai.xi                                            //v32.19 // modify de-flick function, add parameter for pure image "g_DlcParameters.ucDlcPureImageMode", remove msGetHistogramHandler from DLC handler, finetune the process of pure image
138*53ee8cc1Swenshuai.xi                                            //v32.18 // modify de-flick function (g_ucUpdateCnt & g_ucDlcFlickAlpha)
139*53ee8cc1Swenshuai.xi                                            //v32.17 // fix bug of de-flick function
140*53ee8cc1Swenshuai.xi                                            //v32.16 // modify de-flick function
141*53ee8cc1Swenshuai.xi                                            //v32.15 // modify alpha belnding & add g_DlcParameters.ucDlcFlickAlphaStart after mode change
142*53ee8cc1Swenshuai.xi                                            //v32.14 // Remove garbage (L_L_U...)
143*53ee8cc1Swenshuai.xi                                            //v32.13 // Protect Histogram Overflow
144*53ee8cc1Swenshuai.xi                                            //v32.12 // modify for tool finetune
145*53ee8cc1Swenshuai.xi                                            //v32.11 // modify init static curve & for tool finetune
146*53ee8cc1Swenshuai.xi                                            //v32.10 // Lopez & Raphael series 32-seg DLC & version 10
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi #define DLC_CGC_LIB_VERSION         0x0104 //v1.04 // add C Gain (CGC) On Off
149*53ee8cc1Swenshuai.xi                                            //v1.03 // move g_u8Yth to CGC parameter groups
150*53ee8cc1Swenshuai.xi                                            //v1.02 // Modify CGC initial flow
151*53ee8cc1Swenshuai.xi                                            //v1.01 // Fix CGC Limit definition
152*53ee8cc1Swenshuai.xi                                            //v1.00 // Initial
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi XDATA StuDlc_FinetuneParamaters g_DlcParameters;
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi #define DLC_DEBUG(x)        //(x)
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi #define DEFAULT_BLE_UPPER_BOND      0x08
160*53ee8cc1Swenshuai.xi #define DEFAULT_BLE_LOWER_BOND      0x04
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi #define DLC_DEFLICK_PRECISION_SHIFT   64UL
163*53ee8cc1Swenshuai.xi #define DLC_DEFLICK_BLEND_FACTOR      32UL
164*53ee8cc1Swenshuai.xi 
165*53ee8cc1Swenshuai.xi #define DLC_PURE_IMAGE_DLC_CURVE        0L
166*53ee8cc1Swenshuai.xi #define DLC_PURE_IMAGE_LINEAR_CURVE     1L
167*53ee8cc1Swenshuai.xi #define DLC_PURE_IMAGE_DO_NOTHING       2L
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi #define XC_DLC_ALGORITHM_OLD       0
170*53ee8cc1Swenshuai.xi #define XC_DLC_ALGORITHM_NEW       1
171*53ee8cc1Swenshuai.xi #define XC_DLC_ALGORITHM_KERNEL    2
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi #define XC_DLC_SET_DLC_CURVE_BOTH_SAME    0   // 0:Main and Sub use the same DLC curve
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi #define XC_DLC_FRAME_WIDTH_4K2K_HALF 1920 //need DLC information
176*53ee8cc1Swenshuai.xi #define XC_DLC_FRAME_WIDTH_FHD_HALF 960 //need DLC information
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
179*53ee8cc1Swenshuai.xi XDATA MS_S32   s32FdDlcBle= -1 ;
180*53ee8cc1Swenshuai.xi #endif
181*53ee8cc1Swenshuai.xi 
182*53ee8cc1Swenshuai.xi XDATA WORD g_wLumaHistogram32H[32];
183*53ee8cc1Swenshuai.xi XDATA BYTE g_ucHistogramMax, g_ucHistogramMin;
184*53ee8cc1Swenshuai.xi XDATA WORD g_wLumiAverageTemp;
185*53ee8cc1Swenshuai.xi XDATA BYTE g_ucDlcFlickAlpha;
186*53ee8cc1Swenshuai.xi XDATA BYTE g_ucTable[16];     // Final target curve (8 bit)
187*53ee8cc1Swenshuai.xi XDATA BYTE g_pre_ucTable[16]; // Final target curve (8 bit)
188*53ee8cc1Swenshuai.xi XDATA WORD g_uwTable[16];     // Final target curve (10 bit)
189*53ee8cc1Swenshuai.xi XDATA BYTE g_ucCurveYAvg[16];
190*53ee8cc1Swenshuai.xi XDATA DWORD g_uwCurveHistogram[16];
191*53ee8cc1Swenshuai.xi XDATA WORD g_uwPre_CurveHistogram[16];
192*53ee8cc1Swenshuai.xi XDATA WORD g_uwPreTable[16]; // New de-Flick
193*53ee8cc1Swenshuai.xi XDATA BYTE g_ucUpdateCnt;
194*53ee8cc1Swenshuai.xi XDATA WORD g_wLumiTotalCount;
195*53ee8cc1Swenshuai.xi XDATA BYTE g_ucTmpAvgN_1; // Avg value (N-1)
196*53ee8cc1Swenshuai.xi XDATA BYTE g_ucTmpAvgN; // Avg value (current N)
197*53ee8cc1Swenshuai.xi XDATA WORD g_wTmpAvgN_1_x10; // Avg value (N-1) x 10
198*53ee8cc1Swenshuai.xi XDATA WORD g_wTmpAvgN_x10; // Avg value (current N) x 10
199*53ee8cc1Swenshuai.xi XDATA BYTE g_ucDlcFastLoop; // for pulse ripple
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi #define FLICK_ALPHA_START_COUNTER   40
202*53ee8cc1Swenshuai.xi 
203*53ee8cc1Swenshuai.xi XDATA DWORD g_dwFactory;
204*53ee8cc1Swenshuai.xi XDATA DWORD g_dwFactory_7;
205*53ee8cc1Swenshuai.xi XDATA DWORD g_dwFactory_9;
206*53ee8cc1Swenshuai.xi XDATA DWORD g_dwLstep;
207*53ee8cc1Swenshuai.xi XDATA DWORD g_dwHstep;
208*53ee8cc1Swenshuai.xi 
209*53ee8cc1Swenshuai.xi XDATA BYTE s_Slope[8] = {0x17,0x27,0x47,0x67,0x97,0xB7,0xD7,0xE7};
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi static MS_BOOL  g_bSetDlcBleOn = TRUE;
212*53ee8cc1Swenshuai.xi static WORD g_wPIAlpha=0;
213*53ee8cc1Swenshuai.xi static WORD g_wPrePIAlpha=0;
214*53ee8cc1Swenshuai.xi 
215*53ee8cc1Swenshuai.xi #define LA1 g_DlcParameters.u8_L_L_U
216*53ee8cc1Swenshuai.xi #define LA2 g_DlcParameters.u8_L_L_D
217*53ee8cc1Swenshuai.xi #define LB1 g_DlcParameters.u8_L_L_U
218*53ee8cc1Swenshuai.xi #define LB2 g_DlcParameters.u8_L_L_D
219*53ee8cc1Swenshuai.xi #define LC1 g_DlcParameters.u8_L_L_U
220*53ee8cc1Swenshuai.xi #define LC2 g_DlcParameters.u8_L_L_D
221*53ee8cc1Swenshuai.xi #define LD1 g_DlcParameters.u8_L_L_U
222*53ee8cc1Swenshuai.xi #define LD2 g_DlcParameters.u8_L_L_D
223*53ee8cc1Swenshuai.xi #define LE1 g_DlcParameters.u8_L_H_U
224*53ee8cc1Swenshuai.xi #define LE2 g_DlcParameters.u8_L_H_D
225*53ee8cc1Swenshuai.xi #define LF1 g_DlcParameters.u8_L_H_U
226*53ee8cc1Swenshuai.xi #define LF2 g_DlcParameters.u8_L_H_D
227*53ee8cc1Swenshuai.xi #define LG1 g_DlcParameters.u8_L_H_U
228*53ee8cc1Swenshuai.xi #define LG2 g_DlcParameters.u8_L_H_D
229*53ee8cc1Swenshuai.xi #define LH1 g_DlcParameters.u8_L_H_U
230*53ee8cc1Swenshuai.xi #define LH2 g_DlcParameters.u8_L_H_D
231*53ee8cc1Swenshuai.xi 
232*53ee8cc1Swenshuai.xi #define SA1 g_DlcParameters.u8_S_L_U
233*53ee8cc1Swenshuai.xi #define SA2 g_DlcParameters.u8_S_L_D
234*53ee8cc1Swenshuai.xi #define SB1 g_DlcParameters.u8_S_L_U
235*53ee8cc1Swenshuai.xi #define SB2 g_DlcParameters.u8_S_L_D
236*53ee8cc1Swenshuai.xi #define SC1 g_DlcParameters.u8_S_L_U
237*53ee8cc1Swenshuai.xi #define SC2 g_DlcParameters.u8_S_L_D
238*53ee8cc1Swenshuai.xi #define SD1 g_DlcParameters.u8_S_L_U
239*53ee8cc1Swenshuai.xi #define SD2 g_DlcParameters.u8_S_L_D
240*53ee8cc1Swenshuai.xi #define SE1 g_DlcParameters.u8_S_H_U
241*53ee8cc1Swenshuai.xi #define SE2 g_DlcParameters.u8_S_H_D
242*53ee8cc1Swenshuai.xi #define SF1 g_DlcParameters.u8_S_H_U
243*53ee8cc1Swenshuai.xi #define SF2 g_DlcParameters.u8_S_H_D
244*53ee8cc1Swenshuai.xi #define SG1 g_DlcParameters.u8_S_H_U
245*53ee8cc1Swenshuai.xi #define SG2 g_DlcParameters.u8_S_H_D
246*53ee8cc1Swenshuai.xi #define SH1 g_DlcParameters.u8_S_H_U
247*53ee8cc1Swenshuai.xi #define SH2 g_DlcParameters.u8_S_H_D
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi typedef enum
250*53ee8cc1Swenshuai.xi {
251*53ee8cc1Swenshuai.xi     Slope_1,
252*53ee8cc1Swenshuai.xi     Slope_2,
253*53ee8cc1Swenshuai.xi     Slope_4,
254*53ee8cc1Swenshuai.xi     Slope_6,
255*53ee8cc1Swenshuai.xi     Slope_9,
256*53ee8cc1Swenshuai.xi     Slope_11,
257*53ee8cc1Swenshuai.xi     Slope_13,
258*53ee8cc1Swenshuai.xi     Slope_14,
259*53ee8cc1Swenshuai.xi     Slope_Max
260*53ee8cc1Swenshuai.xi } Slop_Type;
261*53ee8cc1Swenshuai.xi 
262*53ee8cc1Swenshuai.xi #define Lstep           g_dwLstep
263*53ee8cc1Swenshuai.xi #define Hstep           g_dwHstep
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi //=========================================================
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi #define TOTAL_PIXEL     ((DWORD)(wVEnd-wVStart)*(wHEnd-wHStart)*7*4/(160*3))  // ((DWORD)(wVEnd-wVStart)*0.04375*4/3*(wHEnd-wHStart))
268*53ee8cc1Swenshuai.xi 
269*53ee8cc1Swenshuai.xi void msWriteDLCRegsTbl(DlcRegUnitType code *pTable);
270*53ee8cc1Swenshuai.xi void msDlcWriteCurve(BOOL bWindow);
271*53ee8cc1Swenshuai.xi void msDlcWriteCurveLSB(BOOL bWindow, BYTE ucIndex, BYTE ucValue);
272*53ee8cc1Swenshuai.xi void msDlcLumiDiffCtrl(void);
273*53ee8cc1Swenshuai.xi void msDlcSetVarHistogramRange(BYTE *pRangeArray);
274*53ee8cc1Swenshuai.xi 
275*53ee8cc1Swenshuai.xi /******************************************************************************/
276*53ee8cc1Swenshuai.xi /*                           CGC                                         */
277*53ee8cc1Swenshuai.xi /******************************************************************************/
278*53ee8cc1Swenshuai.xi // Constant
279*53ee8cc1Swenshuai.xi #define Yvar_Th       4                         // Change threshold for DLC luma curve
280*53ee8cc1Swenshuai.xi #define Timer_CountU   3                   // Increasing Chroma Gain change speed
281*53ee8cc1Swenshuai.xi #define Timer_CountD   1                   // Decreasing Chroma Gain change speed
282*53ee8cc1Swenshuai.xi #define CGain_StepU     1                   // Increasing Chroma Gain step
283*53ee8cc1Swenshuai.xi #define CGain_StepD     1                   // Decreasing Chroma Gain step
284*53ee8cc1Swenshuai.xi 
285*53ee8cc1Swenshuai.xi #define Y01_weight    5                      // Luma Curve Y[0], Y[1] weighting
286*53ee8cc1Swenshuai.xi #define Y23_weight    3                      // Luma Curve Y[2], Y[3] weighting
287*53ee8cc1Swenshuai.xi #define Y45_weight    1                      // Luma Curve Y[4], Y[5] weighting
288*53ee8cc1Swenshuai.xi #define Y67_weight    1                      // Luma Curve Y[6], Y[7] weighting
289*53ee8cc1Swenshuai.xi 
290*53ee8cc1Swenshuai.xi // Local
291*53ee8cc1Swenshuai.xi XDATA BYTE g_u8Chroma_OriGain = 0x40;
292*53ee8cc1Swenshuai.xi XDATA BYTE g_u8Chroma_target;
293*53ee8cc1Swenshuai.xi XDATA WORD g_u16Ydark, g_u16Ydark_pre;
294*53ee8cc1Swenshuai.xi XDATA BYTE g_u8TCount = 0;
295*53ee8cc1Swenshuai.xi XDATA BYTE g_u8CGC_UpperBond, g_u8CGC_LowerBond;
296*53ee8cc1Swenshuai.xi XDATA BOOL g_bSetDLCCurveBoth = 0;//We will set main/sub DLC curve at the same time in 3D side-side ap.
297*53ee8cc1Swenshuai.xi 
298*53ee8cc1Swenshuai.xi /******************************************************************************/
299*53ee8cc1Swenshuai.xi 
300*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
301*53ee8cc1Swenshuai.xi //
302*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msDlcInitWithCurve(WORD wHStart,WORD wHEnd,WORD wVStart,WORD wVEnd)303*53ee8cc1Swenshuai.xi void msDlcInitWithCurve( WORD wHStart, WORD wHEnd, WORD wVStart, WORD wVEnd )
304*53ee8cc1Swenshuai.xi {
305*53ee8cc1Swenshuai.xi     BYTE ucTmp, ucTimeout;
306*53ee8cc1Swenshuai.xi     WORD u16HGuardBangSize=0;
307*53ee8cc1Swenshuai.xi 
308*53ee8cc1Swenshuai.xi 
309*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi     g_ucDlcFastLoop = (g_DlcParameters.ucDlcFastAlphaBlending/2) * 16;
312*53ee8cc1Swenshuai.xi     if (g_DlcParameters.ucDlcFastAlphaBlending == 32) // 32 / 2 * 16 = 0 overflow
313*53ee8cc1Swenshuai.xi         g_ucDlcFastLoop = 255;
314*53ee8cc1Swenshuai.xi 
315*53ee8cc1Swenshuai.xi     //putstr("\r\nDLC Initilize use HK MCU");
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi     g_dwFactory = TOTAL_PIXEL/32/2;
318*53ee8cc1Swenshuai.xi     g_dwFactory_7 = (g_dwFactory - (g_dwFactory/8));
319*53ee8cc1Swenshuai.xi     g_dwFactory_9 = (g_dwFactory + (g_dwFactory/8));
320*53ee8cc1Swenshuai.xi 
321*53ee8cc1Swenshuai.xi     g_dwLstep = g_dwFactory*1/16*12/10;
322*53ee8cc1Swenshuai.xi     g_dwHstep = g_dwFactory*3/8;
323*53ee8cc1Swenshuai.xi 
324*53ee8cc1Swenshuai.xi     // Registers Init
325*53ee8cc1Swenshuai.xi     msWriteDLCRegsTbl(tDLC_Initialize);
326*53ee8cc1Swenshuai.xi 
327*53ee8cc1Swenshuai.xi     // Set histogram method/dither
328*53ee8cc1Swenshuai.xi     if (msReadByte(REG_ADDR_DLC_HANDSHAKE) & _BIT2)
329*53ee8cc1Swenshuai.xi     {
330*53ee8cc1Swenshuai.xi         ucTimeout = 60;
331*53ee8cc1Swenshuai.xi         while(!(msReadByte(REG_ADDR_DLC_HANDSHAKE) & _BIT3) && (ucTimeout--))
332*53ee8cc1Swenshuai.xi         {
333*53ee8cc1Swenshuai.xi             msDlc_Delay1ms(1);
334*53ee8cc1Swenshuai.xi         }
335*53ee8cc1Swenshuai.xi     }
336*53ee8cc1Swenshuai.xi 
337*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE)|_BIT5|_BIT4 );
338*53ee8cc1Swenshuai.xi     // Set histogram range - H
339*53ee8cc1Swenshuai.xi     if (REG_ADDR_HISTOGRAM_RANGE_M_HST != REG_NULL)
340*53ee8cc1Swenshuai.xi     {
341*53ee8cc1Swenshuai.xi         u16HGuardBangSize= MDrv_Read2Byte( REG_ADDR_H_GUARD_BAND_OUTPUT_SIZE_MAIN) & 0xFFF;
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi         // Main Window
344*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HST, wHStart/8);
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi         if((MDrv_Read2Byte(REG_ADDR_VOP_OUTPUT_H_TOTAL) & 0x3FFF)>3000)    // 4K output
347*53ee8cc1Swenshuai.xi         {
348*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN, XC_DLC_FRAME_WIDTH_4K2K_HALF/8);
349*53ee8cc1Swenshuai.xi         }
350*53ee8cc1Swenshuai.xi         else
351*53ee8cc1Swenshuai.xi         {
352*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN, XC_DLC_FRAME_WIDTH_FHD_HALF/8);
353*53ee8cc1Swenshuai.xi         }
354*53ee8cc1Swenshuai.xi 
355*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HST_SEC, u16HGuardBangSize/8);
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi         if((MDrv_Read2Byte(REG_ADDR_VOP_OUTPUT_H_TOTAL) & 0x3FFF)>3000)   // 4K output
358*53ee8cc1Swenshuai.xi         {
359*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN_SEC, (wHEnd-XC_DLC_FRAME_WIDTH_4K2K_HALF+u16HGuardBangSize)/8);
360*53ee8cc1Swenshuai.xi         }
361*53ee8cc1Swenshuai.xi         else
362*53ee8cc1Swenshuai.xi         {
363*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN_SEC, (wHEnd-XC_DLC_FRAME_WIDTH_FHD_HALF+u16HGuardBangSize)/8);
364*53ee8cc1Swenshuai.xi         }
365*53ee8cc1Swenshuai.xi 
366*53ee8cc1Swenshuai.xi     }
367*53ee8cc1Swenshuai.xi     // Set histogram range - V
368*53ee8cc1Swenshuai.xi     // Main Window
369*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_VST, wVStart/8);
370*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_VEN, wVEnd/8);
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_BLE_UPPER_BOND, DEFAULT_BLE_UPPER_BOND);
373*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_BLE_LOWER_BOND, DEFAULT_BLE_LOWER_BOND);
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi     // Enable range for Histogram
376*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_HISTOGRAM_RANGE_ENABLE, _BIT7|msReadByte(REG_ADDR_HISTOGRAM_RANGE_ENABLE) ); // Enable MAIN_WINDOW histogram
377*53ee8cc1Swenshuai.xi 
378*53ee8cc1Swenshuai.xi     // Init Luma Curve
379*53ee8cc1Swenshuai.xi     //putstr("[DLC]: Disable the Burst Write 16 Luma Curve\r\n");
380*53ee8cc1Swenshuai.xi     for(ucTmp=0; ucTmp<=0x0f; ucTmp++)
381*53ee8cc1Swenshuai.xi     {
382*53ee8cc1Swenshuai.xi         g_ucTable[ucTmp] = g_DlcParameters.ucLumaCurve[ucTmp];
383*53ee8cc1Swenshuai.xi         g_uwPreTable[ucTmp] = (WORD)g_DlcParameters.ucLumaCurve[ucTmp] * DLC_DEFLICK_PRECISION_SHIFT; // New de-Flick
384*53ee8cc1Swenshuai.xi 	    msWriteByte((REG_ADDR_DLC_DATA_START_MAIN+ucTmp), g_ucTable[ucTmp]);
385*53ee8cc1Swenshuai.xi         msDlcWriteCurveLSB(MAIN_WINDOW, ucTmp, 0);
386*53ee8cc1Swenshuai.xi     }
387*53ee8cc1Swenshuai.xi     // init DLC curve index N0 & 16
388*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN, g_ucTable[0]);
389*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN + 1, 0x01);
390*53ee8cc1Swenshuai.xi     msDlcWriteCurveLSB(MAIN_WINDOW, 0xFF, 0);
391*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN, 255-g_ucTable[15]);
392*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN + 1, 0x01);
393*53ee8cc1Swenshuai.xi     msDlcWriteCurveLSB(MAIN_WINDOW, 16, 0);
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi     // Get Total Pixel Count
396*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) & 0xF0);
397*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) | _BIT2 | _BIT1);
398*53ee8cc1Swenshuai.xi 
399*53ee8cc1Swenshuai.xi     //Get the histogram report sum of pixel number .
400*53ee8cc1Swenshuai.xi     g_wLumiTotalCount = (MDrv_Read2Byte(REG_ADDR_HISTOGRAM_TOTAL_COUNT_L)
401*53ee8cc1Swenshuai.xi                     | (MDrv_Read2Byte(REG_ADDR_HISTOGRAM_TOTAL_COUNT_L+2)<<16))/4;
402*53ee8cc1Swenshuai.xi 
403*53ee8cc1Swenshuai.xi     g_DlcParameters.ucDlcTimeOut = 0;
404*53ee8cc1Swenshuai.xi     g_DlcParameters.ucDlcFlickAlphaStart = FLICK_ALPHA_START_COUNTER;
405*53ee8cc1Swenshuai.xi     g_DlcParameters.ucDlcSlowEvent = 0;
406*53ee8cc1Swenshuai.xi     g_ucUpdateCnt = 0;
407*53ee8cc1Swenshuai.xi 
408*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
409*53ee8cc1Swenshuai.xi }
410*53ee8cc1Swenshuai.xi 
msDlc_SetCaptureRange(MS_U16 wHStart,MS_U16 wHEnd,MS_U16 wVStart,MS_U16 wVEnd)411*53ee8cc1Swenshuai.xi void msDlc_SetCaptureRange(MS_U16 wHStart,MS_U16 wHEnd, MS_U16 wVStart, MS_U16 wVEnd)
412*53ee8cc1Swenshuai.xi {
413*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
414*53ee8cc1Swenshuai.xi     MS_U16 u16HGuardBangSize=0;
415*53ee8cc1Swenshuai.xi 
416*53ee8cc1Swenshuai.xi     if (REG_ADDR_HISTOGRAM_RANGE_M_HST != REG_NULL)
417*53ee8cc1Swenshuai.xi     {
418*53ee8cc1Swenshuai.xi         // Set histogram range - H
419*53ee8cc1Swenshuai.xi         // Main Window
420*53ee8cc1Swenshuai.xi         u16HGuardBangSize= MDrv_Read2Byte( REG_ADDR_H_GUARD_BAND_OUTPUT_SIZE_MAIN) & 0xFFF;
421*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HST, wHStart/8);
422*53ee8cc1Swenshuai.xi 
423*53ee8cc1Swenshuai.xi         if((MDrv_Read2Byte(REG_ADDR_VOP_OUTPUT_H_TOTAL) & 0x3FFF)>3000)    // 4K output
424*53ee8cc1Swenshuai.xi         {
425*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN, XC_DLC_FRAME_WIDTH_4K2K_HALF/8);
426*53ee8cc1Swenshuai.xi         }
427*53ee8cc1Swenshuai.xi         else
428*53ee8cc1Swenshuai.xi         {
429*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN, XC_DLC_FRAME_WIDTH_FHD_HALF/8);
430*53ee8cc1Swenshuai.xi         }
431*53ee8cc1Swenshuai.xi 
432*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HST_SEC, u16HGuardBangSize/8);
433*53ee8cc1Swenshuai.xi 
434*53ee8cc1Swenshuai.xi         if((MDrv_Read2Byte(REG_ADDR_VOP_OUTPUT_H_TOTAL) & 0x3FFF)>3000)   // 4K output
435*53ee8cc1Swenshuai.xi         {
436*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN_SEC, (wHEnd-XC_DLC_FRAME_WIDTH_4K2K_HALF+u16HGuardBangSize)/8);
437*53ee8cc1Swenshuai.xi         }
438*53ee8cc1Swenshuai.xi         else
439*53ee8cc1Swenshuai.xi         {
440*53ee8cc1Swenshuai.xi             MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_HEN_SEC, (wHEnd-XC_DLC_FRAME_WIDTH_FHD_HALF+u16HGuardBangSize)/8);
441*53ee8cc1Swenshuai.xi         }
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi         // Virtical size need to change by display
444*53ee8cc1Swenshuai.xi         // Set histogram range - V
445*53ee8cc1Swenshuai.xi         // Main Window
446*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_VST, wVStart/8);
447*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADDR_HISTOGRAM_RANGE_M_VEN, wVEnd/8);
448*53ee8cc1Swenshuai.xi 
449*53ee8cc1Swenshuai.xi         msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) & 0xF2);
450*53ee8cc1Swenshuai.xi         msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) | _BIT2 );
451*53ee8cc1Swenshuai.xi     }
452*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
453*53ee8cc1Swenshuai.xi }
454*53ee8cc1Swenshuai.xi 
msDlcEnableSetDLCCurveBoth(BOOL bEnable)455*53ee8cc1Swenshuai.xi void msDlcEnableSetDLCCurveBoth(BOOL bEnable)
456*53ee8cc1Swenshuai.xi {
457*53ee8cc1Swenshuai.xi     g_bSetDLCCurveBoth = bEnable;
458*53ee8cc1Swenshuai.xi }
459*53ee8cc1Swenshuai.xi 
460*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
461*53ee8cc1Swenshuai.xi //
462*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msDlcOnOff(BOOL bSwitch,BOOL bWindow)463*53ee8cc1Swenshuai.xi void msDlcOnOff(BOOL bSwitch, BOOL bWindow)
464*53ee8cc1Swenshuai.xi {
465*53ee8cc1Swenshuai.xi     BYTE ucCtlBit;
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi     if( MAIN_WINDOW == bWindow )
470*53ee8cc1Swenshuai.xi         ucCtlBit = _BIT7;
471*53ee8cc1Swenshuai.xi     else // Sub window
472*53ee8cc1Swenshuai.xi         ucCtlBit = _BIT6;
473*53ee8cc1Swenshuai.xi 
474*53ee8cc1Swenshuai.xi     if( bSwitch ) // Enable
475*53ee8cc1Swenshuai.xi     {
476*53ee8cc1Swenshuai.xi         if((msReadByte(REG_ADDR_DLC_HANDSHAKE) & ucCtlBit) )// Shall not turn DLC on when it is on already.
477*53ee8cc1Swenshuai.xi         {
478*53ee8cc1Swenshuai.xi            msDlc_FunctionExit();
479*53ee8cc1Swenshuai.xi            return;
480*53ee8cc1Swenshuai.xi         }
481*53ee8cc1Swenshuai.xi 
482*53ee8cc1Swenshuai.xi         msWriteBit(REG_ADDR_DLC_HANDSHAKE, TRUE, ucCtlBit);
483*53ee8cc1Swenshuai.xi 
484*53ee8cc1Swenshuai.xi         // Request HW to do histogram
485*53ee8cc1Swenshuai.xi         msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) & 0xF2);
486*53ee8cc1Swenshuai.xi 
487*53ee8cc1Swenshuai.xi         msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) | _BIT2 );
488*53ee8cc1Swenshuai.xi 
489*53ee8cc1Swenshuai.xi         g_DlcParameters.ucDlcFlickAlphaStart = FLICK_ALPHA_START_COUNTER;
490*53ee8cc1Swenshuai.xi         g_DlcParameters.ucDlcSlowEvent = 0;
491*53ee8cc1Swenshuai.xi     }
492*53ee8cc1Swenshuai.xi     else // Disable
493*53ee8cc1Swenshuai.xi     {
494*53ee8cc1Swenshuai.xi         msWriteBit(REG_ADDR_DLC_HANDSHAKE, FALSE, ucCtlBit);
495*53ee8cc1Swenshuai.xi     }
496*53ee8cc1Swenshuai.xi 
497*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
498*53ee8cc1Swenshuai.xi }
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
501*53ee8cc1Swenshuai.xi //
502*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msDlcSetBleOnOff(BOOL bSwitch)503*53ee8cc1Swenshuai.xi void msDlcSetBleOnOff(BOOL bSwitch)
504*53ee8cc1Swenshuai.xi {
505*53ee8cc1Swenshuai.xi     g_bSetDlcBleOn= bSwitch ;
506*53ee8cc1Swenshuai.xi }
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
509*53ee8cc1Swenshuai.xi //
510*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msIsBlackVideoEnable(MS_BOOL bWindow)511*53ee8cc1Swenshuai.xi MS_BOOL msIsBlackVideoEnable( MS_BOOL bWindow )
512*53ee8cc1Swenshuai.xi {
513*53ee8cc1Swenshuai.xi     MS_BOOL bReturn;
514*53ee8cc1Swenshuai.xi 
515*53ee8cc1Swenshuai.xi     msVop_FunctionEnter();
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi     if( MAIN_WINDOW == bWindow)
518*53ee8cc1Swenshuai.xi     {
519*53ee8cc1Swenshuai.xi         if(msReadByte(REG_ADDR_VOP_SCREEN_CONTROL) & BIT(1))
520*53ee8cc1Swenshuai.xi         {
521*53ee8cc1Swenshuai.xi             bReturn = TRUE;
522*53ee8cc1Swenshuai.xi         }
523*53ee8cc1Swenshuai.xi         else
524*53ee8cc1Swenshuai.xi         {
525*53ee8cc1Swenshuai.xi             bReturn = FALSE;
526*53ee8cc1Swenshuai.xi         }
527*53ee8cc1Swenshuai.xi     }
528*53ee8cc1Swenshuai.xi     else
529*53ee8cc1Swenshuai.xi     {
530*53ee8cc1Swenshuai.xi         if(msReadByte(REG_ADDR_VOP_SCREEN_CONTROL) & BIT(5))
531*53ee8cc1Swenshuai.xi         {
532*53ee8cc1Swenshuai.xi             bReturn = TRUE;
533*53ee8cc1Swenshuai.xi         }
534*53ee8cc1Swenshuai.xi         else
535*53ee8cc1Swenshuai.xi         {
536*53ee8cc1Swenshuai.xi             bReturn = FALSE;
537*53ee8cc1Swenshuai.xi         }
538*53ee8cc1Swenshuai.xi     }
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi     msVop_FunctionExit();
541*53ee8cc1Swenshuai.xi     return bReturn;
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi }
544*53ee8cc1Swenshuai.xi 
545*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
546*53ee8cc1Swenshuai.xi //
547*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msGetAverageLuminous(void)548*53ee8cc1Swenshuai.xi BYTE msGetAverageLuminous(void) // = external msGetAverageLuminousValue()
549*53ee8cc1Swenshuai.xi {
550*53ee8cc1Swenshuai.xi     WORD uwTmpAvr;
551*53ee8cc1Swenshuai.xi 
552*53ee8cc1Swenshuai.xi     // Normalize
553*53ee8cc1Swenshuai.xi     if (g_wLumiTotalCount!=0)
554*53ee8cc1Swenshuai.xi         uwTmpAvr = (256 * (DWORD)g_wLumiAverageTemp + (g_wLumiTotalCount/2)) / g_wLumiTotalCount;
555*53ee8cc1Swenshuai.xi     else
556*53ee8cc1Swenshuai.xi         uwTmpAvr = 0;
557*53ee8cc1Swenshuai.xi 
558*53ee8cc1Swenshuai.xi     if (uwTmpAvr >= 255)
559*53ee8cc1Swenshuai.xi         uwTmpAvr = 255;
560*53ee8cc1Swenshuai.xi 
561*53ee8cc1Swenshuai.xi     return (BYTE)uwTmpAvr;
562*53ee8cc1Swenshuai.xi }
563*53ee8cc1Swenshuai.xi 
564*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
565*53ee8cc1Swenshuai.xi //
566*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msGetAverageLuminous_x4(void)567*53ee8cc1Swenshuai.xi WORD msGetAverageLuminous_x4(void) // = external msGetAverageLuminousValue()
568*53ee8cc1Swenshuai.xi {
569*53ee8cc1Swenshuai.xi     WORD uwTmpAvr;
570*53ee8cc1Swenshuai.xi 
571*53ee8cc1Swenshuai.xi     // Normalize
572*53ee8cc1Swenshuai.xi     if (g_wLumiTotalCount!=0)
573*53ee8cc1Swenshuai.xi         uwTmpAvr = (1024 * (DWORD)g_wLumiAverageTemp + (g_wLumiTotalCount/2)) / g_wLumiTotalCount;
574*53ee8cc1Swenshuai.xi     else
575*53ee8cc1Swenshuai.xi         uwTmpAvr = 0;
576*53ee8cc1Swenshuai.xi 
577*53ee8cc1Swenshuai.xi     if (uwTmpAvr >= 1024- 1)
578*53ee8cc1Swenshuai.xi         uwTmpAvr = 1024- 1;
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi     return uwTmpAvr;
581*53ee8cc1Swenshuai.xi }
582*53ee8cc1Swenshuai.xi 
583*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
584*53ee8cc1Swenshuai.xi //
585*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msGetAverageLuminous_x10(void)586*53ee8cc1Swenshuai.xi WORD msGetAverageLuminous_x10(void)
587*53ee8cc1Swenshuai.xi {
588*53ee8cc1Swenshuai.xi     WORD uwTmpAvr;
589*53ee8cc1Swenshuai.xi 
590*53ee8cc1Swenshuai.xi     // Normalize
591*53ee8cc1Swenshuai.xi     if (g_wLumiTotalCount!=0)
592*53ee8cc1Swenshuai.xi         uwTmpAvr = (256 * 10 * (DWORD)g_wLumiAverageTemp + (g_wLumiTotalCount/2)) / g_wLumiTotalCount;
593*53ee8cc1Swenshuai.xi     else
594*53ee8cc1Swenshuai.xi         uwTmpAvr = 0;
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi     if (uwTmpAvr >= (256 * 10 - 1))
597*53ee8cc1Swenshuai.xi         uwTmpAvr = (256 * 10 - 1);
598*53ee8cc1Swenshuai.xi 
599*53ee8cc1Swenshuai.xi     return uwTmpAvr;
600*53ee8cc1Swenshuai.xi }
601*53ee8cc1Swenshuai.xi 
602*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
603*53ee8cc1Swenshuai.xi //
604*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msGetHistogramHandler(BOOL bWindow)605*53ee8cc1Swenshuai.xi BOOL msGetHistogramHandler(BOOL bWindow)
606*53ee8cc1Swenshuai.xi {
607*53ee8cc1Swenshuai.xi     BYTE ucTmp;
608*53ee8cc1Swenshuai.xi     WORD wTmpHistogramSum; // for protect histogram overflow
609*53ee8cc1Swenshuai.xi     BYTE ucHistogramOverflowIndex;
610*53ee8cc1Swenshuai.xi     BYTE ucReturn;
611*53ee8cc1Swenshuai.xi 
612*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
613*53ee8cc1Swenshuai.xi 
614*53ee8cc1Swenshuai.xi #if 0 //Have double buffer, does not need to wait.
615*53ee8cc1Swenshuai.xi     // ENABLE_FAST_HISTOGRAM_CATCH
616*53ee8cc1Swenshuai.xi     if( !(msReadByte(REG_ADDR_DLC_HANDSHAKE) & _BIT3) )  // Wait until ready
617*53ee8cc1Swenshuai.xi     {
618*53ee8cc1Swenshuai.xi         msDlc_FunctionExit();
619*53ee8cc1Swenshuai.xi         return FALSE;
620*53ee8cc1Swenshuai.xi     }
621*53ee8cc1Swenshuai.xi #endif
622*53ee8cc1Swenshuai.xi 
623*53ee8cc1Swenshuai.xi     if (g_DlcParameters.ucDlcTimeOut)
624*53ee8cc1Swenshuai.xi     {
625*53ee8cc1Swenshuai.xi         // Get histogram 32 data
626*53ee8cc1Swenshuai.xi         // Total/BW_ref histogram count
627*53ee8cc1Swenshuai.xi         // putstr("[DLC]: Disable the Burst Read 32-section Histogram\r\n");
628*53ee8cc1Swenshuai.xi         //dwTotalCount = 0;
629*53ee8cc1Swenshuai.xi         for (ucTmp = 0, wTmpHistogramSum = 0, ucHistogramOverflowIndex = 0xFF; ucTmp < 32; ucTmp++)
630*53ee8cc1Swenshuai.xi         {
631*53ee8cc1Swenshuai.xi             //enhance to support 20 bits
632*53ee8cc1Swenshuai.xi             g_wLumaHistogram32H[ucTmp]=MDrv_Read2Byte(REG_ADDR_HISTOGRAM_DATA_32+ (4*ucTmp)+2)&0x000F;
633*53ee8cc1Swenshuai.xi             g_wLumaHistogram32H[ucTmp] <<= 16;
634*53ee8cc1Swenshuai.xi             g_wLumaHistogram32H[ucTmp] |= MDrv_Read2Byte(REG_ADDR_HISTOGRAM_DATA_32+ (4*ucTmp));
635*53ee8cc1Swenshuai.xi             g_wLumaHistogram32H[ucTmp] = g_wLumaHistogram32H[ucTmp] /4;
636*53ee8cc1Swenshuai.xi 
637*53ee8cc1Swenshuai.xi             //printf(" %d",g_wLumaHistogram32H[ucTmp]);
638*53ee8cc1Swenshuai.xi             //dwTotalCount += g_wLumaHistogram32H[ucTmp];
639*53ee8cc1Swenshuai.xi 
640*53ee8cc1Swenshuai.xi              // protect histogram overflow
641*53ee8cc1Swenshuai.xi             if (g_wLumaHistogram32H[ucTmp] >= 65535)
642*53ee8cc1Swenshuai.xi             {
643*53ee8cc1Swenshuai.xi                 ucHistogramOverflowIndex = ucTmp;
644*53ee8cc1Swenshuai.xi                 //printf("\r\n overflow %d",ucHistogramOverflowIndex);
645*53ee8cc1Swenshuai.xi             }
646*53ee8cc1Swenshuai.xi             g_wLumaHistogram32H[ucTmp] >>= 1; // protect histogram overflow
647*53ee8cc1Swenshuai.xi             wTmpHistogramSum += g_wLumaHistogram32H[ucTmp];
648*53ee8cc1Swenshuai.xi         }
649*53ee8cc1Swenshuai.xi 
650*53ee8cc1Swenshuai.xi         //Get the histogram report sum of pixel number .
651*53ee8cc1Swenshuai.xi         g_wLumiTotalCount = (MDrv_Read2Byte(REG_ADDR_HISTOGRAM_TOTAL_COUNT_L)
652*53ee8cc1Swenshuai.xi                         | (MDrv_Read2Byte(REG_ADDR_HISTOGRAM_TOTAL_COUNT_L+2)<<16))/4;
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi         // protect histogram overflow
655*53ee8cc1Swenshuai.xi         if (ucHistogramOverflowIndex != 0xFF)
656*53ee8cc1Swenshuai.xi         {
657*53ee8cc1Swenshuai.xi             if (wTmpHistogramSum > g_wLumiTotalCount)
658*53ee8cc1Swenshuai.xi                 wTmpHistogramSum = g_wLumiTotalCount;
659*53ee8cc1Swenshuai.xi             g_wLumaHistogram32H[ucHistogramOverflowIndex] += (g_wLumiTotalCount - wTmpHistogramSum);
660*53ee8cc1Swenshuai.xi         }
661*53ee8cc1Swenshuai.xi 
662*53ee8cc1Swenshuai.xi         // Get MIN. & MAX VALUE
663*53ee8cc1Swenshuai.xi         if( MAIN_WINDOW == bWindow )   // Main window
664*53ee8cc1Swenshuai.xi         {
665*53ee8cc1Swenshuai.xi             g_ucHistogramMin = msReadByte(REG_ADDR_MAIN_MIN_VALUE);
666*53ee8cc1Swenshuai.xi             g_ucHistogramMax = msReadByte(REG_ADDR_MAIN_MAX_VALUE);
667*53ee8cc1Swenshuai.xi         }
668*53ee8cc1Swenshuai.xi 
669*53ee8cc1Swenshuai.xi         g_ucTmpAvgN_1 = msGetAverageLuminous();
670*53ee8cc1Swenshuai.xi         g_wTmpAvgN_1_x10 = msGetAverageLuminous_x10();
671*53ee8cc1Swenshuai.xi 
672*53ee8cc1Swenshuai.xi         g_wLumiAverageTemp = ((MDrv_Read2Byte( REG_ADDR_HISTOGRAM_TOTAL_SUM_L+2 )<<16) | MDrv_Read2Byte( REG_ADDR_HISTOGRAM_TOTAL_SUM_L ))/4;
673*53ee8cc1Swenshuai.xi         g_ucTmpAvgN = msGetAverageLuminous();
674*53ee8cc1Swenshuai.xi         g_wTmpAvgN_x10 = msGetAverageLuminous_x10();
675*53ee8cc1Swenshuai.xi 
676*53ee8cc1Swenshuai.xi         ucReturn = TRUE;
677*53ee8cc1Swenshuai.xi     }
678*53ee8cc1Swenshuai.xi     else
679*53ee8cc1Swenshuai.xi     {
680*53ee8cc1Swenshuai.xi         ucReturn = FALSE;
681*53ee8cc1Swenshuai.xi         //putstr("\r\n!!!!! DLC Time Out !!!!!");
682*53ee8cc1Swenshuai.xi     }
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi     // After read histogram, request HW to do histogram
685*53ee8cc1Swenshuai.xi     // Request HW to do histogram
686*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) & 0xF2);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi     g_DlcParameters.ucDlcTimeOut = 150; // 150ms
689*53ee8cc1Swenshuai.xi 
690*53ee8cc1Swenshuai.xi     msWriteByte(REG_ADDR_DLC_HANDSHAKE, msReadByte(REG_ADDR_DLC_HANDSHAKE) | _BIT2 );
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
693*53ee8cc1Swenshuai.xi 
694*53ee8cc1Swenshuai.xi     return ucReturn;
695*53ee8cc1Swenshuai.xi }
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
698*53ee8cc1Swenshuai.xi //
699*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msDlcSetVarHistogramRange(BYTE * pRangeArray)700*53ee8cc1Swenshuai.xi void msDlcSetVarHistogramRange(BYTE *pRangeArray)
701*53ee8cc1Swenshuai.xi {
702*53ee8cc1Swenshuai.xi     BYTE ucTmp;
703*53ee8cc1Swenshuai.xi     DWORD wReg;
704*53ee8cc1Swenshuai.xi 
705*53ee8cc1Swenshuai.xi     wReg = REG_ADDR_HISTOGRAM_8_RANGE_START;
706*53ee8cc1Swenshuai.xi     for (ucTmp=0; ucTmp<7 ; ucTmp++)
707*53ee8cc1Swenshuai.xi     {
708*53ee8cc1Swenshuai.xi         msWriteByte(wReg, *(pRangeArray + ucTmp));
709*53ee8cc1Swenshuai.xi         wReg += 1;
710*53ee8cc1Swenshuai.xi     }
711*53ee8cc1Swenshuai.xi }
712*53ee8cc1Swenshuai.xi 
713*53ee8cc1Swenshuai.xi //=========================================================
714*53ee8cc1Swenshuai.xi //
715*53ee8cc1Swenshuai.xi //=========================================================
msDlcLumiDiffCtrl(void)716*53ee8cc1Swenshuai.xi void msDlcLumiDiffCtrl(void)
717*53ee8cc1Swenshuai.xi {
718*53ee8cc1Swenshuai.xi     if (g_DlcParameters.ucDlcFlickAlphaStart)
719*53ee8cc1Swenshuai.xi     {
720*53ee8cc1Swenshuai.xi         g_DlcParameters.ucDlcFlickAlphaStart--;
721*53ee8cc1Swenshuai.xi     }
722*53ee8cc1Swenshuai.xi 
723*53ee8cc1Swenshuai.xi     if (g_DlcParameters.ucDlcSlowEvent)
724*53ee8cc1Swenshuai.xi     {
725*53ee8cc1Swenshuai.xi         g_DlcParameters.ucDlcSlowEvent--;
726*53ee8cc1Swenshuai.xi         g_ucDlcFlickAlpha = 1; // it mean the curve change slowly
727*53ee8cc1Swenshuai.xi         g_ucDlcFastLoop = 0;
728*53ee8cc1Swenshuai.xi     }
729*53ee8cc1Swenshuai.xi     else
730*53ee8cc1Swenshuai.xi     {
731*53ee8cc1Swenshuai.xi         if (g_wTmpAvgN_1_x10 >= g_wTmpAvgN_x10)
732*53ee8cc1Swenshuai.xi         {
733*53ee8cc1Swenshuai.xi             if ((g_ucDlcFastLoop > 0) || ((g_wTmpAvgN_1_x10 - g_wTmpAvgN_x10 ) >= ((WORD)g_DlcParameters.ucDlcAvgDelta * 10)))
734*53ee8cc1Swenshuai.xi             {
735*53ee8cc1Swenshuai.xi                 //printf("\r\n1H:Avg = %d",g_ucTmpAvgN_1 - g_ucTmpAvgN);
736*53ee8cc1Swenshuai.xi                 //printf(" g_ucDlcFlickAlpha = %d\r\n",g_ucDlcFlickAlpha);
737*53ee8cc1Swenshuai.xi 
738*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha = g_DlcParameters.ucDlcFastAlphaBlending; // (32/32) = (32/DLC_DEFLICK_BLEND_FACTOR) // it mean the curve change quickly
739*53ee8cc1Swenshuai.xi                 if (g_ucDlcFastLoop == 0)
740*53ee8cc1Swenshuai.xi                 {
741*53ee8cc1Swenshuai.xi                     g_ucDlcFastLoop = (g_DlcParameters.ucDlcFastAlphaBlending/2) * 16;
742*53ee8cc1Swenshuai.xi                     if (g_DlcParameters.ucDlcFastAlphaBlending == 32) // 32 / 2 * 16 = 0 overflow
743*53ee8cc1Swenshuai.xi                     {
744*53ee8cc1Swenshuai.xi                         g_ucDlcFastLoop = 255;
745*53ee8cc1Swenshuai.xi                     }
746*53ee8cc1Swenshuai.xi                 }
747*53ee8cc1Swenshuai.xi             }
748*53ee8cc1Swenshuai.xi             else if ((g_DlcParameters.ucDlcAvgDeltaStill <= ((WORD)g_DlcParameters.ucDlcAvgDelta * 10)) && (g_DlcParameters.ucDlcAvgDeltaStill != 0) && ((g_wTmpAvgN_1_x10 - g_wTmpAvgN_x10) <= g_DlcParameters.ucDlcAvgDeltaStill)) // if (Yavg is less than g_DlcParameters.ucDlcAvgDeltaStill) & (Fast change is finish) does NOT do curve change
749*53ee8cc1Swenshuai.xi             {
750*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha = 0; // (0/32) = (1/DLC_DEFLICK_BLEND_FACTOR)  // it mean the curve will be still
751*53ee8cc1Swenshuai.xi             }
752*53ee8cc1Swenshuai.xi             else // if ((g_ucTmpAvgN_1 - g_ucTmpAvgN) < g_DlcParameters.ucDlcAvgDelta) // if (Yavg is less than g_DlcParameters.ucDlcAvgDelta) & (Fast change is finish) may do curve change slowly
753*53ee8cc1Swenshuai.xi             {
754*53ee8cc1Swenshuai.xi                 if ( g_DlcParameters.ucDlcFlickAlphaStart == 0) // chagne source and it's stable
755*53ee8cc1Swenshuai.xi                 {
756*53ee8cc1Swenshuai.xi                     g_ucDlcFlickAlpha = 1; // (1/32) = (1/DLC_DEFLICK_BLEND_FACTOR)  // it mean the curve change slowly
757*53ee8cc1Swenshuai.xi                 }
758*53ee8cc1Swenshuai.xi                 else
759*53ee8cc1Swenshuai.xi                 {
760*53ee8cc1Swenshuai.xi                     g_ucDlcFlickAlpha = g_DlcParameters.ucDlcFastAlphaBlending; // (32/32) = (32/DLC_DEFLICK_BLEND_FACTOR) // it mean the curve change quickly
761*53ee8cc1Swenshuai.xi                 }
762*53ee8cc1Swenshuai.xi             }
763*53ee8cc1Swenshuai.xi         }
764*53ee8cc1Swenshuai.xi         else if (g_wTmpAvgN_1_x10 < g_wTmpAvgN_x10)
765*53ee8cc1Swenshuai.xi         {
766*53ee8cc1Swenshuai.xi              if ((g_ucDlcFastLoop > 0) || (( g_wTmpAvgN_x10 - g_wTmpAvgN_1_x10 ) >= ((WORD)g_DlcParameters.ucDlcAvgDelta * 10)))
767*53ee8cc1Swenshuai.xi             {
768*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha = g_DlcParameters.ucDlcFastAlphaBlending; // (32/32) = (32/DLC_DEFLICK_BLEND_FACTOR)  // it mean the curve change quickly
769*53ee8cc1Swenshuai.xi                 if (g_ucDlcFastLoop == 0)
770*53ee8cc1Swenshuai.xi                 {
771*53ee8cc1Swenshuai.xi                     g_ucDlcFastLoop = (g_DlcParameters.ucDlcFastAlphaBlending/2) * 16;
772*53ee8cc1Swenshuai.xi                     if (g_DlcParameters.ucDlcFastAlphaBlending == 32) // 32 / 2 * 16 = 0 overflow
773*53ee8cc1Swenshuai.xi                     {
774*53ee8cc1Swenshuai.xi                         g_ucDlcFastLoop = 255;
775*53ee8cc1Swenshuai.xi                     }
776*53ee8cc1Swenshuai.xi                 }
777*53ee8cc1Swenshuai.xi             }
778*53ee8cc1Swenshuai.xi             else if ((g_DlcParameters.ucDlcAvgDeltaStill <= ((WORD)g_DlcParameters.ucDlcAvgDelta * 10)) && (g_DlcParameters.ucDlcAvgDeltaStill != 0) && ((g_wTmpAvgN_x10 - g_wTmpAvgN_1_x10) <= g_DlcParameters.ucDlcAvgDeltaStill)) // if (Yavg is less than g_DlcParameters.ucDlcAvgDeltaStill) & (Fast change is finish) does NOT do curve change
779*53ee8cc1Swenshuai.xi             {
780*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha = 0; // (0/32) = (1/DLC_DEFLICK_BLEND_FACTOR)  // it mean the curve will be still
781*53ee8cc1Swenshuai.xi             }
782*53ee8cc1Swenshuai.xi             else // if ((g_ucTmpAvgN - g_ucTmpAvgN_1) < g_DlcParameters.ucDlcAvgDelta) // if (Yavg is less than g_DlcParameters.ucDlcAvgDelta) & (Fast change is finish) may do curve change slowly
783*53ee8cc1Swenshuai.xi             {
784*53ee8cc1Swenshuai.xi                 if (g_DlcParameters.ucDlcFlickAlphaStart == 0) // chagne source and it's stable
785*53ee8cc1Swenshuai.xi                 {
786*53ee8cc1Swenshuai.xi                     g_ucDlcFlickAlpha = 1; // (1/32) = (1/DLC_DEFLICK_BLEND_FACTOR)  // it mean the curve change slowly
787*53ee8cc1Swenshuai.xi                 }
788*53ee8cc1Swenshuai.xi                 else
789*53ee8cc1Swenshuai.xi                 {
790*53ee8cc1Swenshuai.xi                     g_ucDlcFlickAlpha = g_DlcParameters.ucDlcFastAlphaBlending; // (32/32) = (32/DLC_DEFLICK_BLEND_FACTOR)  // it mean the curve change quickly
791*53ee8cc1Swenshuai.xi                 }
792*53ee8cc1Swenshuai.xi             }
793*53ee8cc1Swenshuai.xi         }
794*53ee8cc1Swenshuai.xi     }
795*53ee8cc1Swenshuai.xi }
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi //=========================================================
798*53ee8cc1Swenshuai.xi //
799*53ee8cc1Swenshuai.xi //=========================================================
msDlcHandler(BOOL bWindow)800*53ee8cc1Swenshuai.xi void msDlcHandler(BOOL bWindow)
801*53ee8cc1Swenshuai.xi {
802*53ee8cc1Swenshuai.xi     BYTE ucTmp,Tmp,sepPoint =0,sepPoint0 =0,sepPoint1 =0,sepPoint2 =0,ucYAvgNormalize=0,belnging_factor;
803*53ee8cc1Swenshuai.xi     WORD ucYAvg=0;
804*53ee8cc1Swenshuai.xi     WORD uwHistogramMax, uwHistogramMax2nd,uwHistogramSlopRatioL, uwHistogramSlopRatioH; // 20110406 Ranma add
805*53ee8cc1Swenshuai.xi     DWORD uwHistogramAreaSum[32];//,uwPre_Histogram_ShiftR[32],uwPre_Histogram_ShiftL[32]; // 20110406 Ranma add
806*53ee8cc1Swenshuai.xi     WORD uwHistogramForBleSum=0;
807*53ee8cc1Swenshuai.xi     WORD uwHistogram_BLE_AreaSum[32];
808*53ee8cc1Swenshuai.xi     WORD BLE_StartPoint=0,BLE_EndPoint=0,BLE_StartPoint_Correction=0,BLE_EndPoint_Correction=0;
809*53ee8cc1Swenshuai.xi     WORD BLE_Slop_400,BLE_Slop_480,BLE_Slop_500,BLE_Slop_600,BLE_Slop_800,Dark_BLE_Slop_Min;
810*53ee8cc1Swenshuai.xi 
811*53ee8cc1Swenshuai.xi     static WORD Pre_BLE_Slop=0x4000;
812*53ee8cc1Swenshuai.xi     static WORD Pre_g_ucDlcFlickAlpha = 0,Pre_TotalYSum = 0,Pre_BLE_StartPoint_Correction=0xFFF;
813*53ee8cc1Swenshuai.xi     static BYTE ucPre_YAvg =0x00;
814*53ee8cc1Swenshuai.xi     WORD uwBLE_Blend=0,uwBLE_StartPoint_Blend=0,CurveDiff=0,CurveDiff_Coring=0,CurveDiff_base=0,YAvg_base=0;
815*53ee8cc1Swenshuai.xi     BYTE g_ucDlcFlickAlpha_Max=0,g_ucDlcFlickAlpha_Min=0,YAvg_TH_H,YAvg_TH_L,g_ucDlcFlickAlpha_temp,ucDlcFlickAlpha_Diff=0;
816*53ee8cc1Swenshuai.xi     DWORD dwSumBelowAvg=0, dwSumAboveAvg=0,dwHistogramDlcSlop[17],BLE_Slop=0x400,BLE_Slop_tmp=0x400;
817*53ee8cc1Swenshuai.xi     WORD uwArrayComp, uwArraySum, Delta_YAvg=0,coeff0,coeff1,coeff2;
818*53ee8cc1Swenshuai.xi     DWORD His_ratio_BelowAvg,His_ratio_AboveAvg;
819*53ee8cc1Swenshuai.xi     DWORD g_uwCurveHistogram0[16],g_uwCurveHistogram1[16],g_uwCurveHistogram2[16];
820*53ee8cc1Swenshuai.xi     DWORD BLE_sum=0;
821*53ee8cc1Swenshuai.xi     WORD Pre_YAvg_base,Diff_L,Diff_M,Diff_H,Pre_CurveDiff_base;
822*53ee8cc1Swenshuai.xi 
823*53ee8cc1Swenshuai.xi     //When DLC algorithm is from kernel, force return.
824*53ee8cc1Swenshuai.xi     if(g_DlcParameters.ucDlcAlgorithmMode == XC_DLC_ALGORITHM_KERNEL)
825*53ee8cc1Swenshuai.xi     {
826*53ee8cc1Swenshuai.xi         return ;
827*53ee8cc1Swenshuai.xi     }
828*53ee8cc1Swenshuai.xi 
829*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
830*53ee8cc1Swenshuai.xi 
831*53ee8cc1Swenshuai.xi     msDlcLumiDiffCtrl();
832*53ee8cc1Swenshuai.xi 
833*53ee8cc1Swenshuai.xi     if(g_DlcParameters.ucDlcAlgorithmMode == XC_DLC_ALGORITHM_OLD)
834*53ee8cc1Swenshuai.xi     {
835*53ee8cc1Swenshuai.xi         // If difference is too small, don't do dlc
836*53ee8cc1Swenshuai.xi         if( ((g_ucHistogramMax-g_ucHistogramMin) < 0x0A) || (g_ucHistogramMin >= g_ucHistogramMax) )
837*53ee8cc1Swenshuai.xi         {
838*53ee8cc1Swenshuai.xi             if (g_DlcParameters.ucDlcPureImageMode == DLC_PURE_IMAGE_DO_NOTHING)
839*53ee8cc1Swenshuai.xi             {
840*53ee8cc1Swenshuai.xi                 msDlc_FunctionExit();
841*53ee8cc1Swenshuai.xi                 return;
842*53ee8cc1Swenshuai.xi             }
843*53ee8cc1Swenshuai.xi             else if (g_DlcParameters.ucDlcPureImageMode == DLC_PURE_IMAGE_LINEAR_CURVE)
844*53ee8cc1Swenshuai.xi             {
845*53ee8cc1Swenshuai.xi                 BYTE ucLuma = 0x07;
846*53ee8cc1Swenshuai.xi                 for( ucTmp = 0; ucTmp < 16; ++ ucTmp )
847*53ee8cc1Swenshuai.xi                 {
848*53ee8cc1Swenshuai.xi                     g_ucTable[ucTmp] = ucLuma;
849*53ee8cc1Swenshuai.xi                     ucLuma += 0x10;
850*53ee8cc1Swenshuai.xi                 }
851*53ee8cc1Swenshuai.xi 
852*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha = g_DlcParameters.ucDlcFastAlphaBlending; // it mean the curve change quickly
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi                 // Write data to luma curve ...
855*53ee8cc1Swenshuai.xi                 msDlcWriteCurve(bWindow);
856*53ee8cc1Swenshuai.xi                 if(g_bSetDLCCurveBoth)
857*53ee8cc1Swenshuai.xi                 {
858*53ee8cc1Swenshuai.xi                     msDlcWriteCurve(SUB_WINDOW);
859*53ee8cc1Swenshuai.xi                 }
860*53ee8cc1Swenshuai.xi                 msDlc_FunctionExit();
861*53ee8cc1Swenshuai.xi                 return;
862*53ee8cc1Swenshuai.xi             }
863*53ee8cc1Swenshuai.xi             else // g_DlcParameters.ucDlcPureImageMode == DLC_PURE_IMAGE_DLC_CURVE
864*53ee8cc1Swenshuai.xi                 ;
865*53ee8cc1Swenshuai.xi         }
866*53ee8cc1Swenshuai.xi 
867*53ee8cc1Swenshuai.xi         //=========================================================
868*53ee8cc1Swenshuai.xi         // LC[6] - H0 ~ H12
869*53ee8cc1Swenshuai.xi         //=========================================================
870*53ee8cc1Swenshuai.xi         uwArraySum=0;
871*53ee8cc1Swenshuai.xi         for(ucTmp=0;ucTmp<13;ucTmp++)
872*53ee8cc1Swenshuai.xi             uwArraySum+= g_wLumaHistogram32H[ucTmp];
873*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum / 13;
874*53ee8cc1Swenshuai.xi 
875*53ee8cc1Swenshuai.xi         if (uwArrayComp < g_dwFactory_7)
876*53ee8cc1Swenshuai.xi         {
877*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SD2 / (Lstep*128))+1;
878*53ee8cc1Swenshuai.xi             if (ucTmp > LD2)
879*53ee8cc1Swenshuai.xi                 ucTmp = LD2;
880*53ee8cc1Swenshuai.xi             g_ucTable[6] = 0x67 - ucTmp;
881*53ee8cc1Swenshuai.xi         }
882*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
883*53ee8cc1Swenshuai.xi         {
884*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SD1 / (Hstep*128))+1;
885*53ee8cc1Swenshuai.xi             if (ucTmp > LD1)
886*53ee8cc1Swenshuai.xi                 ucTmp = LD1;
887*53ee8cc1Swenshuai.xi             g_ucTable[6] = 0x67 + ucTmp;
888*53ee8cc1Swenshuai.xi         }
889*53ee8cc1Swenshuai.xi         else
890*53ee8cc1Swenshuai.xi             g_ucTable[6] = 0x67;
891*53ee8cc1Swenshuai.xi 
892*53ee8cc1Swenshuai.xi         if ((g_ucTable[6]> s_Slope[Slope_6])&&((g_ucTable[6] - s_Slope[Slope_6])>=2))
893*53ee8cc1Swenshuai.xi             g_ucTable[6] = g_ucTable[6] - 1;
894*53ee8cc1Swenshuai.xi         else if ((s_Slope[Slope_6]> g_ucTable[6])&&((s_Slope[Slope_6] - g_ucTable[6])>=2))
895*53ee8cc1Swenshuai.xi             g_ucTable[6] = g_ucTable[6] + 1;
896*53ee8cc1Swenshuai.xi         else
897*53ee8cc1Swenshuai.xi             g_ucTable[6] = s_Slope[Slope_6];
898*53ee8cc1Swenshuai.xi 
899*53ee8cc1Swenshuai.xi         //=========================================================
900*53ee8cc1Swenshuai.xi         // LC[4] - H0 ~ H8
901*53ee8cc1Swenshuai.xi         //=========================================================
902*53ee8cc1Swenshuai.xi 
903*53ee8cc1Swenshuai.xi         g_ucTable[4] = ((g_ucTable[6] - 0x07) * 2 / 3) + 0x07;
904*53ee8cc1Swenshuai.xi 
905*53ee8cc1Swenshuai.xi         uwArraySum = uwArraySum - (g_wLumaHistogram32H[12] + g_wLumaHistogram32H[11] + g_wLumaHistogram32H[10] + g_wLumaHistogram32H[9]);
906*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum/9;
907*53ee8cc1Swenshuai.xi 
908*53ee8cc1Swenshuai.xi         if (uwArrayComp < g_dwFactory_7)
909*53ee8cc1Swenshuai.xi         {
910*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SC2 / (Lstep*128))+1;
911*53ee8cc1Swenshuai.xi             if (ucTmp > LC2)
912*53ee8cc1Swenshuai.xi                 ucTmp = LC2;
913*53ee8cc1Swenshuai.xi             g_ucTable[4] = g_ucTable[4] - ucTmp;
914*53ee8cc1Swenshuai.xi         }
915*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
916*53ee8cc1Swenshuai.xi         {
917*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SC1 / (Hstep*128))+1;
918*53ee8cc1Swenshuai.xi             if (ucTmp > LC1)
919*53ee8cc1Swenshuai.xi                 ucTmp = LC1;
920*53ee8cc1Swenshuai.xi             g_ucTable[4] = g_ucTable[4] + ucTmp;
921*53ee8cc1Swenshuai.xi         }
922*53ee8cc1Swenshuai.xi 
923*53ee8cc1Swenshuai.xi         if ((g_ucTable[4]> s_Slope[Slope_4])&&((g_ucTable[4]- s_Slope[Slope_4])>=2))
924*53ee8cc1Swenshuai.xi             g_ucTable[4] = g_ucTable[4] - 1;
925*53ee8cc1Swenshuai.xi         else if ((s_Slope[Slope_4]> g_ucTable[4])&&((s_Slope[Slope_4]- g_ucTable[4])>=2))
926*53ee8cc1Swenshuai.xi             g_ucTable[4] = g_ucTable[4] + 1;
927*53ee8cc1Swenshuai.xi         else
928*53ee8cc1Swenshuai.xi             g_ucTable[4] = s_Slope[Slope_4];
929*53ee8cc1Swenshuai.xi 
930*53ee8cc1Swenshuai.xi         //=========================================================
931*53ee8cc1Swenshuai.xi         // LC[2] - H0 ~ H4
932*53ee8cc1Swenshuai.xi         //=========================================================
933*53ee8cc1Swenshuai.xi 
934*53ee8cc1Swenshuai.xi         g_ucTable[2] = ((g_ucTable[4] - 0x07) * 1 / 2) + 0x07;
935*53ee8cc1Swenshuai.xi         uwArraySum = uwArraySum - (g_wLumaHistogram32H[8] + g_wLumaHistogram32H[7] + g_wLumaHistogram32H[6] + g_wLumaHistogram32H[5]);
936*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum / 5;
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi         if (uwArrayComp < g_dwFactory_7)
939*53ee8cc1Swenshuai.xi         {
940*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SB2 / (Lstep*128))+1;
941*53ee8cc1Swenshuai.xi             if (ucTmp > LB2)
942*53ee8cc1Swenshuai.xi                 ucTmp = LB2;
943*53ee8cc1Swenshuai.xi             g_ucTable[2] = g_ucTable[2] - ucTmp;
944*53ee8cc1Swenshuai.xi         }
945*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
946*53ee8cc1Swenshuai.xi         {
947*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SB1 / (Hstep*128))+1;
948*53ee8cc1Swenshuai.xi             if (ucTmp > LB1)
949*53ee8cc1Swenshuai.xi                 ucTmp = LB1;
950*53ee8cc1Swenshuai.xi             g_ucTable[2] = g_ucTable[2] + ucTmp;
951*53ee8cc1Swenshuai.xi         }
952*53ee8cc1Swenshuai.xi 
953*53ee8cc1Swenshuai.xi         if ((g_ucTable[2]> s_Slope[Slope_2])&&((g_ucTable[2]- s_Slope[Slope_2])>=2))
954*53ee8cc1Swenshuai.xi             g_ucTable[2] = g_ucTable[2] - 1;
955*53ee8cc1Swenshuai.xi         else if ((s_Slope[Slope_2]> g_ucTable[2])&&((s_Slope[Slope_2]- g_ucTable[2])>=2))
956*53ee8cc1Swenshuai.xi             g_ucTable[2] = g_ucTable[2] + 1;
957*53ee8cc1Swenshuai.xi         else
958*53ee8cc1Swenshuai.xi             g_ucTable[2] = s_Slope[Slope_2];
959*53ee8cc1Swenshuai.xi 
960*53ee8cc1Swenshuai.xi         //=========================================================
961*53ee8cc1Swenshuai.xi         // LC[1] - H0 ~ H2
962*53ee8cc1Swenshuai.xi         //=========================================================
963*53ee8cc1Swenshuai.xi 
964*53ee8cc1Swenshuai.xi         g_ucTable[1] = ((g_ucTable[2] - 0x07) * 1 / 2) + 0x07;
965*53ee8cc1Swenshuai.xi         uwArraySum = uwArraySum - (g_wLumaHistogram32H[4] + g_wLumaHistogram32H[3]);
966*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum / 3;
967*53ee8cc1Swenshuai.xi 
968*53ee8cc1Swenshuai.xi         if (uwArrayComp < g_dwFactory_7)
969*53ee8cc1Swenshuai.xi         {
970*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SA2 / (Lstep*128))+1;
971*53ee8cc1Swenshuai.xi             if (ucTmp > LA2)
972*53ee8cc1Swenshuai.xi                 ucTmp = LA2;
973*53ee8cc1Swenshuai.xi 
974*53ee8cc1Swenshuai.xi             if (g_ucTable[1] <= ucTmp)
975*53ee8cc1Swenshuai.xi                 g_ucTable[1] = 0x00;
976*53ee8cc1Swenshuai.xi             else
977*53ee8cc1Swenshuai.xi                 g_ucTable[1] = g_ucTable[1] - ucTmp;
978*53ee8cc1Swenshuai.xi         }
979*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
980*53ee8cc1Swenshuai.xi         {
981*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SA1 / (Hstep*128))+1;
982*53ee8cc1Swenshuai.xi             if (ucTmp > LA1)
983*53ee8cc1Swenshuai.xi                 ucTmp = LA1;
984*53ee8cc1Swenshuai.xi             g_ucTable[1] = g_ucTable[1] + ucTmp;
985*53ee8cc1Swenshuai.xi         }
986*53ee8cc1Swenshuai.xi 
987*53ee8cc1Swenshuai.xi         if ((g_ucTable[1]> s_Slope[Slope_1])&&((g_ucTable[1]- s_Slope[Slope_1])>=1))
988*53ee8cc1Swenshuai.xi             g_ucTable[1] = g_ucTable[1] - 1;
989*53ee8cc1Swenshuai.xi         else if ((s_Slope[Slope_1]> g_ucTable[1])&&((s_Slope[Slope_1]- g_ucTable[1])>=2))
990*53ee8cc1Swenshuai.xi             g_ucTable[1] = g_ucTable[1] + 1;
991*53ee8cc1Swenshuai.xi         else
992*53ee8cc1Swenshuai.xi             g_ucTable[1] = s_Slope[Slope_1];
993*53ee8cc1Swenshuai.xi 
994*53ee8cc1Swenshuai.xi         //=========================================================
995*53ee8cc1Swenshuai.xi         // LC[9] - H19 ~ H31
996*53ee8cc1Swenshuai.xi         //=========================================================
997*53ee8cc1Swenshuai.xi 
998*53ee8cc1Swenshuai.xi         uwArraySum=0;
999*53ee8cc1Swenshuai.xi         for (ucTmp=19; ucTmp<32; ucTmp++)
1000*53ee8cc1Swenshuai.xi             uwArraySum+= g_wLumaHistogram32H[ucTmp];
1001*53ee8cc1Swenshuai.xi 
1002*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum / 13;
1003*53ee8cc1Swenshuai.xi 
1004*53ee8cc1Swenshuai.xi         if (uwArrayComp < g_dwFactory_7)
1005*53ee8cc1Swenshuai.xi         {
1006*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SE1 / (Lstep*128))+1;
1007*53ee8cc1Swenshuai.xi             if (ucTmp > LE1)
1008*53ee8cc1Swenshuai.xi                 ucTmp = LE1;
1009*53ee8cc1Swenshuai.xi             g_ucTable[9] = 0x97 + ucTmp;
1010*53ee8cc1Swenshuai.xi         }
1011*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
1012*53ee8cc1Swenshuai.xi         {
1013*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SE2 / (Hstep*128))+1;
1014*53ee8cc1Swenshuai.xi             if (ucTmp > LE2)
1015*53ee8cc1Swenshuai.xi                 ucTmp = LE2;
1016*53ee8cc1Swenshuai.xi             g_ucTable[9] = 0x97 - ucTmp;
1017*53ee8cc1Swenshuai.xi         }
1018*53ee8cc1Swenshuai.xi         else
1019*53ee8cc1Swenshuai.xi             g_ucTable[9] = 0x97;
1020*53ee8cc1Swenshuai.xi 
1021*53ee8cc1Swenshuai.xi         //=========================================================
1022*53ee8cc1Swenshuai.xi         // LC[11] - H23 ~ H31
1023*53ee8cc1Swenshuai.xi         //=========================================================
1024*53ee8cc1Swenshuai.xi 
1025*53ee8cc1Swenshuai.xi         g_ucTable[11] = 0xF7 - ((0xF7 - g_ucTable[9]) * 2 / 3);
1026*53ee8cc1Swenshuai.xi         uwArraySum = uwArraySum - (g_wLumaHistogram32H[19] + g_wLumaHistogram32H[20] + g_wLumaHistogram32H[21] + g_wLumaHistogram32H[22]);
1027*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum / 9;
1028*53ee8cc1Swenshuai.xi 
1029*53ee8cc1Swenshuai.xi         if (uwArrayComp< g_dwFactory_7)
1030*53ee8cc1Swenshuai.xi         {
1031*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SF1 / (Lstep*128))+1;
1032*53ee8cc1Swenshuai.xi             if (ucTmp > LF1)
1033*53ee8cc1Swenshuai.xi                 ucTmp = LF1;
1034*53ee8cc1Swenshuai.xi             g_ucTable[11] = g_ucTable[11] + ucTmp;
1035*53ee8cc1Swenshuai.xi         }
1036*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
1037*53ee8cc1Swenshuai.xi         {
1038*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SF2 / (Hstep*128))+1;
1039*53ee8cc1Swenshuai.xi             if (ucTmp > LF2)
1040*53ee8cc1Swenshuai.xi                 ucTmp = LF2;
1041*53ee8cc1Swenshuai.xi             g_ucTable[11] = g_ucTable[11] - ucTmp;
1042*53ee8cc1Swenshuai.xi         }
1043*53ee8cc1Swenshuai.xi 
1044*53ee8cc1Swenshuai.xi         //=========================================================
1045*53ee8cc1Swenshuai.xi         // LC[13] - H27 ~ H31
1046*53ee8cc1Swenshuai.xi         //=========================================================
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi         g_ucTable[13] = 0xF7 - ((0xF7 - g_ucTable[11]) * 1 / 2);
1049*53ee8cc1Swenshuai.xi         uwArraySum = uwArraySum - (g_wLumaHistogram32H[23] + g_wLumaHistogram32H[24] + g_wLumaHistogram32H[25] + g_wLumaHistogram32H[26]);
1050*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum / 5;
1051*53ee8cc1Swenshuai.xi 
1052*53ee8cc1Swenshuai.xi         if (uwArrayComp< g_dwFactory_7)
1053*53ee8cc1Swenshuai.xi         {
1054*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SG1 / (Lstep*128))+1;
1055*53ee8cc1Swenshuai.xi             if (ucTmp > LG1)
1056*53ee8cc1Swenshuai.xi                 ucTmp = LG1;
1057*53ee8cc1Swenshuai.xi 
1058*53ee8cc1Swenshuai.xi             if ((0xFF - g_ucTable[13]) <= ucTmp)
1059*53ee8cc1Swenshuai.xi                 g_ucTable[13] = 0xFF;
1060*53ee8cc1Swenshuai.xi             else
1061*53ee8cc1Swenshuai.xi                 g_ucTable[13] = g_ucTable[13] + ucTmp;
1062*53ee8cc1Swenshuai.xi         }
1063*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
1064*53ee8cc1Swenshuai.xi         {
1065*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SG2 / (Hstep*128))+1;
1066*53ee8cc1Swenshuai.xi             if (ucTmp > LG2)
1067*53ee8cc1Swenshuai.xi                 ucTmp = LG2;
1068*53ee8cc1Swenshuai.xi             g_ucTable[13] = g_ucTable[13] - ucTmp;
1069*53ee8cc1Swenshuai.xi         }
1070*53ee8cc1Swenshuai.xi 
1071*53ee8cc1Swenshuai.xi         //=========================================================
1072*53ee8cc1Swenshuai.xi         // LC[14] - H29 ~ H31
1073*53ee8cc1Swenshuai.xi         //=========================================================
1074*53ee8cc1Swenshuai.xi 
1075*53ee8cc1Swenshuai.xi         g_ucTable[14] = 0xF7 - ((0xF7 - g_ucTable[13]) * 1 / 2);
1076*53ee8cc1Swenshuai.xi         uwArraySum = uwArraySum - (g_wLumaHistogram32H[27] + g_wLumaHistogram32H[28]);
1077*53ee8cc1Swenshuai.xi         uwArrayComp = uwArraySum / 3;
1078*53ee8cc1Swenshuai.xi 
1079*53ee8cc1Swenshuai.xi         if (uwArrayComp < g_dwFactory_7)
1080*53ee8cc1Swenshuai.xi         {
1081*53ee8cc1Swenshuai.xi             ucTmp = ((g_dwFactory_7 - uwArrayComp) * SH1 / (Lstep*128))+1;
1082*53ee8cc1Swenshuai.xi             if (ucTmp > LH1)
1083*53ee8cc1Swenshuai.xi             ucTmp = LH1;
1084*53ee8cc1Swenshuai.xi 
1085*53ee8cc1Swenshuai.xi             if ((0xFF - g_ucTable[14]) <= ucTmp)
1086*53ee8cc1Swenshuai.xi                 g_ucTable[14] = 0xFF;
1087*53ee8cc1Swenshuai.xi             else
1088*53ee8cc1Swenshuai.xi                 g_ucTable[14] = g_ucTable[14] + ucTmp;
1089*53ee8cc1Swenshuai.xi         }
1090*53ee8cc1Swenshuai.xi         else if (uwArrayComp > g_dwFactory_9)
1091*53ee8cc1Swenshuai.xi         {
1092*53ee8cc1Swenshuai.xi             ucTmp = ((uwArrayComp - g_dwFactory_9) * SH2 / (Hstep*128))+1;
1093*53ee8cc1Swenshuai.xi             if (ucTmp > LH2)
1094*53ee8cc1Swenshuai.xi             ucTmp = LH2;
1095*53ee8cc1Swenshuai.xi             g_ucTable[14] =g_ucTable[14] - ucTmp;
1096*53ee8cc1Swenshuai.xi         }
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi         s_Slope[Slope_1] = g_ucTable[1];
1099*53ee8cc1Swenshuai.xi         s_Slope[Slope_2] = g_ucTable[2];
1100*53ee8cc1Swenshuai.xi         s_Slope[Slope_4] = g_ucTable[4];
1101*53ee8cc1Swenshuai.xi         s_Slope[Slope_6] = g_ucTable[6];
1102*53ee8cc1Swenshuai.xi 
1103*53ee8cc1Swenshuai.xi         g_ucTable[3] = g_ucTable[2] + ((g_ucTable[4] - g_ucTable[2]) * 1 / 2);
1104*53ee8cc1Swenshuai.xi         g_ucTable[5] = g_ucTable[4] + ((g_ucTable[6] - g_ucTable[4]) * 1 / 2);
1105*53ee8cc1Swenshuai.xi         g_ucTable[7] = g_ucTable[6] + ((g_ucTable[9] - g_ucTable[6]) * 1 / 3);
1106*53ee8cc1Swenshuai.xi         g_ucTable[8] = g_ucTable[6] + ((g_ucTable[9] - g_ucTable[6]) * 2 / 3);
1107*53ee8cc1Swenshuai.xi         g_ucTable[10] = g_ucTable[9] + ((g_ucTable[11] - g_ucTable[9]) * 1 / 2);
1108*53ee8cc1Swenshuai.xi         g_ucTable[12] = g_ucTable[11] + ((g_ucTable[13] - g_ucTable[11]) * 1 / 2);
1109*53ee8cc1Swenshuai.xi         g_ucTable[0] = g_ucTable[1]/3; // Joseph 20081014
1110*53ee8cc1Swenshuai.xi         g_ucTable[15] = 0xFF - ((0xFF - g_ucTable[14]) / 3);
1111*53ee8cc1Swenshuai.xi         g_ucTable[15]= ((g_ucTable[15]) / 2) + (0xf7 / 2);
1112*53ee8cc1Swenshuai.xi 
1113*53ee8cc1Swenshuai.xi         // Get Average Value
1114*53ee8cc1Swenshuai.xi         ucYAvg = msGetAverageLuminous();
1115*53ee8cc1Swenshuai.xi 
1116*53ee8cc1Swenshuai.xi         //printf("\r\n ucYAvg = %d",ucYAvg);
1117*53ee8cc1Swenshuai.xi         if (ucYAvg >= g_DlcParameters.ucDlcYAvgThresholdH)
1118*53ee8cc1Swenshuai.xi         {
1119*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<16; ucTmp++)
1120*53ee8cc1Swenshuai.xi             {
1121*53ee8cc1Swenshuai.xi                 g_DlcParameters.ucLumaCurve2[ucTmp] = g_DlcParameters.ucLumaCurve2_a[ucTmp];
1122*53ee8cc1Swenshuai.xi             }
1123*53ee8cc1Swenshuai.xi         }
1124*53ee8cc1Swenshuai.xi         else if (ucYAvg <= g_DlcParameters.ucDlcYAvgThresholdL)
1125*53ee8cc1Swenshuai.xi         {
1126*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<16; ucTmp++)
1127*53ee8cc1Swenshuai.xi             {
1128*53ee8cc1Swenshuai.xi                 g_DlcParameters.ucLumaCurve2[ucTmp] = g_DlcParameters.ucLumaCurve2_b[ucTmp];
1129*53ee8cc1Swenshuai.xi             }
1130*53ee8cc1Swenshuai.xi         }
1131*53ee8cc1Swenshuai.xi         else // (ucYAvg > g_DlcParameters.ucDlcYAvgThresholdL) && (ucYAvg < g_DlcParameters.ucDlcYAvgThresholdH)
1132*53ee8cc1Swenshuai.xi         {
1133*53ee8cc1Swenshuai.xi             WORD wYavgW;
1134*53ee8cc1Swenshuai.xi 
1135*53ee8cc1Swenshuai.xi             wYavgW = ((WORD)(ucYAvg - g_DlcParameters.ucDlcYAvgThresholdL) * 128) / (g_DlcParameters.ucDlcYAvgThresholdH - g_DlcParameters.ucDlcYAvgThresholdL);
1136*53ee8cc1Swenshuai.xi 
1137*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<16; ucTmp++)
1138*53ee8cc1Swenshuai.xi             {
1139*53ee8cc1Swenshuai.xi                 g_DlcParameters.ucLumaCurve2[ucTmp] = ((WORD)(wYavgW * g_DlcParameters.ucLumaCurve2_a[ucTmp]) + (WORD)((128 - wYavgW) * g_DlcParameters.ucLumaCurve2_b[ucTmp])) / 128;
1140*53ee8cc1Swenshuai.xi             }
1141*53ee8cc1Swenshuai.xi         }
1142*53ee8cc1Swenshuai.xi 
1143*53ee8cc1Swenshuai.xi         if (((WORD)g_ucTable[0] + g_DlcParameters.ucLumaCurve[0] + g_DlcParameters.ucLumaCurve2[0]) >= (0x07 + 0x07))
1144*53ee8cc1Swenshuai.xi             g_ucTable[0] = g_ucTable[0]+(g_DlcParameters.ucLumaCurve[0]-0x07)+(g_DlcParameters.ucLumaCurve2[0]-0x07);
1145*53ee8cc1Swenshuai.xi         else
1146*53ee8cc1Swenshuai.xi             g_ucTable[0] = 0;
1147*53ee8cc1Swenshuai.xi 
1148*53ee8cc1Swenshuai.xi         g_ucTable[1] = g_ucTable[1]+(g_DlcParameters.ucLumaCurve[1]-0x17)+(g_DlcParameters.ucLumaCurve2[1]-0x17);
1149*53ee8cc1Swenshuai.xi         g_ucTable[2] = g_ucTable[2]+(g_DlcParameters.ucLumaCurve[2]-0x27)+(g_DlcParameters.ucLumaCurve2[2]-0x27);
1150*53ee8cc1Swenshuai.xi         g_ucTable[3] = g_ucTable[3]+(g_DlcParameters.ucLumaCurve[3]-0x37)+(g_DlcParameters.ucLumaCurve2[3]-0x37);
1151*53ee8cc1Swenshuai.xi         g_ucTable[4] = g_ucTable[4]+(g_DlcParameters.ucLumaCurve[4]-0x47)+(g_DlcParameters.ucLumaCurve2[4]-0x47);
1152*53ee8cc1Swenshuai.xi         g_ucTable[5] = g_ucTable[5]+(g_DlcParameters.ucLumaCurve[5]-0x57)+(g_DlcParameters.ucLumaCurve2[5]-0x57);
1153*53ee8cc1Swenshuai.xi         g_ucTable[6] = g_ucTable[6]+(g_DlcParameters.ucLumaCurve[6]-0x67)+(g_DlcParameters.ucLumaCurve2[6]-0x67);
1154*53ee8cc1Swenshuai.xi         g_ucTable[7] = g_ucTable[7]+(g_DlcParameters.ucLumaCurve[7]-0x77)+(g_DlcParameters.ucLumaCurve2[7]-0x77);
1155*53ee8cc1Swenshuai.xi         g_ucTable[8] = g_ucTable[8]+(g_DlcParameters.ucLumaCurve[8]-0x87)+(g_DlcParameters.ucLumaCurve2[8]-0x87);
1156*53ee8cc1Swenshuai.xi         g_ucTable[9] = g_ucTable[9]+(g_DlcParameters.ucLumaCurve[9]-0x97)+(g_DlcParameters.ucLumaCurve2[9]-0x97);
1157*53ee8cc1Swenshuai.xi         g_ucTable[10] = g_ucTable[10]+(g_DlcParameters.ucLumaCurve[10]-0xa7)+(g_DlcParameters.ucLumaCurve2[10]-0xa7);
1158*53ee8cc1Swenshuai.xi         g_ucTable[11] = g_ucTable[11]+(g_DlcParameters.ucLumaCurve[11]-0xb7)+(g_DlcParameters.ucLumaCurve2[11]-0xb7);
1159*53ee8cc1Swenshuai.xi         g_ucTable[12] = g_ucTable[12]+(g_DlcParameters.ucLumaCurve[12]-0xc7)+(g_DlcParameters.ucLumaCurve2[12]-0xc7);
1160*53ee8cc1Swenshuai.xi         g_ucTable[13] = g_ucTable[13]+(g_DlcParameters.ucLumaCurve[13]-0xd7)+(g_DlcParameters.ucLumaCurve2[13]-0xd7);
1161*53ee8cc1Swenshuai.xi         g_ucTable[14] = g_ucTable[14]+(g_DlcParameters.ucLumaCurve[14]-0xe7)+(g_DlcParameters.ucLumaCurve2[14]-0xe7);
1162*53ee8cc1Swenshuai.xi         if (((WORD)g_ucTable[15] + g_DlcParameters.ucLumaCurve[15] + g_DlcParameters.ucLumaCurve2[15] - 0xF7 - 0xF7) < 0xFF)
1163*53ee8cc1Swenshuai.xi             g_ucTable[15] = g_ucTable[15]+(g_DlcParameters.ucLumaCurve[15]-0xf7)+(g_DlcParameters.ucLumaCurve2[15]-0xf7);
1164*53ee8cc1Swenshuai.xi         else
1165*53ee8cc1Swenshuai.xi             g_ucTable[15] = 0xFF;
1166*53ee8cc1Swenshuai.xi 
1167*53ee8cc1Swenshuai.xi         // Check Over Flow & Under Flow
1168*53ee8cc1Swenshuai.xi         if (g_ucTable[15] < 0xD0)
1169*53ee8cc1Swenshuai.xi             g_ucTable[15] = 0xFF;
1170*53ee8cc1Swenshuai.xi         if (g_ucTable[14] < 0x90)
1171*53ee8cc1Swenshuai.xi             g_ucTable[14] = 0xFF;
1172*53ee8cc1Swenshuai.xi         if (g_ucTable[13] < 0x70)
1173*53ee8cc1Swenshuai.xi             g_ucTable[13] = 0xFF;
1174*53ee8cc1Swenshuai.xi         if (g_ucTable[12] < 0x60)
1175*53ee8cc1Swenshuai.xi             g_ucTable[12] = 0xFF;
1176*53ee8cc1Swenshuai.xi         if (g_ucTable[11] < 0x50)
1177*53ee8cc1Swenshuai.xi             g_ucTable[11] = 0xFF;
1178*53ee8cc1Swenshuai.xi         if (g_ucTable[2] > 0x90)
1179*53ee8cc1Swenshuai.xi             g_ucTable[2] = 0x0;
1180*53ee8cc1Swenshuai.xi         if (g_ucTable[1] > 0x60)
1181*53ee8cc1Swenshuai.xi             g_ucTable[1] = 0x0;
1182*53ee8cc1Swenshuai.xi         if (g_ucTable[0] > 0x30)
1183*53ee8cc1Swenshuai.xi             g_ucTable[0] = 0x0;
1184*53ee8cc1Swenshuai.xi     }
1185*53ee8cc1Swenshuai.xi     else  //New DLC  Algorithm
1186*53ee8cc1Swenshuai.xi     {
1187*53ee8cc1Swenshuai.xi 
1188*53ee8cc1Swenshuai.xi #if 0 //For customer require. Run DLC algorithm when static field .
1189*53ee8cc1Swenshuai.xi         if((g_wLumiAverageTemp-Pre_TotalYSum)==0)
1190*53ee8cc1Swenshuai.xi         {
1191*53ee8cc1Swenshuai.xi             return;
1192*53ee8cc1Swenshuai.xi         }
1193*53ee8cc1Swenshuai.xi         else
1194*53ee8cc1Swenshuai.xi #endif
1195*53ee8cc1Swenshuai.xi         {
1196*53ee8cc1Swenshuai.xi             ucYAvg = msGetAverageLuminous();
1197*53ee8cc1Swenshuai.xi 
1198*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<32; ucTmp++)
1199*53ee8cc1Swenshuai.xi             {
1200*53ee8cc1Swenshuai.xi                 if(ucTmp==0)
1201*53ee8cc1Swenshuai.xi                 {
1202*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp]=g_wLumaHistogram32H[ucTmp];
1203*53ee8cc1Swenshuai.xi                 }
1204*53ee8cc1Swenshuai.xi                 else
1205*53ee8cc1Swenshuai.xi                 {
1206*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp] = uwHistogramAreaSum[ucTmp-1] + g_wLumaHistogram32H[ucTmp];
1207*53ee8cc1Swenshuai.xi                 }
1208*53ee8cc1Swenshuai.xi             }
1209*53ee8cc1Swenshuai.xi 
1210*53ee8cc1Swenshuai.xi             //Mantis issue of 0232938:Hsense A3 DLC uwHistogramAreaSum[31]=0 will code dump, the divisor can't to be equal to zero .
1211*53ee8cc1Swenshuai.xi             if(uwHistogramAreaSum[31]==0)
1212*53ee8cc1Swenshuai.xi             {
1213*53ee8cc1Swenshuai.xi                 DLC_DEBUG(printf("\n Error in [New DLC Algorithm][ %s  , %d ]  uwHistogramAreaSum[31]=0 !!!\n", __FUNCTION__,__LINE__));
1214*53ee8cc1Swenshuai.xi                 return;
1215*53ee8cc1Swenshuai.xi             }
1216*53ee8cc1Swenshuai.xi 
1217*53ee8cc1Swenshuai.xi 
1218*53ee8cc1Swenshuai.xi             // ~~~~~~~~~~~~~~~~~~~~~~~~Pure Image Detect  ~~~~~~~~~~~~~~~~~~~~~~~~
1219*53ee8cc1Swenshuai.xi             if( ((g_ucHistogramMax-g_ucHistogramMin) <= 10) || (g_ucHistogramMin >= g_ucHistogramMax) )
1220*53ee8cc1Swenshuai.xi             {
1221*53ee8cc1Swenshuai.xi                 g_wPIAlpha = 256;
1222*53ee8cc1Swenshuai.xi             }
1223*53ee8cc1Swenshuai.xi             else if ((g_ucHistogramMax-g_ucHistogramMin) >= 26)
1224*53ee8cc1Swenshuai.xi             {
1225*53ee8cc1Swenshuai.xi                 g_wPIAlpha = 0;
1226*53ee8cc1Swenshuai.xi             }
1227*53ee8cc1Swenshuai.xi             else
1228*53ee8cc1Swenshuai.xi             {
1229*53ee8cc1Swenshuai.xi                 g_wPIAlpha = ((26-(g_ucHistogramMax-g_ucHistogramMin))*256+8)/16;
1230*53ee8cc1Swenshuai.xi             }
1231*53ee8cc1Swenshuai.xi 
1232*53ee8cc1Swenshuai.xi             if(g_wPIAlpha <= 0)
1233*53ee8cc1Swenshuai.xi             {
1234*53ee8cc1Swenshuai.xi                 g_wPIAlpha = 0;
1235*53ee8cc1Swenshuai.xi             }
1236*53ee8cc1Swenshuai.xi             else if (g_wPIAlpha >= 256)
1237*53ee8cc1Swenshuai.xi             {
1238*53ee8cc1Swenshuai.xi                 g_wPIAlpha = 256;
1239*53ee8cc1Swenshuai.xi             }
1240*53ee8cc1Swenshuai.xi             else
1241*53ee8cc1Swenshuai.xi             {
1242*53ee8cc1Swenshuai.xi                 g_wPIAlpha = g_wPIAlpha;
1243*53ee8cc1Swenshuai.xi             }
1244*53ee8cc1Swenshuai.xi             // ~~~~~~~~~~~~~~~~~~~~~~~~Pure Image Detect End   ~~~~~~~~~~~~~~~~~~~~~~~~
1245*53ee8cc1Swenshuai.xi 
1246*53ee8cc1Swenshuai.xi             if(ucYAvg >= g_DlcParameters.ucDlcYAvgThresholdH)
1247*53ee8cc1Swenshuai.xi             {
1248*53ee8cc1Swenshuai.xi                 ucYAvgNormalize=g_DlcParameters.ucDlcSepPointL;
1249*53ee8cc1Swenshuai.xi             }
1250*53ee8cc1Swenshuai.xi             else if(ucYAvg <= g_DlcParameters.ucDlcYAvgThresholdL)
1251*53ee8cc1Swenshuai.xi             {
1252*53ee8cc1Swenshuai.xi                 ucYAvgNormalize=g_DlcParameters.ucDlcSepPointH;
1253*53ee8cc1Swenshuai.xi             }
1254*53ee8cc1Swenshuai.xi             else
1255*53ee8cc1Swenshuai.xi             {
1256*53ee8cc1Swenshuai.xi                 ucYAvgNormalize=((ucYAvg-g_DlcParameters.ucDlcYAvgThresholdL)*g_DlcParameters.ucDlcSepPointL
1257*53ee8cc1Swenshuai.xi                                 +(g_DlcParameters.ucDlcYAvgThresholdH-ucYAvg)*g_DlcParameters.ucDlcSepPointH)
1258*53ee8cc1Swenshuai.xi                                 /(g_DlcParameters.ucDlcYAvgThresholdH-g_DlcParameters.ucDlcYAvgThresholdL);
1259*53ee8cc1Swenshuai.xi             }
1260*53ee8cc1Swenshuai.xi 
1261*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<31; ucTmp++)
1262*53ee8cc1Swenshuai.xi             {
1263*53ee8cc1Swenshuai.xi                 if(((ucTmp+1)*8)<ucYAvgNormalize)
1264*53ee8cc1Swenshuai.xi                 {
1265*53ee8cc1Swenshuai.xi                     dwSumBelowAvg = uwHistogramAreaSum[ucTmp]
1266*53ee8cc1Swenshuai.xi                                    +((ucYAvgNormalize-(ucTmp+1)*8)*g_wLumaHistogram32H[(ucTmp+1)]+4)/8;
1267*53ee8cc1Swenshuai.xi                 }
1268*53ee8cc1Swenshuai.xi             }
1269*53ee8cc1Swenshuai.xi 
1270*53ee8cc1Swenshuai.xi             dwSumAboveAvg = uwHistogramAreaSum[31] - dwSumBelowAvg ;
1271*53ee8cc1Swenshuai.xi 
1272*53ee8cc1Swenshuai.xi             His_ratio_BelowAvg = (4096*dwSumBelowAvg + (uwHistogramAreaSum[31]/2))/uwHistogramAreaSum[31];
1273*53ee8cc1Swenshuai.xi             His_ratio_AboveAvg = (4096*dwSumAboveAvg + (uwHistogramAreaSum[31]/2))/uwHistogramAreaSum[31];
1274*53ee8cc1Swenshuai.xi 
1275*53ee8cc1Swenshuai.xi             if(His_ratio_BelowAvg > 128)
1276*53ee8cc1Swenshuai.xi             {
1277*53ee8cc1Swenshuai.xi                 His_ratio_BelowAvg = 128;
1278*53ee8cc1Swenshuai.xi             }
1279*53ee8cc1Swenshuai.xi             if(His_ratio_AboveAvg > 128)
1280*53ee8cc1Swenshuai.xi             {
1281*53ee8cc1Swenshuai.xi                 His_ratio_AboveAvg = 128;
1282*53ee8cc1Swenshuai.xi             }
1283*53ee8cc1Swenshuai.xi 
1284*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<32; ucTmp++)
1285*53ee8cc1Swenshuai.xi             {
1286*53ee8cc1Swenshuai.xi                 uwHistogram_BLE_AreaSum[ucTmp]=((1024*uwHistogramAreaSum[ucTmp])+uwHistogramAreaSum[31]/2)/uwHistogramAreaSum[31];
1287*53ee8cc1Swenshuai.xi 
1288*53ee8cc1Swenshuai.xi                 if(uwHistogram_BLE_AreaSum[ucTmp]>1024)
1289*53ee8cc1Swenshuai.xi                 {
1290*53ee8cc1Swenshuai.xi                     uwHistogram_BLE_AreaSum[ucTmp]=1024;
1291*53ee8cc1Swenshuai.xi                 }
1292*53ee8cc1Swenshuai.xi             }
1293*53ee8cc1Swenshuai.xi             //uwHistogram_BLE_AreaSum[ucTmp] = histogram Add to normalize 1024
1294*53ee8cc1Swenshuai.xi 
1295*53ee8cc1Swenshuai.xi             if ((dwSumBelowAvg == 0)&&(dwSumAboveAvg != 0))
1296*53ee8cc1Swenshuai.xi             {
1297*53ee8cc1Swenshuai.xi                 for (ucTmp = 0; ucTmp < 32; ucTmp++)
1298*53ee8cc1Swenshuai.xi                 {
1299*53ee8cc1Swenshuai.xi                     if (ucYAvgNormalize >= (((WORD)ucTmp+1)*8))
1300*53ee8cc1Swenshuai.xi                     {
1301*53ee8cc1Swenshuai.xi                          uwHistogramAreaSum[ucTmp] = (ucTmp+1)*8*4;
1302*53ee8cc1Swenshuai.xi                     }
1303*53ee8cc1Swenshuai.xi                     else
1304*53ee8cc1Swenshuai.xi                     {
1305*53ee8cc1Swenshuai.xi                         uwHistogramAreaSum[ucTmp] = ucYAvgNormalize*4 + ((DWORD)uwHistogramAreaSum[ucTmp]*(1024-ucYAvgNormalize*4)+(dwSumAboveAvg/2))/dwSumAboveAvg;
1306*53ee8cc1Swenshuai.xi                         if(uwHistogramAreaSum[ucTmp] >= ((ucTmp+1)*32))
1307*53ee8cc1Swenshuai.xi                         {
1308*53ee8cc1Swenshuai.xi                             uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) + (((uwHistogramAreaSum[ucTmp] - ((ucTmp+1)*32))*His_ratio_AboveAvg)/128);
1309*53ee8cc1Swenshuai.xi                         }
1310*53ee8cc1Swenshuai.xi                         else
1311*53ee8cc1Swenshuai.xi                         {
1312*53ee8cc1Swenshuai.xi                             uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) - (((((ucTmp+1)*32) - uwHistogramAreaSum[ucTmp])*His_ratio_AboveAvg)/128);
1313*53ee8cc1Swenshuai.xi                         }
1314*53ee8cc1Swenshuai.xi                     }
1315*53ee8cc1Swenshuai.xi                 }
1316*53ee8cc1Swenshuai.xi             }
1317*53ee8cc1Swenshuai.xi             else if ((dwSumBelowAvg != 0)&&(dwSumAboveAvg == 0))
1318*53ee8cc1Swenshuai.xi             {
1319*53ee8cc1Swenshuai.xi                 for (ucTmp = 0; ucTmp < 32; ucTmp++)
1320*53ee8cc1Swenshuai.xi                 {
1321*53ee8cc1Swenshuai.xi                     if (ucYAvgNormalize >= (((WORD)ucTmp+1)*8))
1322*53ee8cc1Swenshuai.xi                     {
1323*53ee8cc1Swenshuai.xi                         uwHistogramAreaSum[ucTmp] = ((DWORD)uwHistogramAreaSum[ucTmp]*ucYAvgNormalize*4+(dwSumBelowAvg/2))/dwSumBelowAvg;
1324*53ee8cc1Swenshuai.xi                         if(uwHistogramAreaSum[ucTmp] >= ((ucTmp+1)*32))
1325*53ee8cc1Swenshuai.xi                         {
1326*53ee8cc1Swenshuai.xi                             uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) + (((uwHistogramAreaSum[ucTmp] - ((ucTmp+1)*32))*His_ratio_BelowAvg)/128);
1327*53ee8cc1Swenshuai.xi                         }
1328*53ee8cc1Swenshuai.xi                         else
1329*53ee8cc1Swenshuai.xi                         {
1330*53ee8cc1Swenshuai.xi                             uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) - (((((ucTmp+1)*32) - uwHistogramAreaSum[ucTmp])*His_ratio_BelowAvg)/128);
1331*53ee8cc1Swenshuai.xi                         }
1332*53ee8cc1Swenshuai.xi                     }
1333*53ee8cc1Swenshuai.xi                     else
1334*53ee8cc1Swenshuai.xi                     {
1335*53ee8cc1Swenshuai.xi                          uwHistogramAreaSum[ucTmp] = (ucTmp+1)*8*4;
1336*53ee8cc1Swenshuai.xi                     }
1337*53ee8cc1Swenshuai.xi                 }
1338*53ee8cc1Swenshuai.xi             }
1339*53ee8cc1Swenshuai.xi             else if((dwSumBelowAvg == 0)&&(dwSumAboveAvg == 0))
1340*53ee8cc1Swenshuai.xi             {
1341*53ee8cc1Swenshuai.xi                 for (ucTmp = 0; ucTmp < 32; ucTmp++)
1342*53ee8cc1Swenshuai.xi                 {
1343*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp] = (ucTmp+1)*8*4;
1344*53ee8cc1Swenshuai.xi                 }
1345*53ee8cc1Swenshuai.xi             }
1346*53ee8cc1Swenshuai.xi             else
1347*53ee8cc1Swenshuai.xi             {
1348*53ee8cc1Swenshuai.xi                 for (ucTmp = 0; ucTmp < 32; ucTmp++)
1349*53ee8cc1Swenshuai.xi                 {
1350*53ee8cc1Swenshuai.xi                     if (ucYAvgNormalize >= (((WORD)ucTmp+1)*8))
1351*53ee8cc1Swenshuai.xi                     {
1352*53ee8cc1Swenshuai.xi                          uwHistogramAreaSum[ucTmp] = ((DWORD)uwHistogramAreaSum[ucTmp]*ucYAvgNormalize*4+(dwSumBelowAvg/2))/dwSumBelowAvg;
1353*53ee8cc1Swenshuai.xi                          if(uwHistogramAreaSum[ucTmp] >= ((ucTmp+1)*32))
1354*53ee8cc1Swenshuai.xi                          {
1355*53ee8cc1Swenshuai.xi                              uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) + (((uwHistogramAreaSum[ucTmp] - ((ucTmp+1)*32))*His_ratio_BelowAvg)/128);
1356*53ee8cc1Swenshuai.xi                          }
1357*53ee8cc1Swenshuai.xi                          else
1358*53ee8cc1Swenshuai.xi                          {
1359*53ee8cc1Swenshuai.xi                              uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) - (((((ucTmp+1)*32) - uwHistogramAreaSum[ucTmp])*His_ratio_BelowAvg)/128);
1360*53ee8cc1Swenshuai.xi                          }
1361*53ee8cc1Swenshuai.xi                     }
1362*53ee8cc1Swenshuai.xi                     else
1363*53ee8cc1Swenshuai.xi                     {
1364*53ee8cc1Swenshuai.xi                         uwHistogramAreaSum[ucTmp] = ucYAvgNormalize*4 + ((uwHistogramAreaSum[ucTmp]-dwSumBelowAvg)*(1024-ucYAvgNormalize*4)+(dwSumAboveAvg/2))/dwSumAboveAvg;
1365*53ee8cc1Swenshuai.xi 
1366*53ee8cc1Swenshuai.xi                         if(uwHistogramAreaSum[ucTmp] >= ((ucTmp+1)*32))
1367*53ee8cc1Swenshuai.xi                         {
1368*53ee8cc1Swenshuai.xi                             uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) + (((uwHistogramAreaSum[ucTmp] - ((ucTmp+1)*32))*His_ratio_AboveAvg)/128);
1369*53ee8cc1Swenshuai.xi                         }
1370*53ee8cc1Swenshuai.xi                         else
1371*53ee8cc1Swenshuai.xi                         {
1372*53ee8cc1Swenshuai.xi                             uwHistogramAreaSum[ucTmp] = ((ucTmp+1)*32) - (((((ucTmp+1)*32) - uwHistogramAreaSum[ucTmp])*His_ratio_AboveAvg)/128);
1373*53ee8cc1Swenshuai.xi                         }
1374*53ee8cc1Swenshuai.xi                     }
1375*53ee8cc1Swenshuai.xi                 }
1376*53ee8cc1Swenshuai.xi             }
1377*53ee8cc1Swenshuai.xi 
1378*53ee8cc1Swenshuai.xi             //down sampling to 16 numbers (store to uwHistogramAreaSum[0~15])
1379*53ee8cc1Swenshuai.xi 
1380*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<16; ucTmp++)
1381*53ee8cc1Swenshuai.xi             {
1382*53ee8cc1Swenshuai.xi                 uwHistogramAreaSum[ucTmp] = uwHistogramAreaSum[ucTmp*2]; //
1383*53ee8cc1Swenshuai.xi             }
1384*53ee8cc1Swenshuai.xi 
1385*53ee8cc1Swenshuai.xi             //histogram_DLC limit by slope
1386*53ee8cc1Swenshuai.xi             uwHistogramMax = 0;
1387*53ee8cc1Swenshuai.xi 
1388*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<=16; ucTmp++)
1389*53ee8cc1Swenshuai.xi             {
1390*53ee8cc1Swenshuai.xi                 if (ucTmp == 0)
1391*53ee8cc1Swenshuai.xi                 {
1392*53ee8cc1Swenshuai.xi                     dwHistogramDlcSlop[ucTmp] = ((uwHistogramAreaSum[ucTmp] - 0) * 256 + 16) / 64;
1393*53ee8cc1Swenshuai.xi 
1394*53ee8cc1Swenshuai.xi                     if (dwHistogramDlcSlop[ucTmp] < 257)
1395*53ee8cc1Swenshuai.xi                     {
1396*53ee8cc1Swenshuai.xi                         dwHistogramDlcSlop[ucTmp] = 257;
1397*53ee8cc1Swenshuai.xi                     }
1398*53ee8cc1Swenshuai.xi                 }
1399*53ee8cc1Swenshuai.xi                 else if (ucTmp == 16)
1400*53ee8cc1Swenshuai.xi                 {
1401*53ee8cc1Swenshuai.xi                     dwHistogramDlcSlop[ucTmp] = ((1024 - uwHistogramAreaSum[ucTmp-1]) * 256 + 16) / 64;
1402*53ee8cc1Swenshuai.xi 
1403*53ee8cc1Swenshuai.xi                     if (dwHistogramDlcSlop[ucTmp] < 257)
1404*53ee8cc1Swenshuai.xi                     {
1405*53ee8cc1Swenshuai.xi                         dwHistogramDlcSlop[ucTmp] = 257;
1406*53ee8cc1Swenshuai.xi                     }
1407*53ee8cc1Swenshuai.xi                 }
1408*53ee8cc1Swenshuai.xi                 else
1409*53ee8cc1Swenshuai.xi                 {
1410*53ee8cc1Swenshuai.xi                     dwHistogramDlcSlop[ucTmp] = ((uwHistogramAreaSum[ucTmp] - uwHistogramAreaSum[ucTmp-1]) * 256 + 32) / 64; //find slop
1411*53ee8cc1Swenshuai.xi 
1412*53ee8cc1Swenshuai.xi                     if (dwHistogramDlcSlop[ucTmp] < 257)
1413*53ee8cc1Swenshuai.xi                     {
1414*53ee8cc1Swenshuai.xi                         dwHistogramDlcSlop[ucTmp] = 257; //(only take the slop > 1)
1415*53ee8cc1Swenshuai.xi                     }
1416*53ee8cc1Swenshuai.xi                 }
1417*53ee8cc1Swenshuai.xi 
1418*53ee8cc1Swenshuai.xi                 dwHistogramDlcSlop[ucTmp] = ((g_DlcParameters.ucDlcHistogramLimitCurve[ucTmp]*512)+((dwHistogramDlcSlop[ucTmp]-256)/2)) / (dwHistogramDlcSlop[ucTmp]-256) ; //SlopRatio 8bit 256=1x
1419*53ee8cc1Swenshuai.xi 
1420*53ee8cc1Swenshuai.xi                 if(dwHistogramDlcSlop[ucTmp] > 0xFFFF)
1421*53ee8cc1Swenshuai.xi                 {
1422*53ee8cc1Swenshuai.xi                     dwHistogramDlcSlop[ucTmp] = 0xFFFF;
1423*53ee8cc1Swenshuai.xi                 }
1424*53ee8cc1Swenshuai.xi             }
1425*53ee8cc1Swenshuai.xi 
1426*53ee8cc1Swenshuai.xi             sepPoint = (ucYAvgNormalize-8)/16;
1427*53ee8cc1Swenshuai.xi             sepPoint0 = sepPoint-1;
1428*53ee8cc1Swenshuai.xi             sepPoint1 = sepPoint;
1429*53ee8cc1Swenshuai.xi             sepPoint2 = sepPoint+1;
1430*53ee8cc1Swenshuai.xi 
1431*53ee8cc1Swenshuai.xi             if(ucYAvgNormalize < (sepPoint2*16))
1432*53ee8cc1Swenshuai.xi             {
1433*53ee8cc1Swenshuai.xi                 //sepPoint0 = sepPoint;
1434*53ee8cc1Swenshuai.xi                 //sepPoint1 = sepPoint+1;
1435*53ee8cc1Swenshuai.xi                 //sepPoint2 = sepPoint+2;
1436*53ee8cc1Swenshuai.xi                 coeff0 = (((3*((sepPoint2*16)-ucYAvgNormalize)*((sepPoint2*16)-ucYAvgNormalize))+64*((sepPoint2*16)-ucYAvgNormalize)+320));
1437*53ee8cc1Swenshuai.xi                 coeff1 = ((1408-6*((sepPoint2*16)-ucYAvgNormalize)*((sepPoint2*16)-ucYAvgNormalize)));
1438*53ee8cc1Swenshuai.xi                 coeff2 = 2048-coeff0-coeff1;
1439*53ee8cc1Swenshuai.xi             }
1440*53ee8cc1Swenshuai.xi             else
1441*53ee8cc1Swenshuai.xi             {
1442*53ee8cc1Swenshuai.xi                 //sepPoint0 = sepPoint-1;
1443*53ee8cc1Swenshuai.xi                 //sepPoint1 = sepPoint;
1444*53ee8cc1Swenshuai.xi                 //sepPoint2 = sepPoint+1;
1445*53ee8cc1Swenshuai.xi                 coeff0 = (((3*(ucYAvgNormalize-(sepPoint2*16))*(ucYAvgNormalize-(sepPoint2*16)))-64*(ucYAvgNormalize-(sepPoint2*16))+320));
1446*53ee8cc1Swenshuai.xi                 coeff1 = ((1408-6*(ucYAvgNormalize-(sepPoint2*16))*(ucYAvgNormalize-(sepPoint2*16))));
1447*53ee8cc1Swenshuai.xi                 coeff2 = 2048-coeff0-coeff1;
1448*53ee8cc1Swenshuai.xi             }
1449*53ee8cc1Swenshuai.xi 
1450*53ee8cc1Swenshuai.xi             //Calculate for sepPoint0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1451*53ee8cc1Swenshuai.xi             uwHistogramSlopRatioL = 256;
1452*53ee8cc1Swenshuai.xi             uwHistogramSlopRatioH = 256;
1453*53ee8cc1Swenshuai.xi 
1454*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp<= (sepPoint0+1); ucTmp++)
1455*53ee8cc1Swenshuai.xi             {
1456*53ee8cc1Swenshuai.xi                 uwHistogramMax2nd = dwHistogramDlcSlop[ucTmp];
1457*53ee8cc1Swenshuai.xi 
1458*53ee8cc1Swenshuai.xi                 if (uwHistogramMax2nd < uwHistogramSlopRatioL)
1459*53ee8cc1Swenshuai.xi                 {
1460*53ee8cc1Swenshuai.xi                     uwHistogramSlopRatioL = uwHistogramMax2nd;
1461*53ee8cc1Swenshuai.xi                 }
1462*53ee8cc1Swenshuai.xi             }
1463*53ee8cc1Swenshuai.xi 
1464*53ee8cc1Swenshuai.xi             for (ucTmp = sepPoint0; ucTmp<=16; ucTmp++)
1465*53ee8cc1Swenshuai.xi             {
1466*53ee8cc1Swenshuai.xi                 uwHistogramMax2nd = dwHistogramDlcSlop[ucTmp];
1467*53ee8cc1Swenshuai.xi 
1468*53ee8cc1Swenshuai.xi                 if (uwHistogramMax2nd < uwHistogramSlopRatioH)
1469*53ee8cc1Swenshuai.xi                 {
1470*53ee8cc1Swenshuai.xi                     uwHistogramSlopRatioH = uwHistogramMax2nd;
1471*53ee8cc1Swenshuai.xi                 }
1472*53ee8cc1Swenshuai.xi             }
1473*53ee8cc1Swenshuai.xi 
1474*53ee8cc1Swenshuai.xi             // calcute final target curve for sepPoint0
1475*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp < 16; ucTmp++)
1476*53ee8cc1Swenshuai.xi             {
1477*53ee8cc1Swenshuai.xi                 if (sepPoint0 >= (WORD)ucTmp)
1478*53ee8cc1Swenshuai.xi                 {
1479*53ee8cc1Swenshuai.xi                     if(uwHistogramAreaSum[ucTmp]>(ucTmp * 64 + 32))
1480*53ee8cc1Swenshuai.xi                     {
1481*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram0[ucTmp] = (ucTmp * 64 + 32) + (((uwHistogramAreaSum[ucTmp] - (ucTmp * 64 + 32)) * uwHistogramSlopRatioL + 128) / 256 ) ;
1482*53ee8cc1Swenshuai.xi                     }
1483*53ee8cc1Swenshuai.xi                     else
1484*53ee8cc1Swenshuai.xi                     {
1485*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram0[ucTmp] = (ucTmp * 64 + 32) - ((((ucTmp * 64 + 32)- uwHistogramAreaSum[ucTmp]) * uwHistogramSlopRatioL + 128) / 256);
1486*53ee8cc1Swenshuai.xi                     }
1487*53ee8cc1Swenshuai.xi                 }
1488*53ee8cc1Swenshuai.xi                 else
1489*53ee8cc1Swenshuai.xi                 {
1490*53ee8cc1Swenshuai.xi                     if(uwHistogramAreaSum[ucTmp]>(ucTmp * 64 + 32))
1491*53ee8cc1Swenshuai.xi                     {
1492*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram0[ucTmp] = (ucTmp * 64 + 32) + (((uwHistogramAreaSum[ucTmp] - (ucTmp * 64 + 32)) * uwHistogramSlopRatioH + 128) / 256 ) ;
1493*53ee8cc1Swenshuai.xi                     }
1494*53ee8cc1Swenshuai.xi                     else
1495*53ee8cc1Swenshuai.xi                     {
1496*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram0[ucTmp] = (ucTmp * 64 + 32) - ((((ucTmp * 64 + 32)- uwHistogramAreaSum[ucTmp]) * uwHistogramSlopRatioH + 128) / 256);
1497*53ee8cc1Swenshuai.xi                     }
1498*53ee8cc1Swenshuai.xi                 }
1499*53ee8cc1Swenshuai.xi             }
1500*53ee8cc1Swenshuai.xi 
1501*53ee8cc1Swenshuai.xi             //Calculate for sepPoint1~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1502*53ee8cc1Swenshuai.xi             uwHistogramSlopRatioL = 256;
1503*53ee8cc1Swenshuai.xi             uwHistogramSlopRatioH = 256;
1504*53ee8cc1Swenshuai.xi 
1505*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp<= (sepPoint1+1); ucTmp++)
1506*53ee8cc1Swenshuai.xi             {
1507*53ee8cc1Swenshuai.xi                 uwHistogramMax2nd = dwHistogramDlcSlop[ucTmp];
1508*53ee8cc1Swenshuai.xi 
1509*53ee8cc1Swenshuai.xi                 if (uwHistogramMax2nd < uwHistogramSlopRatioL)
1510*53ee8cc1Swenshuai.xi                 {
1511*53ee8cc1Swenshuai.xi                     uwHistogramSlopRatioL = uwHistogramMax2nd;
1512*53ee8cc1Swenshuai.xi                 }
1513*53ee8cc1Swenshuai.xi             }
1514*53ee8cc1Swenshuai.xi 
1515*53ee8cc1Swenshuai.xi             for (ucTmp = sepPoint1; ucTmp<=16; ucTmp++)
1516*53ee8cc1Swenshuai.xi             {
1517*53ee8cc1Swenshuai.xi                 uwHistogramMax2nd = dwHistogramDlcSlop[ucTmp];
1518*53ee8cc1Swenshuai.xi 
1519*53ee8cc1Swenshuai.xi                 if (uwHistogramMax2nd < uwHistogramSlopRatioH)
1520*53ee8cc1Swenshuai.xi                 {
1521*53ee8cc1Swenshuai.xi                     uwHistogramSlopRatioH = uwHistogramMax2nd;
1522*53ee8cc1Swenshuai.xi                 }
1523*53ee8cc1Swenshuai.xi             }
1524*53ee8cc1Swenshuai.xi 
1525*53ee8cc1Swenshuai.xi             // calcute final target curve for sepPoint1
1526*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp < 16; ucTmp++)
1527*53ee8cc1Swenshuai.xi             {
1528*53ee8cc1Swenshuai.xi                 if (sepPoint1 >= (WORD)ucTmp)
1529*53ee8cc1Swenshuai.xi                 {
1530*53ee8cc1Swenshuai.xi                     if(uwHistogramAreaSum[ucTmp]>(ucTmp * 64 + 32))
1531*53ee8cc1Swenshuai.xi                     {
1532*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram1[ucTmp] = (ucTmp * 64 + 32) + (((uwHistogramAreaSum[ucTmp] - (ucTmp * 64 + 32)) * uwHistogramSlopRatioL + 128) / 256 );
1533*53ee8cc1Swenshuai.xi                     }
1534*53ee8cc1Swenshuai.xi                     else
1535*53ee8cc1Swenshuai.xi                     {
1536*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram1[ucTmp] = (ucTmp * 64 + 32) - ((((ucTmp * 64 + 32)- uwHistogramAreaSum[ucTmp]) * uwHistogramSlopRatioL + 128) / 256 );
1537*53ee8cc1Swenshuai.xi                     }
1538*53ee8cc1Swenshuai.xi                 }
1539*53ee8cc1Swenshuai.xi                 else
1540*53ee8cc1Swenshuai.xi                 {
1541*53ee8cc1Swenshuai.xi                     if(uwHistogramAreaSum[ucTmp]>(ucTmp * 64 + 32))
1542*53ee8cc1Swenshuai.xi                     {
1543*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram1[ucTmp] = (ucTmp * 64 + 32) + (((uwHistogramAreaSum[ucTmp] - (ucTmp * 64 + 32)) * uwHistogramSlopRatioH + 128) / 256 );
1544*53ee8cc1Swenshuai.xi                     }
1545*53ee8cc1Swenshuai.xi                     else
1546*53ee8cc1Swenshuai.xi                     {
1547*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram1[ucTmp] = (ucTmp * 64 + 32) - ((((ucTmp * 64 + 32)- uwHistogramAreaSum[ucTmp]) * uwHistogramSlopRatioH + 128) / 256 );
1548*53ee8cc1Swenshuai.xi                     }
1549*53ee8cc1Swenshuai.xi                 }
1550*53ee8cc1Swenshuai.xi             }
1551*53ee8cc1Swenshuai.xi 
1552*53ee8cc1Swenshuai.xi             //Calculate for sepPoint2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1553*53ee8cc1Swenshuai.xi             uwHistogramSlopRatioL = 256;
1554*53ee8cc1Swenshuai.xi             uwHistogramSlopRatioH = 256;
1555*53ee8cc1Swenshuai.xi 
1556*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp<= (sepPoint2+1); ucTmp++)
1557*53ee8cc1Swenshuai.xi             {
1558*53ee8cc1Swenshuai.xi                 uwHistogramMax2nd = dwHistogramDlcSlop[ucTmp];
1559*53ee8cc1Swenshuai.xi 
1560*53ee8cc1Swenshuai.xi                 if (uwHistogramMax2nd < uwHistogramSlopRatioL)
1561*53ee8cc1Swenshuai.xi                 {
1562*53ee8cc1Swenshuai.xi                     uwHistogramSlopRatioL = uwHistogramMax2nd;
1563*53ee8cc1Swenshuai.xi                 }
1564*53ee8cc1Swenshuai.xi             }
1565*53ee8cc1Swenshuai.xi 
1566*53ee8cc1Swenshuai.xi             for (ucTmp = sepPoint2; ucTmp<=16; ucTmp++)
1567*53ee8cc1Swenshuai.xi             {
1568*53ee8cc1Swenshuai.xi                 uwHistogramMax2nd = dwHistogramDlcSlop[ucTmp];
1569*53ee8cc1Swenshuai.xi 
1570*53ee8cc1Swenshuai.xi                 if (uwHistogramMax2nd < uwHistogramSlopRatioH)
1571*53ee8cc1Swenshuai.xi                 {
1572*53ee8cc1Swenshuai.xi                     uwHistogramSlopRatioH = uwHistogramMax2nd;
1573*53ee8cc1Swenshuai.xi                 }
1574*53ee8cc1Swenshuai.xi             }
1575*53ee8cc1Swenshuai.xi 
1576*53ee8cc1Swenshuai.xi             // calcute final target curve for sepPoint2
1577*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp < 16; ucTmp++)
1578*53ee8cc1Swenshuai.xi             {
1579*53ee8cc1Swenshuai.xi                 if (sepPoint2 >= (WORD)ucTmp)
1580*53ee8cc1Swenshuai.xi                 {
1581*53ee8cc1Swenshuai.xi                     if(uwHistogramAreaSum[ucTmp]>(ucTmp * 64 + 32))
1582*53ee8cc1Swenshuai.xi                     {
1583*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram2[ucTmp] = (ucTmp * 64 + 32) + (((uwHistogramAreaSum[ucTmp] - (ucTmp * 64 + 32)) * uwHistogramSlopRatioL + 128) / 256 );
1584*53ee8cc1Swenshuai.xi                     }
1585*53ee8cc1Swenshuai.xi                     else
1586*53ee8cc1Swenshuai.xi                     {
1587*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram2[ucTmp] = (ucTmp * 64 + 32) - ((((ucTmp * 64 + 32)- uwHistogramAreaSum[ucTmp]) * uwHistogramSlopRatioL + 128) / 256 );
1588*53ee8cc1Swenshuai.xi                     }
1589*53ee8cc1Swenshuai.xi                 }
1590*53ee8cc1Swenshuai.xi                 else
1591*53ee8cc1Swenshuai.xi                 {
1592*53ee8cc1Swenshuai.xi                     if(uwHistogramAreaSum[ucTmp]>(ucTmp * 64 + 32))
1593*53ee8cc1Swenshuai.xi                     {
1594*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram2[ucTmp] = (ucTmp * 64 + 32) + (((uwHistogramAreaSum[ucTmp] - (ucTmp * 64 + 32)) * uwHistogramSlopRatioH + 128) / 256 );
1595*53ee8cc1Swenshuai.xi                     }
1596*53ee8cc1Swenshuai.xi                     else
1597*53ee8cc1Swenshuai.xi                     {
1598*53ee8cc1Swenshuai.xi                         g_uwCurveHistogram2[ucTmp] = (ucTmp * 64 + 32) - ((((ucTmp * 64 + 32)- uwHistogramAreaSum[ucTmp]) * uwHistogramSlopRatioH + 128) / 256);
1599*53ee8cc1Swenshuai.xi                     }
1600*53ee8cc1Swenshuai.xi                 }
1601*53ee8cc1Swenshuai.xi             }
1602*53ee8cc1Swenshuai.xi 
1603*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp < 16; ucTmp++)
1604*53ee8cc1Swenshuai.xi             {
1605*53ee8cc1Swenshuai.xi                 g_uwCurveHistogram[ucTmp] = (coeff0*g_uwCurveHistogram0[ucTmp]+coeff1*g_uwCurveHistogram1[ucTmp]+coeff2*g_uwCurveHistogram2[ucTmp]+1024)/2048;
1606*53ee8cc1Swenshuai.xi             }
1607*53ee8cc1Swenshuai.xi             ///////////// Histogram_DLC add Low_Pass_filter /////////////
1608*53ee8cc1Swenshuai.xi 
1609*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp < 16; ucTmp++)
1610*53ee8cc1Swenshuai.xi             {
1611*53ee8cc1Swenshuai.xi                 if (ucTmp == 0)
1612*53ee8cc1Swenshuai.xi                 {
1613*53ee8cc1Swenshuai.xi                     g_uwCurveHistogram[ucTmp] = (5*g_uwCurveHistogram[ucTmp] + g_uwCurveHistogram[ucTmp+1]+4)/8;
1614*53ee8cc1Swenshuai.xi                 }
1615*53ee8cc1Swenshuai.xi                 else if (ucTmp == 15)
1616*53ee8cc1Swenshuai.xi                 {
1617*53ee8cc1Swenshuai.xi                     g_uwCurveHistogram[ucTmp] = (g_uwCurveHistogram[ucTmp-1] + 5*g_uwCurveHistogram[ucTmp] + 2048 + 4)/8;
1618*53ee8cc1Swenshuai.xi                 }
1619*53ee8cc1Swenshuai.xi                 else
1620*53ee8cc1Swenshuai.xi                 {
1621*53ee8cc1Swenshuai.xi                     g_uwCurveHistogram[ucTmp] = (g_uwCurveHistogram[ucTmp-1] + 6*g_uwCurveHistogram[ucTmp] + g_uwCurveHistogram[ucTmp+1]+4)/8;
1622*53ee8cc1Swenshuai.xi                 }
1623*53ee8cc1Swenshuai.xi             }
1624*53ee8cc1Swenshuai.xi 
1625*53ee8cc1Swenshuai.xi 
1626*53ee8cc1Swenshuai.xi #if 0  //Ranma Histogram DLC low pass
1627*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp < 16; ucTmp++)
1628*53ee8cc1Swenshuai.xi             {
1629*53ee8cc1Swenshuai.xi                 uwHistogramAreaSum[ucTmp+16] = g_uwCurveHistogram[ucTmp];
1630*53ee8cc1Swenshuai.xi 
1631*53ee8cc1Swenshuai.xi                 if (ucTmp == sepPoint0)
1632*53ee8cc1Swenshuai.xi                 {
1633*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp+16] = (g_uwCurveHistogram[ucTmp-1]+g_uwCurveHistogram[ucTmp]*2+g_uwCurveHistogram[ucTmp+1]+2)/4;
1634*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp] = coeff0*uwHistogramAreaSum[ucTmp+16]+(2048-coeff0)*uwHistogramAreaSum[ucTmp];
1635*53ee8cc1Swenshuai.xi                 }
1636*53ee8cc1Swenshuai.xi                 if (ucTmp == sepPoint1)
1637*53ee8cc1Swenshuai.xi                 {
1638*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp+16] = (g_uwCurveHistogram[ucTmp-2]+g_uwCurveHistogram[ucTmp-1]*2+g_uwCurveHistogram[ucTmp]*2+g_uwCurveHistogram[ucTmp+1]*2+g_uwCurveHistogram[ucTmp+2]+4)/8;
1639*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp] = coeff1*uwHistogramAreaSum[ucTmp+16]+(2048-coeff1)*uwHistogramAreaSum[ucTmp];
1640*53ee8cc1Swenshuai.xi                 }
1641*53ee8cc1Swenshuai.xi                 if (ucTmp == sepPoint2)
1642*53ee8cc1Swenshuai.xi                 {
1643*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp+16] = (g_uwCurveHistogram[ucTmp-1]+g_uwCurveHistogram[ucTmp]*2+g_uwCurveHistogram[ucTmp+1]+2)/4;
1644*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp] = coeff2*uwHistogramAreaSum[ucTmp+16]+(2048-coeff2)*uwHistogramAreaSum[ucTmp];
1645*53ee8cc1Swenshuai.xi                 }
1646*53ee8cc1Swenshuai.xi             }
1647*53ee8cc1Swenshuai.xi 
1648*53ee8cc1Swenshuai.xi             LpfBlendAlpha_temp1 = abs(g_uwCurveHistogram[sepPoint0]-g_uwCurveHistogram[sepPoint1]*2+g_uwCurveHistogram[sepPoint2]);
1649*53ee8cc1Swenshuai.xi             LpfBlendAlpha_temp2 = abs(g_uwCurveHistogram[sepPoint1]-g_uwCurveHistogram[sepPoint2]*2+g_uwCurveHistogram[sepPoint2+1]);
1650*53ee8cc1Swenshuai.xi 
1651*53ee8cc1Swenshuai.xi             if(LpfBlendAlpha_temp1 > LpfBlendAlpha_temp2)
1652*53ee8cc1Swenshuai.xi             {
1653*53ee8cc1Swenshuai.xi                 LpfBlendAlpha = LpfBlendAlpha_temp1;
1654*53ee8cc1Swenshuai.xi             }
1655*53ee8cc1Swenshuai.xi             else
1656*53ee8cc1Swenshuai.xi             {
1657*53ee8cc1Swenshuai.xi                 LpfBlendAlpha = LpfBlendAlpha_temp2;
1658*53ee8cc1Swenshuai.xi             }
1659*53ee8cc1Swenshuai.xi 
1660*53ee8cc1Swenshuai.xi             if (LpfBlendAlpha >64)
1661*53ee8cc1Swenshuai.xi             {
1662*53ee8cc1Swenshuai.xi                 LpfBlendAlpha = 64;
1663*53ee8cc1Swenshuai.xi             }
1664*53ee8cc1Swenshuai.xi 
1665*53ee8cc1Swenshuai.xi             for (ucTmp = 0; ucTmp < 16; ucTmp++)
1666*53ee8cc1Swenshuai.xi             {
1667*53ee8cc1Swenshuai.xi                 g_uwCurveHistogram[ucTmp] = (uwHistogramAreaSum[ucTmp+16]*LpfBlendAlpha + (64-LpfBlendAlpha)*g_uwCurveHistogram[ucTmp]+32)/64;
1668*53ee8cc1Swenshuai.xi 
1669*53ee8cc1Swenshuai.xi                 if(g_uwCurveHistogram[ucTmp]>1023)
1670*53ee8cc1Swenshuai.xi                 {
1671*53ee8cc1Swenshuai.xi                     g_uwCurveHistogram[ucTmp]=1023;
1672*53ee8cc1Swenshuai.xi                 }
1673*53ee8cc1Swenshuai.xi             }
1674*53ee8cc1Swenshuai.xi 
1675*53ee8cc1Swenshuai.xi #endif
1676*53ee8cc1Swenshuai.xi             // Calculate curve by Yavg
1677*53ee8cc1Swenshuai.xi 
1678*53ee8cc1Swenshuai.xi             //DLC_PRINTF("\r\n ucYAvg = %d",ucYAvg);
1679*53ee8cc1Swenshuai.xi             if (ucYAvg <= g_DlcParameters.ucDlcYAvgThresholdL)
1680*53ee8cc1Swenshuai.xi             {
1681*53ee8cc1Swenshuai.xi                 for (ucTmp=0; ucTmp<16; ucTmp++)
1682*53ee8cc1Swenshuai.xi                 {
1683*53ee8cc1Swenshuai.xi                     g_ucCurveYAvg[ucTmp] = g_DlcParameters.ucLumaCurve2_a[ucTmp];
1684*53ee8cc1Swenshuai.xi                 }
1685*53ee8cc1Swenshuai.xi             }
1686*53ee8cc1Swenshuai.xi             else if (ucYAvg <= g_DlcParameters.ucDlcYAvgThresholdM)
1687*53ee8cc1Swenshuai.xi             {
1688*53ee8cc1Swenshuai.xi                 for (ucTmp=0; ucTmp<16; ucTmp++)
1689*53ee8cc1Swenshuai.xi                 {
1690*53ee8cc1Swenshuai.xi                     g_ucCurveYAvg[ucTmp] = (((WORD)g_DlcParameters.ucLumaCurve[ucTmp] * (ucYAvg - g_DlcParameters.ucDlcYAvgThresholdL)) / (g_DlcParameters.ucDlcYAvgThresholdM - g_DlcParameters.ucDlcYAvgThresholdL)) +
1691*53ee8cc1Swenshuai.xi                                            (g_DlcParameters.ucLumaCurve2_a[ucTmp] - (((WORD)g_DlcParameters.ucLumaCurve2_a[ucTmp] * (ucYAvg - g_DlcParameters.ucDlcYAvgThresholdL)) / ( g_DlcParameters.ucDlcYAvgThresholdM - g_DlcParameters.ucDlcYAvgThresholdL)));
1692*53ee8cc1Swenshuai.xi                 }
1693*53ee8cc1Swenshuai.xi             }
1694*53ee8cc1Swenshuai.xi             else if (ucYAvg <= g_DlcParameters.ucDlcYAvgThresholdH)
1695*53ee8cc1Swenshuai.xi             {
1696*53ee8cc1Swenshuai.xi                 for (ucTmp=0; ucTmp<16; ucTmp++)
1697*53ee8cc1Swenshuai.xi                 {
1698*53ee8cc1Swenshuai.xi                     g_ucCurveYAvg[ucTmp] = ((WORD)g_DlcParameters.ucLumaCurve2_b[ucTmp] * (ucYAvg - g_DlcParameters.ucDlcYAvgThresholdM) / (g_DlcParameters.ucDlcYAvgThresholdH - g_DlcParameters.ucDlcYAvgThresholdM)) +
1699*53ee8cc1Swenshuai.xi                                            (g_DlcParameters.ucLumaCurve[ucTmp] - ((WORD)g_DlcParameters.ucLumaCurve[ucTmp] * (ucYAvg - g_DlcParameters.ucDlcYAvgThresholdM) / (g_DlcParameters.ucDlcYAvgThresholdH - g_DlcParameters.ucDlcYAvgThresholdM)));
1700*53ee8cc1Swenshuai.xi                 }
1701*53ee8cc1Swenshuai.xi             }
1702*53ee8cc1Swenshuai.xi             else // if (ucYAvg > g_DlcParameters.ucDlcYAvgThresholdH)
1703*53ee8cc1Swenshuai.xi             {
1704*53ee8cc1Swenshuai.xi                 for (ucTmp=0; ucTmp<16; ucTmp++)
1705*53ee8cc1Swenshuai.xi                 {
1706*53ee8cc1Swenshuai.xi                     g_ucCurveYAvg[ucTmp] = g_DlcParameters.ucLumaCurve2_b[ucTmp];
1707*53ee8cc1Swenshuai.xi                 }
1708*53ee8cc1Swenshuai.xi             }
1709*53ee8cc1Swenshuai.xi 
1710*53ee8cc1Swenshuai.xi             belnging_factor = g_DlcParameters.ucDlcCurveModeMixAlpha;
1711*53ee8cc1Swenshuai.xi 
1712*53ee8cc1Swenshuai.xi             // Decide Target Curve
1713*53ee8cc1Swenshuai.xi             Diff_L =g_DlcParameters.ucDlcDiffBase_L;
1714*53ee8cc1Swenshuai.xi             Diff_M =g_DlcParameters.ucDlcDiffBase_M;
1715*53ee8cc1Swenshuai.xi             Diff_H =g_DlcParameters.ucDlcDiffBase_H;
1716*53ee8cc1Swenshuai.xi 
1717*53ee8cc1Swenshuai.xi             if (ucPre_YAvg*4 <= g_DlcParameters.ucDlcYAvgThresholdL*4)
1718*53ee8cc1Swenshuai.xi             {
1719*53ee8cc1Swenshuai.xi                 Pre_YAvg_base = Diff_L*4;
1720*53ee8cc1Swenshuai.xi             }
1721*53ee8cc1Swenshuai.xi             else if (ucPre_YAvg*4 <= g_DlcParameters.ucDlcYAvgThresholdM*4)
1722*53ee8cc1Swenshuai.xi             {
1723*53ee8cc1Swenshuai.xi                 if(Diff_M >= Diff_L)
1724*53ee8cc1Swenshuai.xi                 {
1725*53ee8cc1Swenshuai.xi                     Pre_YAvg_base = Diff_L*4 + (((Diff_M-Diff_L)*(ucPre_YAvg*4-g_DlcParameters.ucDlcYAvgThresholdL*4))/(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1726*53ee8cc1Swenshuai.xi                 }
1727*53ee8cc1Swenshuai.xi                 else
1728*53ee8cc1Swenshuai.xi                 {
1729*53ee8cc1Swenshuai.xi                     Pre_YAvg_base = Diff_L*4 - (((Diff_L-Diff_M)*(ucPre_YAvg*4-g_DlcParameters.ucDlcYAvgThresholdL*4))/(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1730*53ee8cc1Swenshuai.xi                 }
1731*53ee8cc1Swenshuai.xi             }
1732*53ee8cc1Swenshuai.xi             else if (ucPre_YAvg*4 <= g_DlcParameters.ucDlcYAvgThresholdH*4)
1733*53ee8cc1Swenshuai.xi             {
1734*53ee8cc1Swenshuai.xi                 if(Diff_H >= Diff_M)
1735*53ee8cc1Swenshuai.xi                 {
1736*53ee8cc1Swenshuai.xi                     Pre_YAvg_base = Diff_M*4 + (((Diff_H- Diff_M)*(ucPre_YAvg*4- g_DlcParameters.ucDlcYAvgThresholdM*4))/(g_DlcParameters.ucDlcYAvgThresholdH- g_DlcParameters.ucDlcYAvgThresholdM));
1737*53ee8cc1Swenshuai.xi                 }
1738*53ee8cc1Swenshuai.xi                 else
1739*53ee8cc1Swenshuai.xi                 {
1740*53ee8cc1Swenshuai.xi                     Pre_YAvg_base = Diff_M*4 - (((Diff_M-Diff_H)*(ucPre_YAvg*4-g_DlcParameters.ucDlcYAvgThresholdM*4))/(g_DlcParameters.ucDlcYAvgThresholdH - g_DlcParameters.ucDlcYAvgThresholdM));
1741*53ee8cc1Swenshuai.xi                 }
1742*53ee8cc1Swenshuai.xi             }
1743*53ee8cc1Swenshuai.xi             else
1744*53ee8cc1Swenshuai.xi             {
1745*53ee8cc1Swenshuai.xi                 Pre_YAvg_base = Diff_H*4;
1746*53ee8cc1Swenshuai.xi             }
1747*53ee8cc1Swenshuai.xi 
1748*53ee8cc1Swenshuai.xi             if (ucYAvg*4 <= g_DlcParameters.ucDlcYAvgThresholdL*4)
1749*53ee8cc1Swenshuai.xi             {
1750*53ee8cc1Swenshuai.xi                 YAvg_base = Diff_L*4;
1751*53ee8cc1Swenshuai.xi             }
1752*53ee8cc1Swenshuai.xi             else if (ucYAvg*4 <= g_DlcParameters.ucDlcYAvgThresholdM*4)
1753*53ee8cc1Swenshuai.xi             {
1754*53ee8cc1Swenshuai.xi                 if(Diff_M >= Diff_L)
1755*53ee8cc1Swenshuai.xi                 {
1756*53ee8cc1Swenshuai.xi                     YAvg_base = Diff_L*4 + (((Diff_M-Diff_L)*( ucYAvg*4-g_DlcParameters.ucDlcYAvgThresholdL*4))/(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1757*53ee8cc1Swenshuai.xi                 }
1758*53ee8cc1Swenshuai.xi                 else
1759*53ee8cc1Swenshuai.xi                 {
1760*53ee8cc1Swenshuai.xi                     YAvg_base = Diff_L*4 - (((Diff_L-Diff_M)*( ucYAvg*4-g_DlcParameters.ucDlcYAvgThresholdL*4))/(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1761*53ee8cc1Swenshuai.xi                 }
1762*53ee8cc1Swenshuai.xi             }
1763*53ee8cc1Swenshuai.xi             else if (ucYAvg*4 <= g_DlcParameters.ucDlcYAvgThresholdH*4)
1764*53ee8cc1Swenshuai.xi             {
1765*53ee8cc1Swenshuai.xi                 if(Diff_H >= Diff_M)
1766*53ee8cc1Swenshuai.xi                 {
1767*53ee8cc1Swenshuai.xi                     YAvg_base = Diff_M*4 + (((Diff_H- Diff_M)*( ucYAvg*4- g_DlcParameters.ucDlcYAvgThresholdM*4))/(g_DlcParameters.ucDlcYAvgThresholdH- g_DlcParameters.ucDlcYAvgThresholdM));
1768*53ee8cc1Swenshuai.xi                 }
1769*53ee8cc1Swenshuai.xi                 else
1770*53ee8cc1Swenshuai.xi                 {
1771*53ee8cc1Swenshuai.xi                     YAvg_base = Diff_M*4 - (((Diff_M-Diff_H)*(ucYAvg*4-g_DlcParameters.ucDlcYAvgThresholdM*4))/(g_DlcParameters.ucDlcYAvgThresholdH -g_DlcParameters.ucDlcYAvgThresholdM));
1772*53ee8cc1Swenshuai.xi                 }
1773*53ee8cc1Swenshuai.xi             }
1774*53ee8cc1Swenshuai.xi             else
1775*53ee8cc1Swenshuai.xi             {
1776*53ee8cc1Swenshuai.xi                 YAvg_base = Diff_H*4;
1777*53ee8cc1Swenshuai.xi             }
1778*53ee8cc1Swenshuai.xi 
1779*53ee8cc1Swenshuai.xi             YAvg_base = (Pre_YAvg_base + YAvg_base +1)/2;
1780*53ee8cc1Swenshuai.xi 
1781*53ee8cc1Swenshuai.xi             //Mantis issue of 0232938:Hsense A3 DLC the divisor can't to be equal to zero .
1782*53ee8cc1Swenshuai.xi             if(YAvg_base==0)
1783*53ee8cc1Swenshuai.xi             {
1784*53ee8cc1Swenshuai.xi                 DLC_DEBUG(printf("\n Error in  [New DLC Algorithm][ %s  , %d ]  YAvg_base=0 !!!\n", __FUNCTION__,__LINE__));
1785*53ee8cc1Swenshuai.xi                 return;
1786*53ee8cc1Swenshuai.xi             }
1787*53ee8cc1Swenshuai.xi 
1788*53ee8cc1Swenshuai.xi             if (g_DlcParameters.ucDlcCurveMode == 0 ) //DLC_CURVE_MODE_BY_YAVG)
1789*53ee8cc1Swenshuai.xi             {
1790*53ee8cc1Swenshuai.xi                 CurveDiff = g_DlcParameters.ucDlcCurveDiff_H_TH;
1791*53ee8cc1Swenshuai.xi                 for (ucTmp=0; ucTmp<16; ucTmp++)
1792*53ee8cc1Swenshuai.xi                 {
1793*53ee8cc1Swenshuai.xi                     g_uwTable[ucTmp] = (g_ucCurveYAvg[ucTmp]<<2);
1794*53ee8cc1Swenshuai.xi                 }
1795*53ee8cc1Swenshuai.xi             }
1796*53ee8cc1Swenshuai.xi             else if (g_DlcParameters.ucDlcCurveMode == 1 ) //DLC_CURVE_MODE_BY_HISTOGRAM)
1797*53ee8cc1Swenshuai.xi             {
1798*53ee8cc1Swenshuai.xi                 CurveDiff = g_DlcParameters.ucDlcCurveDiff_H_TH;
1799*53ee8cc1Swenshuai.xi                 for (ucTmp=0; ucTmp<16; ucTmp++)
1800*53ee8cc1Swenshuai.xi                 {
1801*53ee8cc1Swenshuai.xi                     g_uwTable[ucTmp] = g_uwCurveHistogram[ucTmp];
1802*53ee8cc1Swenshuai.xi                 }
1803*53ee8cc1Swenshuai.xi             }
1804*53ee8cc1Swenshuai.xi             else
1805*53ee8cc1Swenshuai.xi             {
1806*53ee8cc1Swenshuai.xi                 CurveDiff = 0;
1807*53ee8cc1Swenshuai.xi                 CurveDiff_Coring = 0;
1808*53ee8cc1Swenshuai.xi                 for (ucTmp=0; ucTmp<16; ucTmp++)
1809*53ee8cc1Swenshuai.xi                 {
1810*53ee8cc1Swenshuai.xi                     g_uwTable[ucTmp] = (((WORD)(g_ucCurveYAvg[ucTmp]<<2) * belnging_factor) + ((g_uwCurveHistogram[ucTmp]) * (128 - belnging_factor))) / 128;
1811*53ee8cc1Swenshuai.xi 
1812*53ee8cc1Swenshuai.xi                     if (g_uwPre_CurveHistogram[ucTmp] <= g_DlcParameters.ucDlcYAvgThresholdL*4)
1813*53ee8cc1Swenshuai.xi                     {
1814*53ee8cc1Swenshuai.xi                         Pre_CurveDiff_base = Diff_L*4;
1815*53ee8cc1Swenshuai.xi                     }
1816*53ee8cc1Swenshuai.xi                     else if (g_uwPre_CurveHistogram[ucTmp] <= g_DlcParameters.ucDlcYAvgThresholdM*4)
1817*53ee8cc1Swenshuai.xi                     {
1818*53ee8cc1Swenshuai.xi                         if(Diff_M >= Diff_L)
1819*53ee8cc1Swenshuai.xi                         {
1820*53ee8cc1Swenshuai.xi                             Pre_CurveDiff_base = Diff_L*4 + (((Diff_M-Diff_L)*(g_uwPre_CurveHistogram[ucTmp]-g_DlcParameters.ucDlcYAvgThresholdL*4))/(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1821*53ee8cc1Swenshuai.xi                         }
1822*53ee8cc1Swenshuai.xi                         else
1823*53ee8cc1Swenshuai.xi                         {
1824*53ee8cc1Swenshuai.xi                             Pre_CurveDiff_base = Diff_L*4 - (((Diff_L-Diff_M)*(g_uwPre_CurveHistogram[ucTmp]-g_DlcParameters.ucDlcYAvgThresholdL*4))/(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1825*53ee8cc1Swenshuai.xi                         }
1826*53ee8cc1Swenshuai.xi                     }
1827*53ee8cc1Swenshuai.xi                     else if (g_uwPre_CurveHistogram[ucTmp] <= g_DlcParameters.ucDlcYAvgThresholdH*4)
1828*53ee8cc1Swenshuai.xi                     {
1829*53ee8cc1Swenshuai.xi                         if(Diff_H >= Diff_M)
1830*53ee8cc1Swenshuai.xi                         {
1831*53ee8cc1Swenshuai.xi                             Pre_CurveDiff_base = Diff_M*4 + (((Diff_H- Diff_M)*(g_uwPre_CurveHistogram[ucTmp]- g_DlcParameters.ucDlcYAvgThresholdM*4))/(g_DlcParameters.ucDlcYAvgThresholdH- g_DlcParameters.ucDlcYAvgThresholdM));
1832*53ee8cc1Swenshuai.xi                         }
1833*53ee8cc1Swenshuai.xi                         else
1834*53ee8cc1Swenshuai.xi                         {
1835*53ee8cc1Swenshuai.xi                             Pre_CurveDiff_base = Diff_M*4 -(((Diff_M- Diff_H)*(g_uwPre_CurveHistogram[ucTmp]- g_DlcParameters.ucDlcYAvgThresholdM*4))/(g_DlcParameters.ucDlcYAvgThresholdH- g_DlcParameters.ucDlcYAvgThresholdM));
1836*53ee8cc1Swenshuai.xi                         }
1837*53ee8cc1Swenshuai.xi                     }
1838*53ee8cc1Swenshuai.xi                     else
1839*53ee8cc1Swenshuai.xi                     {
1840*53ee8cc1Swenshuai.xi                         Pre_CurveDiff_base = Diff_H*4;
1841*53ee8cc1Swenshuai.xi                     }
1842*53ee8cc1Swenshuai.xi 
1843*53ee8cc1Swenshuai.xi                     if (g_uwCurveHistogram[ucTmp] <= g_DlcParameters.ucDlcYAvgThresholdL*4)
1844*53ee8cc1Swenshuai.xi                     {
1845*53ee8cc1Swenshuai.xi                         CurveDiff_base = Diff_L*4;
1846*53ee8cc1Swenshuai.xi                     }
1847*53ee8cc1Swenshuai.xi                     else if (g_uwCurveHistogram[ucTmp] <= g_DlcParameters.ucDlcYAvgThresholdM*4)
1848*53ee8cc1Swenshuai.xi                     {
1849*53ee8cc1Swenshuai.xi                         if(Diff_M >= Diff_L)
1850*53ee8cc1Swenshuai.xi                         {
1851*53ee8cc1Swenshuai.xi                             CurveDiff_base = Diff_L*4 + (((Diff_M-Diff_L)*(g_uwCurveHistogram[ucTmp]-g_DlcParameters.ucDlcYAvgThresholdL*4))
1852*53ee8cc1Swenshuai.xi                                         /(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1853*53ee8cc1Swenshuai.xi                         }
1854*53ee8cc1Swenshuai.xi                         else
1855*53ee8cc1Swenshuai.xi                         {
1856*53ee8cc1Swenshuai.xi                             CurveDiff_base = Diff_L*4 - (((Diff_L-Diff_M)*(g_uwCurveHistogram[ucTmp]-g_DlcParameters.ucDlcYAvgThresholdL*4))
1857*53ee8cc1Swenshuai.xi                                         /(g_DlcParameters.ucDlcYAvgThresholdM- g_DlcParameters.ucDlcYAvgThresholdL));
1858*53ee8cc1Swenshuai.xi                         }
1859*53ee8cc1Swenshuai.xi                     }
1860*53ee8cc1Swenshuai.xi                     else if (g_uwCurveHistogram[ucTmp] <= g_DlcParameters.ucDlcYAvgThresholdH*4)
1861*53ee8cc1Swenshuai.xi                     {
1862*53ee8cc1Swenshuai.xi                         if(Diff_H >= Diff_M)
1863*53ee8cc1Swenshuai.xi                         {
1864*53ee8cc1Swenshuai.xi                             CurveDiff_base = Diff_M*4 + (((Diff_H- Diff_M)*(g_uwCurveHistogram[ucTmp]- g_DlcParameters.ucDlcYAvgThresholdM*4))
1865*53ee8cc1Swenshuai.xi                                         /(g_DlcParameters.ucDlcYAvgThresholdH- g_DlcParameters.ucDlcYAvgThresholdM));
1866*53ee8cc1Swenshuai.xi                         }
1867*53ee8cc1Swenshuai.xi                         else
1868*53ee8cc1Swenshuai.xi                         {
1869*53ee8cc1Swenshuai.xi                             CurveDiff_base = Diff_M*4 -(((Diff_M- Diff_H)*(g_uwCurveHistogram[ucTmp]- g_DlcParameters.ucDlcYAvgThresholdM*4))
1870*53ee8cc1Swenshuai.xi                                         /(g_DlcParameters.ucDlcYAvgThresholdH- g_DlcParameters.ucDlcYAvgThresholdM));
1871*53ee8cc1Swenshuai.xi                         }
1872*53ee8cc1Swenshuai.xi                     }
1873*53ee8cc1Swenshuai.xi                     else
1874*53ee8cc1Swenshuai.xi                     {
1875*53ee8cc1Swenshuai.xi                         CurveDiff_base = Diff_H*4;
1876*53ee8cc1Swenshuai.xi                     }
1877*53ee8cc1Swenshuai.xi 
1878*53ee8cc1Swenshuai.xi                     CurveDiff_base = (Pre_CurveDiff_base + CurveDiff_base+1)/2;
1879*53ee8cc1Swenshuai.xi 
1880*53ee8cc1Swenshuai.xi                     //Mantis issue of 0232938:Hsense A3 DLC the divisor can't to be equal to zero .
1881*53ee8cc1Swenshuai.xi                     if(CurveDiff_base==0)
1882*53ee8cc1Swenshuai.xi                     {
1883*53ee8cc1Swenshuai.xi                         DLC_DEBUG(printf("\n Error in  [New DLC Algorithm][ %s  , %d ]  CurveDiff_base=0 !!!\n", __FUNCTION__,__LINE__));
1884*53ee8cc1Swenshuai.xi                         return;
1885*53ee8cc1Swenshuai.xi                     }
1886*53ee8cc1Swenshuai.xi 
1887*53ee8cc1Swenshuai.xi                     if(ucTmp*16+8 <= ucYAvgNormalize)
1888*53ee8cc1Swenshuai.xi                     {
1889*53ee8cc1Swenshuai.xi                         if (ucTmp == 0)
1890*53ee8cc1Swenshuai.xi                         {
1891*53ee8cc1Swenshuai.xi                             CurveDiff_Coring = (His_ratio_BelowAvg*(1024-uwHistogram_BLE_AreaSum[1])*abs(g_uwCurveHistogram[ucTmp]-g_uwPre_CurveHistogram[ucTmp]))/(15*CurveDiff_base*128);
1892*53ee8cc1Swenshuai.xi                         }
1893*53ee8cc1Swenshuai.xi                         else
1894*53ee8cc1Swenshuai.xi                         {
1895*53ee8cc1Swenshuai.xi                             CurveDiff_Coring = (His_ratio_BelowAvg*(1024-(uwHistogram_BLE_AreaSum[ucTmp*2+1]- uwHistogram_BLE_AreaSum[ucTmp*2-1]))*abs(g_uwCurveHistogram[ucTmp]-g_uwPre_CurveHistogram[ucTmp]))/(15*CurveDiff_base*128);
1896*53ee8cc1Swenshuai.xi                         }
1897*53ee8cc1Swenshuai.xi                     }
1898*53ee8cc1Swenshuai.xi                     else
1899*53ee8cc1Swenshuai.xi                     {
1900*53ee8cc1Swenshuai.xi                         CurveDiff_Coring = (His_ratio_AboveAvg*(1024-(uwHistogram_BLE_AreaSum[ucTmp*2+1]- uwHistogram_BLE_AreaSum[ucTmp*2-1]))*abs(g_uwCurveHistogram[ucTmp]-g_uwPre_CurveHistogram[ucTmp]))/(15*CurveDiff_base*128);
1901*53ee8cc1Swenshuai.xi                     }
1902*53ee8cc1Swenshuai.xi 
1903*53ee8cc1Swenshuai.xi                     CurveDiff_Coring = CurveDiff_Coring/6;
1904*53ee8cc1Swenshuai.xi 
1905*53ee8cc1Swenshuai.xi                     CurveDiff = CurveDiff + CurveDiff_Coring ;
1906*53ee8cc1Swenshuai.xi                     g_uwPre_CurveHistogram[ucTmp] = g_uwCurveHistogram[ucTmp];
1907*53ee8cc1Swenshuai.xi                 }
1908*53ee8cc1Swenshuai.xi             }
1909*53ee8cc1Swenshuai.xi 
1910*53ee8cc1Swenshuai.xi             if(CurveDiff <= g_DlcParameters.ucDlcCurveDiff_L_TH)
1911*53ee8cc1Swenshuai.xi             {
1912*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Max = g_DlcParameters.ucDlcAlphaBlendingMin;
1913*53ee8cc1Swenshuai.xi             }
1914*53ee8cc1Swenshuai.xi             else if(CurveDiff >= g_DlcParameters.ucDlcCurveDiff_H_TH)
1915*53ee8cc1Swenshuai.xi             {
1916*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Max = g_DlcParameters.ucDlcAlphaBlendingMax; ;
1917*53ee8cc1Swenshuai.xi             }
1918*53ee8cc1Swenshuai.xi             else
1919*53ee8cc1Swenshuai.xi             {
1920*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Max = (((g_DlcParameters.ucDlcAlphaBlendingMax-g_DlcParameters.ucDlcAlphaBlendingMin)*(CurveDiff - g_DlcParameters.ucDlcCurveDiff_L_TH))/
1921*53ee8cc1Swenshuai.xi                                         (g_DlcParameters.ucDlcCurveDiff_H_TH - g_DlcParameters.ucDlcCurveDiff_L_TH))+g_DlcParameters.ucDlcAlphaBlendingMin;
1922*53ee8cc1Swenshuai.xi             }
1923*53ee8cc1Swenshuai.xi 
1924*53ee8cc1Swenshuai.xi             Delta_YAvg = (96*4*abs(ucYAvg - ucPre_YAvg)+ YAvg_base/2)/YAvg_base;
1925*53ee8cc1Swenshuai.xi 
1926*53ee8cc1Swenshuai.xi             if(Delta_YAvg > 256)
1927*53ee8cc1Swenshuai.xi             {
1928*53ee8cc1Swenshuai.xi                 Delta_YAvg = 256;
1929*53ee8cc1Swenshuai.xi             }
1930*53ee8cc1Swenshuai.xi             else
1931*53ee8cc1Swenshuai.xi             {
1932*53ee8cc1Swenshuai.xi                 Delta_YAvg = Delta_YAvg;
1933*53ee8cc1Swenshuai.xi             }
1934*53ee8cc1Swenshuai.xi 
1935*53ee8cc1Swenshuai.xi             YAvg_TH_H = g_DlcParameters.ucDlcYAVG_H_TH;
1936*53ee8cc1Swenshuai.xi             YAvg_TH_L = g_DlcParameters.ucDlcYAVG_L_TH;
1937*53ee8cc1Swenshuai.xi 
1938*53ee8cc1Swenshuai.xi             if(Delta_YAvg < YAvg_TH_L)
1939*53ee8cc1Swenshuai.xi             {
1940*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Min = g_DlcParameters.ucDlcAlphaBlendingMin;
1941*53ee8cc1Swenshuai.xi             }
1942*53ee8cc1Swenshuai.xi             else if(Delta_YAvg >= YAvg_TH_H)
1943*53ee8cc1Swenshuai.xi             {
1944*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Min = g_DlcParameters.ucDlcAlphaBlendingMax;
1945*53ee8cc1Swenshuai.xi             }
1946*53ee8cc1Swenshuai.xi             else
1947*53ee8cc1Swenshuai.xi             {
1948*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Min = ((Delta_YAvg- YAvg_TH_L)*( g_DlcParameters.ucDlcAlphaBlendingMax- g_DlcParameters.ucDlcAlphaBlendingMin)
1949*53ee8cc1Swenshuai.xi                                         + ( YAvg_TH_H-YAvg_TH_L)/2)/( YAvg_TH_H-YAvg_TH_L)+g_DlcParameters.ucDlcAlphaBlendingMin;
1950*53ee8cc1Swenshuai.xi             }
1951*53ee8cc1Swenshuai.xi 
1952*53ee8cc1Swenshuai.xi             ucPre_YAvg = ucYAvg;
1953*53ee8cc1Swenshuai.xi 
1954*53ee8cc1Swenshuai.xi             if (g_ucDlcFlickAlpha_Max > g_ucDlcFlickAlpha_Min)
1955*53ee8cc1Swenshuai.xi             {
1956*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Max = g_ucDlcFlickAlpha_Max;
1957*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Min = g_ucDlcFlickAlpha_Min;
1958*53ee8cc1Swenshuai.xi             }
1959*53ee8cc1Swenshuai.xi             else
1960*53ee8cc1Swenshuai.xi             {
1961*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_temp = g_ucDlcFlickAlpha_Max;
1962*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Max = g_ucDlcFlickAlpha_Min;
1963*53ee8cc1Swenshuai.xi                 g_ucDlcFlickAlpha_Min = g_ucDlcFlickAlpha_temp;
1964*53ee8cc1Swenshuai.xi             }
1965*53ee8cc1Swenshuai.xi 
1966*53ee8cc1Swenshuai.xi             g_ucDlcFlickAlpha  = ( g_DlcParameters.ucDlcFlicker_alpha*g_ucDlcFlickAlpha_Max + (256- g_DlcParameters.ucDlcFlicker_alpha)*g_ucDlcFlickAlpha_Min+128)/256;
1967*53ee8cc1Swenshuai.xi 
1968*53ee8cc1Swenshuai.xi         }
1969*53ee8cc1Swenshuai.xi     }
1970*53ee8cc1Swenshuai.xi 
1971*53ee8cc1Swenshuai.xi     if( g_DlcParameters.bEnableBLE )
1972*53ee8cc1Swenshuai.xi     {
1973*53ee8cc1Swenshuai.xi         BYTE uc_cut,uc_lowbound,uc_highbound,i;
1974*53ee8cc1Swenshuai.xi 
1975*53ee8cc1Swenshuai.xi         // combine BLE with software
1976*53ee8cc1Swenshuai.xi         // BLE - get cut point
1977*53ee8cc1Swenshuai.xi         uc_cut = g_ucHistogramMin;
1978*53ee8cc1Swenshuai.xi 
1979*53ee8cc1Swenshuai.xi         uc_highbound = msReadByte( REG_ADDR_BLE_UPPER_BOND );
1980*53ee8cc1Swenshuai.xi         uc_lowbound = msReadByte( REG_ADDR_BLE_LOWER_BOND);
1981*53ee8cc1Swenshuai.xi 
1982*53ee8cc1Swenshuai.xi         if (uc_cut < uc_lowbound )
1983*53ee8cc1Swenshuai.xi         {
1984*53ee8cc1Swenshuai.xi             uc_cut = uc_lowbound;
1985*53ee8cc1Swenshuai.xi         }
1986*53ee8cc1Swenshuai.xi         else if ( uc_cut > uc_highbound )
1987*53ee8cc1Swenshuai.xi         {
1988*53ee8cc1Swenshuai.xi             uc_cut = uc_highbound;
1989*53ee8cc1Swenshuai.xi         }
1990*53ee8cc1Swenshuai.xi         else
1991*53ee8cc1Swenshuai.xi         {
1992*53ee8cc1Swenshuai.xi             uc_cut = uc_cut;
1993*53ee8cc1Swenshuai.xi         }
1994*53ee8cc1Swenshuai.xi 
1995*53ee8cc1Swenshuai.xi         // BLE - calculation
1996*53ee8cc1Swenshuai.xi         for(i=0; i<8; ++i)
1997*53ee8cc1Swenshuai.xi         {
1998*53ee8cc1Swenshuai.xi             if (g_ucTable[i] < uc_cut)
1999*53ee8cc1Swenshuai.xi             {
2000*53ee8cc1Swenshuai.xi                 g_ucTable[i] = 0;
2001*53ee8cc1Swenshuai.xi             }
2002*53ee8cc1Swenshuai.xi             else if (g_ucTable[i] > (uc_cut+g_DlcParameters.ucDlcBLEPoint))
2003*53ee8cc1Swenshuai.xi             {
2004*53ee8cc1Swenshuai.xi                 ;
2005*53ee8cc1Swenshuai.xi             }
2006*53ee8cc1Swenshuai.xi             else
2007*53ee8cc1Swenshuai.xi             {
2008*53ee8cc1Swenshuai.xi                 g_ucTable[i] = ((WORD)(g_ucTable[i]-uc_cut))*(uc_cut+g_DlcParameters.ucDlcBLEPoint)/g_DlcParameters.ucDlcBLEPoint;
2009*53ee8cc1Swenshuai.xi             }
2010*53ee8cc1Swenshuai.xi         }
2011*53ee8cc1Swenshuai.xi     }
2012*53ee8cc1Swenshuai.xi 
2013*53ee8cc1Swenshuai.xi     if( g_DlcParameters.bEnableWLE )
2014*53ee8cc1Swenshuai.xi     {
2015*53ee8cc1Swenshuai.xi         BYTE i,uc_wcut,uc_wlowbound,uc_whighbound;
2016*53ee8cc1Swenshuai.xi         // combine BLE with software
2017*53ee8cc1Swenshuai.xi         // WLE - get cut point
2018*53ee8cc1Swenshuai.xi         uc_wcut = g_ucHistogramMax;
2019*53ee8cc1Swenshuai.xi 
2020*53ee8cc1Swenshuai.xi         uc_whighbound = (msReadByte( REG_ADDR_WLE_UPPER_BOND ) & 0x3F) + 0xC0; // bit offset 0x00~0x3F -> 0xC0~0xFF
2021*53ee8cc1Swenshuai.xi         uc_wlowbound = (msReadByte( REG_ADDR_WLE_LOWER_BOND) & 0x3F) + 0xC0; // bit offset 0x00~0x3F -> 0xC0~0xFF
2022*53ee8cc1Swenshuai.xi 
2023*53ee8cc1Swenshuai.xi         if (uc_wcut < uc_wlowbound )
2024*53ee8cc1Swenshuai.xi         {
2025*53ee8cc1Swenshuai.xi             uc_wcut = uc_wlowbound;
2026*53ee8cc1Swenshuai.xi         }
2027*53ee8cc1Swenshuai.xi         else if ( uc_wcut > uc_whighbound )
2028*53ee8cc1Swenshuai.xi         {
2029*53ee8cc1Swenshuai.xi             uc_wcut = uc_whighbound;
2030*53ee8cc1Swenshuai.xi         }
2031*53ee8cc1Swenshuai.xi         else
2032*53ee8cc1Swenshuai.xi         {
2033*53ee8cc1Swenshuai.xi             uc_wcut = uc_wcut;
2034*53ee8cc1Swenshuai.xi         }
2035*53ee8cc1Swenshuai.xi 
2036*53ee8cc1Swenshuai.xi         // WLE - calculation
2037*53ee8cc1Swenshuai.xi         for(i=0; i<8; ++i)
2038*53ee8cc1Swenshuai.xi         {
2039*53ee8cc1Swenshuai.xi             if (g_ucTable[15-i] > uc_wcut)
2040*53ee8cc1Swenshuai.xi             {
2041*53ee8cc1Swenshuai.xi                 g_ucTable[15-i] = 0xFF;
2042*53ee8cc1Swenshuai.xi             }
2043*53ee8cc1Swenshuai.xi             else if (g_ucTable[15-i] < (uc_wcut-g_DlcParameters.ucDlcWLEPoint))
2044*53ee8cc1Swenshuai.xi             {
2045*53ee8cc1Swenshuai.xi                 ;
2046*53ee8cc1Swenshuai.xi             }
2047*53ee8cc1Swenshuai.xi             else
2048*53ee8cc1Swenshuai.xi             {
2049*53ee8cc1Swenshuai.xi                 g_ucTable[15-i] = 0xFF - (((WORD)(uc_wcut-g_ucTable[15-i]))*(0xFF-uc_wcut+g_DlcParameters.ucDlcWLEPoint)/g_DlcParameters.ucDlcWLEPoint);
2050*53ee8cc1Swenshuai.xi             }
2051*53ee8cc1Swenshuai.xi         }
2052*53ee8cc1Swenshuai.xi     }
2053*53ee8cc1Swenshuai.xi 
2054*53ee8cc1Swenshuai.xi     // Level Limit
2055*53ee8cc1Swenshuai.xi     if (g_DlcParameters.ucDlcLevelLimit)
2056*53ee8cc1Swenshuai.xi     {
2057*53ee8cc1Swenshuai.xi         if ((g_DlcParameters.ucDlcLevelLimit >= 1) && (g_ucTable[15] >= 0xF7))
2058*53ee8cc1Swenshuai.xi         {
2059*53ee8cc1Swenshuai.xi             g_ucTable[15] = 0xF7;
2060*53ee8cc1Swenshuai.xi             if (g_ucTable[14] > 0xF7)
2061*53ee8cc1Swenshuai.xi             {
2062*53ee8cc1Swenshuai.xi                 g_ucTable[14] = 0xF7;
2063*53ee8cc1Swenshuai.xi             }
2064*53ee8cc1Swenshuai.xi 
2065*53ee8cc1Swenshuai.xi             if (g_ucTable[13] > 0xF7)
2066*53ee8cc1Swenshuai.xi             {
2067*53ee8cc1Swenshuai.xi                 g_ucTable[13] = 0xF7;
2068*53ee8cc1Swenshuai.xi             }
2069*53ee8cc1Swenshuai.xi         }
2070*53ee8cc1Swenshuai.xi 
2071*53ee8cc1Swenshuai.xi         if ((g_DlcParameters.ucDlcLevelLimit >= 2) && (g_ucTable[14] >= 0xE7))
2072*53ee8cc1Swenshuai.xi         {
2073*53ee8cc1Swenshuai.xi             g_ucTable[14] = 0xE7;
2074*53ee8cc1Swenshuai.xi             if (g_ucTable[13] > 0xE7)
2075*53ee8cc1Swenshuai.xi             {
2076*53ee8cc1Swenshuai.xi                 g_ucTable[13] = 0xE7;
2077*53ee8cc1Swenshuai.xi             }
2078*53ee8cc1Swenshuai.xi 
2079*53ee8cc1Swenshuai.xi             if (g_ucTable[12] > 0xE7)
2080*53ee8cc1Swenshuai.xi             {
2081*53ee8cc1Swenshuai.xi                 g_ucTable[12] = 0xE7;
2082*53ee8cc1Swenshuai.xi             }
2083*53ee8cc1Swenshuai.xi         }
2084*53ee8cc1Swenshuai.xi 
2085*53ee8cc1Swenshuai.xi         if ((g_DlcParameters.ucDlcLevelLimit >= 3) && (g_ucTable[13] >= 0xD7))
2086*53ee8cc1Swenshuai.xi         {
2087*53ee8cc1Swenshuai.xi             g_ucTable[13] = 0xD7;
2088*53ee8cc1Swenshuai.xi             if (g_ucTable[12] > 0xD7)
2089*53ee8cc1Swenshuai.xi             {
2090*53ee8cc1Swenshuai.xi                 g_ucTable[12] = 0xD7;
2091*53ee8cc1Swenshuai.xi             }
2092*53ee8cc1Swenshuai.xi 
2093*53ee8cc1Swenshuai.xi             if (g_ucTable[11] > 0xD7)
2094*53ee8cc1Swenshuai.xi             {
2095*53ee8cc1Swenshuai.xi                 g_ucTable[11] = 0xD7;
2096*53ee8cc1Swenshuai.xi             }
2097*53ee8cc1Swenshuai.xi         }
2098*53ee8cc1Swenshuai.xi 
2099*53ee8cc1Swenshuai.xi         if ((g_DlcParameters.ucDlcLevelLimit >= 4) && (g_ucTable[12] >= 0xC7))
2100*53ee8cc1Swenshuai.xi         {
2101*53ee8cc1Swenshuai.xi             g_ucTable[12] = 0xC7;
2102*53ee8cc1Swenshuai.xi             if (g_ucTable[11] > 0xC7)
2103*53ee8cc1Swenshuai.xi             {
2104*53ee8cc1Swenshuai.xi                 g_ucTable[11] = 0xC7;
2105*53ee8cc1Swenshuai.xi             }
2106*53ee8cc1Swenshuai.xi 
2107*53ee8cc1Swenshuai.xi             if (g_ucTable[10] > 0xC7)
2108*53ee8cc1Swenshuai.xi             {
2109*53ee8cc1Swenshuai.xi                 g_ucTable[10] = 0xC7;
2110*53ee8cc1Swenshuai.xi             }
2111*53ee8cc1Swenshuai.xi         }
2112*53ee8cc1Swenshuai.xi     }
2113*53ee8cc1Swenshuai.xi #if 0 //For customer require. Run DLC algorithm when static field .
2114*53ee8cc1Swenshuai.xi     if((g_wLumiAverageTemp-Pre_TotalYSum)!=0)
2115*53ee8cc1Swenshuai.xi #endif
2116*53ee8cc1Swenshuai.xi     {
2117*53ee8cc1Swenshuai.xi 
2118*53ee8cc1Swenshuai.xi         if ((g_ucDlcFlickAlpha < (5*Pre_g_ucDlcFlickAlpha /8)) && (ucDlcFlickAlpha_Diff < (g_DlcParameters.ucDlcAlphaBlendingMax- g_DlcParameters.ucDlcAlphaBlendingMin)/2))
2119*53ee8cc1Swenshuai.xi         {
2120*53ee8cc1Swenshuai.xi             g_ucDlcFlickAlpha = 2*(ucDlcFlickAlpha_Diff* g_ucDlcFlickAlpha +(( g_DlcParameters.ucDlcAlphaBlendingMax
2121*53ee8cc1Swenshuai.xi                                   - g_DlcParameters.ucDlcAlphaBlendingMin)/2- ucDlcFlickAlpha_Diff)* (5*Pre_g_ucDlcFlickAlpha /8))
2122*53ee8cc1Swenshuai.xi                                   /( g_DlcParameters.ucDlcAlphaBlendingMax- g_DlcParameters.ucDlcAlphaBlendingMin);
2123*53ee8cc1Swenshuai.xi         }
2124*53ee8cc1Swenshuai.xi 
2125*53ee8cc1Swenshuai.xi         Pre_g_ucDlcFlickAlpha = g_ucDlcFlickAlpha;
2126*53ee8cc1Swenshuai.xi         ucDlcFlickAlpha_Diff = g_ucDlcFlickAlpha_Max-g_ucDlcFlickAlpha_Min;
2127*53ee8cc1Swenshuai.xi 
2128*53ee8cc1Swenshuai.xi         // ~~~~~~~~~~~~~~~~~~~~~~~~ Sub window open PATCH End  ~~~~~~~~~~~~~~~~~~~~~~~~
2129*53ee8cc1Swenshuai.xi 
2130*53ee8cc1Swenshuai.xi         // ~~~~~~~~~~~~~~~~~~~~~~~~ PI_Alpha IIR Start  ~~~~~~~~~~~~~~~~~~~~~~~~
2131*53ee8cc1Swenshuai.xi         if ( g_wPIAlpha >= g_wPrePIAlpha)
2132*53ee8cc1Swenshuai.xi         {
2133*53ee8cc1Swenshuai.xi             g_wPIAlpha = ((g_ucDlcFlickAlpha * g_wPIAlpha) +((128-g_ucDlcFlickAlpha)*g_wPrePIAlpha)+127)/128;
2134*53ee8cc1Swenshuai.xi         }
2135*53ee8cc1Swenshuai.xi         else
2136*53ee8cc1Swenshuai.xi         {
2137*53ee8cc1Swenshuai.xi             g_wPIAlpha = ((g_ucDlcFlickAlpha * g_wPIAlpha) +((128-g_ucDlcFlickAlpha)*g_wPrePIAlpha))/128;
2138*53ee8cc1Swenshuai.xi         }
2139*53ee8cc1Swenshuai.xi 
2140*53ee8cc1Swenshuai.xi         g_wPrePIAlpha = g_wPIAlpha;
2141*53ee8cc1Swenshuai.xi         // ~~~~~~~~~~~~~~~~~~~~~~~~ PI_Alpha IIR End  ~~~~~~~~~~~~~~~~~~~~~~~~
2142*53ee8cc1Swenshuai.xi 
2143*53ee8cc1Swenshuai.xi         // Write data to luma curve ...
2144*53ee8cc1Swenshuai.xi         msDlcWriteCurve(bWindow);
2145*53ee8cc1Swenshuai.xi 
2146*53ee8cc1Swenshuai.xi         if(g_DlcParameters.ucDlcAlgorithmMode == XC_DLC_ALGORITHM_NEW)
2147*53ee8cc1Swenshuai.xi         {
2148*53ee8cc1Swenshuai.xi             //Dyanmic BLE Function
2149*53ee8cc1Swenshuai.xi             //~~~~~~~~~~~~~~~~~Calculate BLE_StartPoint~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2150*53ee8cc1Swenshuai.xi             if(((ucYAvg*4) + g_DlcParameters.uwDlcBleStartPointTH)>512)
2151*53ee8cc1Swenshuai.xi             {
2152*53ee8cc1Swenshuai.xi                 BLE_StartPoint = ((ucYAvg*4) + g_DlcParameters.uwDlcBleStartPointTH - 512);
2153*53ee8cc1Swenshuai.xi             }
2154*53ee8cc1Swenshuai.xi             else
2155*53ee8cc1Swenshuai.xi             {
2156*53ee8cc1Swenshuai.xi                 BLE_StartPoint = 0;
2157*53ee8cc1Swenshuai.xi             }
2158*53ee8cc1Swenshuai.xi 
2159*53ee8cc1Swenshuai.xi             BLE_StartPoint_Correction = (BLE_StartPoint+2)/4;
2160*53ee8cc1Swenshuai.xi 
2161*53ee8cc1Swenshuai.xi             if(BLE_StartPoint_Correction >(Pre_BLE_StartPoint_Correction/16))
2162*53ee8cc1Swenshuai.xi             {
2163*53ee8cc1Swenshuai.xi                 if(g_ucDlcFlickAlpha==g_DlcParameters.ucDlcAlphaBlendingMin)
2164*53ee8cc1Swenshuai.xi                 {
2165*53ee8cc1Swenshuai.xi                     uwBLE_StartPoint_Blend = (WORD)(((16*(DWORD)BLE_StartPoint_Correction)+(63*(DWORD)Pre_BLE_StartPoint_Correction)+63)/64);
2166*53ee8cc1Swenshuai.xi                     Pre_BLE_StartPoint_Correction = uwBLE_StartPoint_Blend;
2167*53ee8cc1Swenshuai.xi                     uwBLE_StartPoint_Blend = (uwBLE_StartPoint_Blend+8)/16;
2168*53ee8cc1Swenshuai.xi                 }
2169*53ee8cc1Swenshuai.xi                 else
2170*53ee8cc1Swenshuai.xi                 {
2171*53ee8cc1Swenshuai.xi                     uwBLE_StartPoint_Blend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)BLE_StartPoint_Correction) +
2172*53ee8cc1Swenshuai.xi                                              ((128 - (DWORD)g_ucDlcFlickAlpha) * (DWORD)(Pre_BLE_StartPoint_Correction/16))+127)/128);
2173*53ee8cc1Swenshuai.xi                     Pre_BLE_StartPoint_Correction = uwBLE_StartPoint_Blend*16;
2174*53ee8cc1Swenshuai.xi                 }
2175*53ee8cc1Swenshuai.xi             }
2176*53ee8cc1Swenshuai.xi             else
2177*53ee8cc1Swenshuai.xi             {
2178*53ee8cc1Swenshuai.xi                 if(g_ucDlcFlickAlpha==g_DlcParameters.ucDlcAlphaBlendingMin)
2179*53ee8cc1Swenshuai.xi                 {
2180*53ee8cc1Swenshuai.xi                     uwBLE_StartPoint_Blend = (WORD)(((16*(DWORD)BLE_StartPoint_Correction)+(63*(DWORD)Pre_BLE_StartPoint_Correction))/64);
2181*53ee8cc1Swenshuai.xi                     Pre_BLE_StartPoint_Correction = uwBLE_StartPoint_Blend;
2182*53ee8cc1Swenshuai.xi                     uwBLE_StartPoint_Blend = (uwBLE_StartPoint_Blend+8)/16;
2183*53ee8cc1Swenshuai.xi                 }
2184*53ee8cc1Swenshuai.xi                 else
2185*53ee8cc1Swenshuai.xi                 {
2186*53ee8cc1Swenshuai.xi                     uwBLE_StartPoint_Blend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)BLE_StartPoint_Correction) +
2187*53ee8cc1Swenshuai.xi                                              ((128 - (DWORD)g_ucDlcFlickAlpha) * (DWORD)(Pre_BLE_StartPoint_Correction/16)))/128);
2188*53ee8cc1Swenshuai.xi                     Pre_BLE_StartPoint_Correction = uwBLE_StartPoint_Blend*16;
2189*53ee8cc1Swenshuai.xi                 }
2190*53ee8cc1Swenshuai.xi             }
2191*53ee8cc1Swenshuai.xi 
2192*53ee8cc1Swenshuai.xi             //~~~~~~~~~output = uwBLE_StartPoint_Blend & Pre_BLE_StartPoint_Correction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2193*53ee8cc1Swenshuai.xi 
2194*53ee8cc1Swenshuai.xi             //~~~~~~~~~~~~~~~~~Calculate  BLE_EndPoint ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2195*53ee8cc1Swenshuai.xi 
2196*53ee8cc1Swenshuai.xi             for (ucTmp=0; ucTmp<32; ucTmp++)
2197*53ee8cc1Swenshuai.xi             {
2198*53ee8cc1Swenshuai.xi                 if(ucTmp==0)
2199*53ee8cc1Swenshuai.xi                 {
2200*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp]=g_wLumaHistogram32H[ucTmp];
2201*53ee8cc1Swenshuai.xi                 }
2202*53ee8cc1Swenshuai.xi                 else
2203*53ee8cc1Swenshuai.xi                 {
2204*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[ucTmp] = uwHistogramAreaSum[ucTmp-1] + g_wLumaHistogram32H[ucTmp];
2205*53ee8cc1Swenshuai.xi                 }
2206*53ee8cc1Swenshuai.xi             }
2207*53ee8cc1Swenshuai.xi 
2208*53ee8cc1Swenshuai.xi             ucTmp=0;
2209*53ee8cc1Swenshuai.xi             while( uwHistogramAreaSum[ucTmp] < uwHistogramAreaSum[31]/8)
2210*53ee8cc1Swenshuai.xi             {
2211*53ee8cc1Swenshuai.xi                 ucTmp++;
2212*53ee8cc1Swenshuai.xi             }
2213*53ee8cc1Swenshuai.xi 
2214*53ee8cc1Swenshuai.xi             if(ucTmp==0)
2215*53ee8cc1Swenshuai.xi             {
2216*53ee8cc1Swenshuai.xi                 //Mantis issue of 0264631 :[Konka J3] . Use autotest tool control dc on/off.  DLC divisor can't to be equal to zero .
2217*53ee8cc1Swenshuai.xi                 if(g_wLumaHistogram32H[0]==0)
2218*53ee8cc1Swenshuai.xi                 {
2219*53ee8cc1Swenshuai.xi                     DLC_DEBUG(printk("\n Error in  [New DLC Algorithm][ %s  , %d ]  g_wLumaHistogram32H[0]=0 !!!\n", __FUNCTION__,__LINE__));
2220*53ee8cc1Swenshuai.xi                     return;
2221*53ee8cc1Swenshuai.xi                 }
2222*53ee8cc1Swenshuai.xi 
2223*53ee8cc1Swenshuai.xi                 BLE_EndPoint = ((g_uwTable[0]*uwHistogramAreaSum[31])/(16*g_wLumaHistogram32H[0]));
2224*53ee8cc1Swenshuai.xi             }
2225*53ee8cc1Swenshuai.xi             else
2226*53ee8cc1Swenshuai.xi             {
2227*53ee8cc1Swenshuai.xi                 uwHistogramForBleSum = (uwHistogramAreaSum[31]/8) - uwHistogramAreaSum[ucTmp-1];
2228*53ee8cc1Swenshuai.xi 
2229*53ee8cc1Swenshuai.xi                 for (Tmp=0; Tmp<30; Tmp++)
2230*53ee8cc1Swenshuai.xi                 {
2231*53ee8cc1Swenshuai.xi                     uwHistogramAreaSum[Tmp] = (g_uwTable[Tmp/2]+g_uwTable[(Tmp+1)/2]+1)/2;
2232*53ee8cc1Swenshuai.xi                 }
2233*53ee8cc1Swenshuai.xi 
2234*53ee8cc1Swenshuai.xi                 for (Tmp=0; Tmp<(ucTmp-1); Tmp++)
2235*53ee8cc1Swenshuai.xi                 {
2236*53ee8cc1Swenshuai.xi                     if(Tmp==0)
2237*53ee8cc1Swenshuai.xi                     {
2238*53ee8cc1Swenshuai.xi                         BLE_sum = g_wLumaHistogram32H[0]*(g_uwTable[0]+1/2);
2239*53ee8cc1Swenshuai.xi                     }
2240*53ee8cc1Swenshuai.xi                     else
2241*53ee8cc1Swenshuai.xi                     {
2242*53ee8cc1Swenshuai.xi                         BLE_sum = BLE_sum + g_wLumaHistogram32H[Tmp] * ((uwHistogramAreaSum[Tmp]+uwHistogramAreaSum[Tmp-1]+1)/2);
2243*53ee8cc1Swenshuai.xi                     }
2244*53ee8cc1Swenshuai.xi                 }
2245*53ee8cc1Swenshuai.xi 
2246*53ee8cc1Swenshuai.xi                 //Mantis issue of 0232938:Hsense A3 DLC the divisor can't to be equal to zero .
2247*53ee8cc1Swenshuai.xi                 if(g_wLumaHistogram32H[ucTmp]==0)
2248*53ee8cc1Swenshuai.xi                 {
2249*53ee8cc1Swenshuai.xi                     DLC_DEBUG(printf("\n Error in  [New DLC Algorithm][ %s  , %d ]  g_wLumaHistogram32H[%d]=0 !!!\n", __FUNCTION__,__LINE__,ucTmp));
2250*53ee8cc1Swenshuai.xi                     return;
2251*53ee8cc1Swenshuai.xi                 }
2252*53ee8cc1Swenshuai.xi 
2253*53ee8cc1Swenshuai.xi                 BLE_sum = BLE_sum + uwHistogramForBleSum *((uwHistogramAreaSum[ucTmp]+uwHistogramAreaSum[ucTmp-1]+1)/2);
2254*53ee8cc1Swenshuai.xi 
2255*53ee8cc1Swenshuai.xi                 BLE_EndPoint = (BLE_sum*8+(uwHistogramAreaSum[31]/2))/uwHistogramAreaSum[31];
2256*53ee8cc1Swenshuai.xi             }
2257*53ee8cc1Swenshuai.xi 
2258*53ee8cc1Swenshuai.xi             BLE_EndPoint = (BLE_EndPoint*g_DlcParameters.uwDlcBleEndPointTH+512)/1024;
2259*53ee8cc1Swenshuai.xi             BLE_EndPoint_Correction = BLE_EndPoint;
2260*53ee8cc1Swenshuai.xi 
2261*53ee8cc1Swenshuai.xi 
2262*53ee8cc1Swenshuai.xi             //~~~~~~~~~output = BLE_EndPoint Correction ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2263*53ee8cc1Swenshuai.xi 
2264*53ee8cc1Swenshuai.xi             //~~~~~~~~~Used uwBLE_StartPoint_Blend & BLE_EndPoint_Correction Calculate BLE_Slop ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2265*53ee8cc1Swenshuai.xi 
2266*53ee8cc1Swenshuai.xi             if(uwBLE_StartPoint_Blend > 0x7F)
2267*53ee8cc1Swenshuai.xi             {
2268*53ee8cc1Swenshuai.xi                 uwBLE_StartPoint_Blend = 0x7F;
2269*53ee8cc1Swenshuai.xi             }
2270*53ee8cc1Swenshuai.xi 
2271*53ee8cc1Swenshuai.xi             if( uwBLE_StartPoint_Blend*4 > BLE_EndPoint_Correction)
2272*53ee8cc1Swenshuai.xi             {
2273*53ee8cc1Swenshuai.xi                 BLE_Slop = (1024*uwBLE_StartPoint_Blend*4+((uwBLE_StartPoint_Blend*4 - BLE_EndPoint_Correction)/2))
2274*53ee8cc1Swenshuai.xi                         /(uwBLE_StartPoint_Blend*4 - BLE_EndPoint_Correction);
2275*53ee8cc1Swenshuai.xi             }
2276*53ee8cc1Swenshuai.xi             else
2277*53ee8cc1Swenshuai.xi             {
2278*53ee8cc1Swenshuai.xi                 BLE_Slop = 0x7FF;
2279*53ee8cc1Swenshuai.xi             }
2280*53ee8cc1Swenshuai.xi 
2281*53ee8cc1Swenshuai.xi             if(BLE_Slop > 0x7FF)
2282*53ee8cc1Swenshuai.xi             {
2283*53ee8cc1Swenshuai.xi                 BLE_Slop = 0x7FF;
2284*53ee8cc1Swenshuai.xi             }
2285*53ee8cc1Swenshuai.xi 
2286*53ee8cc1Swenshuai.xi             if(BLE_Slop < 0x400)
2287*53ee8cc1Swenshuai.xi             {
2288*53ee8cc1Swenshuai.xi                 BLE_Slop = 0x400;
2289*53ee8cc1Swenshuai.xi             }
2290*53ee8cc1Swenshuai.xi 
2291*53ee8cc1Swenshuai.xi             BLE_Slop_400 = g_DlcParameters.uwDlcBLESlopPoint_1;//(msReadByte(L_BK_DLC(0x38)))<<3;
2292*53ee8cc1Swenshuai.xi             BLE_Slop_480 = g_DlcParameters.uwDlcBLESlopPoint_2;//(msReadByte(H_BK_DLC(0x38)))<<3;
2293*53ee8cc1Swenshuai.xi             BLE_Slop_500 = g_DlcParameters.uwDlcBLESlopPoint_3;//(msReadByte(L_BK_DLC(0x39)))<<3;
2294*53ee8cc1Swenshuai.xi             BLE_Slop_600 = g_DlcParameters.uwDlcBLESlopPoint_4;//(msReadByte(H_BK_DLC(0x39)))<<3;
2295*53ee8cc1Swenshuai.xi             BLE_Slop_800 = g_DlcParameters.uwDlcBLESlopPoint_5;//(msReadByte(L_BK_DLC(0x3A)))<<3;
2296*53ee8cc1Swenshuai.xi             Dark_BLE_Slop_Min = g_DlcParameters.uwDlcDark_BLE_Slop_Min;//(msReadByte(L_BK_DLC(0x3B)))<<3;
2297*53ee8cc1Swenshuai.xi 
2298*53ee8cc1Swenshuai.xi             //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2299*53ee8cc1Swenshuai.xi             if(BLE_Slop <= 0x480)
2300*53ee8cc1Swenshuai.xi             {
2301*53ee8cc1Swenshuai.xi                 BLE_Slop =((BLE_Slop_480-BLE_Slop_400)*(BLE_Slop-0x400)+64)/128+BLE_Slop_400;
2302*53ee8cc1Swenshuai.xi             }
2303*53ee8cc1Swenshuai.xi             else if ((BLE_Slop > 0x480) && (BLE_Slop <= 0x500))
2304*53ee8cc1Swenshuai.xi             {
2305*53ee8cc1Swenshuai.xi                 BLE_Slop =((BLE_Slop_500-BLE_Slop_480)*(BLE_Slop-0x480)+64)/128+BLE_Slop_480;
2306*53ee8cc1Swenshuai.xi             }
2307*53ee8cc1Swenshuai.xi             else if ((BLE_Slop > 0x500) && (BLE_Slop <= 0x600))
2308*53ee8cc1Swenshuai.xi             {
2309*53ee8cc1Swenshuai.xi                 BLE_Slop =((BLE_Slop_600-BLE_Slop_500)*(BLE_Slop-0x500)+128)/256+BLE_Slop_500;
2310*53ee8cc1Swenshuai.xi             }
2311*53ee8cc1Swenshuai.xi             else
2312*53ee8cc1Swenshuai.xi             {
2313*53ee8cc1Swenshuai.xi                 BLE_Slop =((BLE_Slop_800-BLE_Slop_600)*(BLE_Slop-0x600)+256)/512+BLE_Slop_600;
2314*53ee8cc1Swenshuai.xi             }
2315*53ee8cc1Swenshuai.xi 
2316*53ee8cc1Swenshuai.xi             if (ucYAvg < ((g_DlcParameters.ucDlcYAvgThresholdL+g_DlcParameters.ucDlcYAvgThresholdM)/2))
2317*53ee8cc1Swenshuai.xi             {
2318*53ee8cc1Swenshuai.xi                 BLE_Slop_tmp =(((Dark_BLE_Slop_Min - BLE_Slop_400)*(((g_DlcParameters.ucDlcYAvgThresholdL+g_DlcParameters.ucDlcYAvgThresholdM)/2)-ucYAvg)/
2319*53ee8cc1Swenshuai.xi                               ((g_DlcParameters.ucDlcYAvgThresholdL+g_DlcParameters.ucDlcYAvgThresholdM)/2)) + BLE_Slop_400);
2320*53ee8cc1Swenshuai.xi 
2321*53ee8cc1Swenshuai.xi                 if(BLE_Slop > BLE_Slop_tmp)
2322*53ee8cc1Swenshuai.xi                 {
2323*53ee8cc1Swenshuai.xi                     BLE_Slop = BLE_Slop;
2324*53ee8cc1Swenshuai.xi                 }
2325*53ee8cc1Swenshuai.xi                 else
2326*53ee8cc1Swenshuai.xi                 {
2327*53ee8cc1Swenshuai.xi                     BLE_Slop = BLE_Slop_tmp;
2328*53ee8cc1Swenshuai.xi                 }
2329*53ee8cc1Swenshuai.xi             }
2330*53ee8cc1Swenshuai.xi             else
2331*53ee8cc1Swenshuai.xi             {
2332*53ee8cc1Swenshuai.xi                 BLE_Slop = BLE_Slop;
2333*53ee8cc1Swenshuai.xi             }
2334*53ee8cc1Swenshuai.xi 
2335*53ee8cc1Swenshuai.xi 
2336*53ee8cc1Swenshuai.xi             // ~~~~~~~~~~~~~~~~~~~~~~~~ Pure Image Patch  ~~~~~~~~~~~~~~~~~~~~~~~~
2337*53ee8cc1Swenshuai.xi             BLE_Slop = (BLE_Slop*(256-g_wPIAlpha)+ 1024*g_wPIAlpha + 128)/256;
2338*53ee8cc1Swenshuai.xi 
2339*53ee8cc1Swenshuai.xi             //~~~~~~~~~ output = uwBLE_Blend �]with slow approach�^ ~~~~~~~~~~~~~~~~~~~~~
2340*53ee8cc1Swenshuai.xi 
2341*53ee8cc1Swenshuai.xi             if(BLE_Slop >(Pre_BLE_Slop/16))
2342*53ee8cc1Swenshuai.xi             {
2343*53ee8cc1Swenshuai.xi                 if(g_ucDlcFlickAlpha==g_DlcParameters.ucDlcAlphaBlendingMin)
2344*53ee8cc1Swenshuai.xi                 {
2345*53ee8cc1Swenshuai.xi                     uwBLE_Blend = (WORD)(((16*(DWORD)BLE_Slop)+(63*(DWORD)Pre_BLE_Slop)+63)/64);
2346*53ee8cc1Swenshuai.xi                     Pre_BLE_Slop = uwBLE_Blend;
2347*53ee8cc1Swenshuai.xi                     uwBLE_Blend = (uwBLE_Blend+8)/16;
2348*53ee8cc1Swenshuai.xi                 }
2349*53ee8cc1Swenshuai.xi                 else
2350*53ee8cc1Swenshuai.xi                 {
2351*53ee8cc1Swenshuai.xi                     uwBLE_Blend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)BLE_Slop) +
2352*53ee8cc1Swenshuai.xi                                   ((128 - (DWORD)g_ucDlcFlickAlpha) * (DWORD)(Pre_BLE_Slop/16))+127)/128);
2353*53ee8cc1Swenshuai.xi                     Pre_BLE_Slop = uwBLE_Blend*16;          //14-bits
2354*53ee8cc1Swenshuai.xi                 }
2355*53ee8cc1Swenshuai.xi             }
2356*53ee8cc1Swenshuai.xi             else
2357*53ee8cc1Swenshuai.xi             {
2358*53ee8cc1Swenshuai.xi                 if(g_ucDlcFlickAlpha==g_DlcParameters.ucDlcAlphaBlendingMin)
2359*53ee8cc1Swenshuai.xi                 {
2360*53ee8cc1Swenshuai.xi                     uwBLE_Blend = (WORD)(((16*(DWORD)BLE_Slop)+(63*(DWORD)Pre_BLE_Slop))/64);
2361*53ee8cc1Swenshuai.xi                     Pre_BLE_Slop = uwBLE_Blend;
2362*53ee8cc1Swenshuai.xi                     uwBLE_Blend = (uwBLE_Blend+8)/16;
2363*53ee8cc1Swenshuai.xi                 }
2364*53ee8cc1Swenshuai.xi                 else
2365*53ee8cc1Swenshuai.xi                 {
2366*53ee8cc1Swenshuai.xi                     uwBLE_Blend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)BLE_Slop) +
2367*53ee8cc1Swenshuai.xi                                   ((128 - (DWORD)g_ucDlcFlickAlpha) * (DWORD)(Pre_BLE_Slop/16)))/128);
2368*53ee8cc1Swenshuai.xi                     Pre_BLE_Slop = uwBLE_Blend*16;
2369*53ee8cc1Swenshuai.xi                 }
2370*53ee8cc1Swenshuai.xi             }
2371*53ee8cc1Swenshuai.xi 
2372*53ee8cc1Swenshuai.xi             if(g_bSetDlcBleOn)
2373*53ee8cc1Swenshuai.xi             {
2374*53ee8cc1Swenshuai.xi                 msWriteByte(L_BK_DLC(0x10),uwBLE_StartPoint_Blend);
2375*53ee8cc1Swenshuai.xi                 msWriteByte(H_BK_DLC(0x10),uwBLE_Blend>>3);
2376*53ee8cc1Swenshuai.xi                 msWriteByte(L_BK_DLC(0x0D),(msReadByte(L_BK_DLC(0x0D))&0xF8)|(uwBLE_Blend & 0x07));
2377*53ee8cc1Swenshuai.xi             }
2378*53ee8cc1Swenshuai.xi             else
2379*53ee8cc1Swenshuai.xi             {
2380*53ee8cc1Swenshuai.xi                 msWriteByte(L_BK_DLC(0x10),0x00);
2381*53ee8cc1Swenshuai.xi                 msWriteByte(H_BK_DLC(0x10),0x80);
2382*53ee8cc1Swenshuai.xi                 msWriteByte(L_BK_DLC(0x0D),msReadByte(L_BK_DLC(0x0D))&0xF8);
2383*53ee8cc1Swenshuai.xi             }
2384*53ee8cc1Swenshuai.xi         }
2385*53ee8cc1Swenshuai.xi     }
2386*53ee8cc1Swenshuai.xi     Pre_TotalYSum = g_wLumiAverageTemp;
2387*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
2388*53ee8cc1Swenshuai.xi }
2389*53ee8cc1Swenshuai.xi 
2390*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
2391*53ee8cc1Swenshuai.xi //
2392*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msDlcWriteCurveLSB(BOOL bWindow,BYTE ucIndex,BYTE ucValue)2393*53ee8cc1Swenshuai.xi void msDlcWriteCurveLSB(BOOL bWindow, BYTE ucIndex, BYTE ucValue)
2394*53ee8cc1Swenshuai.xi {
2395*53ee8cc1Swenshuai.xi     DWORD wRegStart = 0;
2396*53ee8cc1Swenshuai.xi     BYTE ucData;
2397*53ee8cc1Swenshuai.xi 
2398*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
2399*53ee8cc1Swenshuai.xi 
2400*53ee8cc1Swenshuai.xi 	if( MAIN_WINDOW == bWindow )
2401*53ee8cc1Swenshuai.xi 	    wRegStart = REG_ADDR_DLC_DATA_LSB_START_MAIN;
2402*53ee8cc1Swenshuai.xi 
2403*53ee8cc1Swenshuai.xi     switch(ucIndex)
2404*53ee8cc1Swenshuai.xi     {
2405*53ee8cc1Swenshuai.xi         case 0:
2406*53ee8cc1Swenshuai.xi             wRegStart += 0;
2407*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xF3) | (ucValue << 2);
2408*53ee8cc1Swenshuai.xi             break;
2409*53ee8cc1Swenshuai.xi         case 1:
2410*53ee8cc1Swenshuai.xi             wRegStart += 0;
2411*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xCF) | (ucValue << 4);
2412*53ee8cc1Swenshuai.xi             break;
2413*53ee8cc1Swenshuai.xi         case 2:
2414*53ee8cc1Swenshuai.xi             wRegStart += 0;
2415*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0x3F) | (ucValue << 6);
2416*53ee8cc1Swenshuai.xi             break;
2417*53ee8cc1Swenshuai.xi         case 3:
2418*53ee8cc1Swenshuai.xi             wRegStart += 1;
2419*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xFC) | (ucValue);
2420*53ee8cc1Swenshuai.xi             break;
2421*53ee8cc1Swenshuai.xi         case 4:
2422*53ee8cc1Swenshuai.xi             wRegStart += 1;
2423*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xF3) | (ucValue << 2);
2424*53ee8cc1Swenshuai.xi             break;
2425*53ee8cc1Swenshuai.xi         case 5:
2426*53ee8cc1Swenshuai.xi             wRegStart += 1;
2427*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xCF) | (ucValue << 4);
2428*53ee8cc1Swenshuai.xi             break;
2429*53ee8cc1Swenshuai.xi         case 6:
2430*53ee8cc1Swenshuai.xi             wRegStart += 1;
2431*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0x3F) | (ucValue << 6);
2432*53ee8cc1Swenshuai.xi             break;
2433*53ee8cc1Swenshuai.xi         case 7:
2434*53ee8cc1Swenshuai.xi             wRegStart += 2;
2435*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xFC) | (ucValue);
2436*53ee8cc1Swenshuai.xi             break;
2437*53ee8cc1Swenshuai.xi         case 8:
2438*53ee8cc1Swenshuai.xi             wRegStart += 2;
2439*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xF3) | (ucValue << 2);
2440*53ee8cc1Swenshuai.xi             break;
2441*53ee8cc1Swenshuai.xi         case 9:
2442*53ee8cc1Swenshuai.xi             wRegStart += 2;
2443*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xCF) | (ucValue << 4);
2444*53ee8cc1Swenshuai.xi             break;
2445*53ee8cc1Swenshuai.xi         case 10:
2446*53ee8cc1Swenshuai.xi             wRegStart += 2;
2447*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0x3F) | (ucValue << 6);
2448*53ee8cc1Swenshuai.xi             break;
2449*53ee8cc1Swenshuai.xi         case 11:
2450*53ee8cc1Swenshuai.xi             wRegStart += 3;
2451*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xFC) | (ucValue);
2452*53ee8cc1Swenshuai.xi             break;
2453*53ee8cc1Swenshuai.xi         case 12:
2454*53ee8cc1Swenshuai.xi             wRegStart += 3;
2455*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xF3) | (ucValue << 2);
2456*53ee8cc1Swenshuai.xi             break;
2457*53ee8cc1Swenshuai.xi         case 13:
2458*53ee8cc1Swenshuai.xi             wRegStart += 3;
2459*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xCF) | (ucValue << 4);
2460*53ee8cc1Swenshuai.xi             break;
2461*53ee8cc1Swenshuai.xi         case 14:
2462*53ee8cc1Swenshuai.xi             wRegStart += 3;
2463*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0x3F) | (ucValue << 6);
2464*53ee8cc1Swenshuai.xi             break;
2465*53ee8cc1Swenshuai.xi         case 15:
2466*53ee8cc1Swenshuai.xi             wRegStart += 4;
2467*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xFC) | (ucValue);
2468*53ee8cc1Swenshuai.xi             break;
2469*53ee8cc1Swenshuai.xi         case 16: // index 16
2470*53ee8cc1Swenshuai.xi             wRegStart += 4;
2471*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xF3) | (ucValue << 2);
2472*53ee8cc1Swenshuai.xi             break;
2473*53ee8cc1Swenshuai.xi         case 0xFF: // index n0
2474*53ee8cc1Swenshuai.xi         default:
2475*53ee8cc1Swenshuai.xi             wRegStart += 0;
2476*53ee8cc1Swenshuai.xi             ucData = (msReadByte(wRegStart) & 0xFC) | (ucValue);
2477*53ee8cc1Swenshuai.xi             break;
2478*53ee8cc1Swenshuai.xi     }
2479*53ee8cc1Swenshuai.xi 
2480*53ee8cc1Swenshuai.xi     msWriteByte(wRegStart, ucData);
2481*53ee8cc1Swenshuai.xi 
2482*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
2483*53ee8cc1Swenshuai.xi }
2484*53ee8cc1Swenshuai.xi 
msDlcWriteCurve(BOOL bWindow)2485*53ee8cc1Swenshuai.xi void msDlcWriteCurve(BOOL bWindow)
2486*53ee8cc1Swenshuai.xi {
2487*53ee8cc1Swenshuai.xi     BYTE ucTmp;
2488*53ee8cc1Swenshuai.xi     WORD uwBlend;
2489*53ee8cc1Swenshuai.xi     WORD uwTmp;
2490*53ee8cc1Swenshuai.xi 
2491*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
2492*53ee8cc1Swenshuai.xi 
2493*53ee8cc1Swenshuai.xi     // Write data to luma curve ...
2494*53ee8cc1Swenshuai.xi 
2495*53ee8cc1Swenshuai.xi     if(g_DlcParameters.ucDlcAlgorithmMode == XC_DLC_ALGORITHM_OLD)
2496*53ee8cc1Swenshuai.xi     {
2497*53ee8cc1Swenshuai.xi 
2498*53ee8cc1Swenshuai.xi         if( MAIN_WINDOW == bWindow )
2499*53ee8cc1Swenshuai.xi         {
2500*53ee8cc1Swenshuai.xi             for(ucTmp=0; ucTmp<=0x0f; ucTmp++)
2501*53ee8cc1Swenshuai.xi             {
2502*53ee8cc1Swenshuai.xi                 if(g_ucDlcFastLoop || (g_ucDlcFlickAlpha >= (DLC_DEFLICK_BLEND_FACTOR >> 1)))
2503*53ee8cc1Swenshuai.xi                 {
2504*53ee8cc1Swenshuai.xi                     if (g_ucDlcFastLoop)
2505*53ee8cc1Swenshuai.xi                         g_ucDlcFastLoop--;
2506*53ee8cc1Swenshuai.xi 
2507*53ee8cc1Swenshuai.xi                     // target value with alpha blending
2508*53ee8cc1Swenshuai.xi                     uwBlend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)g_ucTable[ucTmp] * DLC_DEFLICK_PRECISION_SHIFT) +
2509*53ee8cc1Swenshuai.xi                                  ((DLC_DEFLICK_BLEND_FACTOR - (DWORD)g_ucDlcFlickAlpha) * (DWORD)g_uwPreTable[ucTmp]))/DLC_DEFLICK_BLEND_FACTOR);
2510*53ee8cc1Swenshuai.xi 
2511*53ee8cc1Swenshuai.xi                     if(uwBlend > g_uwPreTable[ucTmp])
2512*53ee8cc1Swenshuai.xi                     {
2513*53ee8cc1Swenshuai.xi                         uwTmp = (uwBlend - g_uwPreTable[ucTmp]) / (DLC_DEFLICK_BLEND_FACTOR - g_ucDlcFlickAlpha + 1);
2514*53ee8cc1Swenshuai.xi                         uwBlend = g_uwPreTable[ucTmp] + uwTmp;
2515*53ee8cc1Swenshuai.xi                     }
2516*53ee8cc1Swenshuai.xi                     else if(uwBlend < g_uwPreTable[ucTmp])
2517*53ee8cc1Swenshuai.xi                     {
2518*53ee8cc1Swenshuai.xi                         uwTmp = (g_uwPreTable[ucTmp] - uwBlend) / (DLC_DEFLICK_BLEND_FACTOR - g_ucDlcFlickAlpha + 1);
2519*53ee8cc1Swenshuai.xi                         uwBlend = g_uwPreTable[ucTmp] - uwTmp;
2520*53ee8cc1Swenshuai.xi                     }
2521*53ee8cc1Swenshuai.xi 
2522*53ee8cc1Swenshuai.xi                     g_uwPreTable[ucTmp] = uwBlend;
2523*53ee8cc1Swenshuai.xi 
2524*53ee8cc1Swenshuai.xi                     //g_ucTable[ucTmp] = g_uwPreTable[ucTmp] / DLC_DEFLICK_PRECISION_SHIFT;
2525*53ee8cc1Swenshuai.xi                     g_uwTable[ucTmp] = ((DWORD)g_uwPreTable[ucTmp]<<2) / DLC_DEFLICK_PRECISION_SHIFT;
2526*53ee8cc1Swenshuai.xi                     g_ucTable[ucTmp] = g_uwTable[ucTmp]>>2;
2527*53ee8cc1Swenshuai.xi 
2528*53ee8cc1Swenshuai.xi                     msWriteByte((REG_ADDR_DLC_DATA_START_MAIN+ucTmp), g_ucTable[ucTmp]);
2529*53ee8cc1Swenshuai.xi                     msDlcWriteCurveLSB(bWindow, ucTmp, g_uwTable[ucTmp]&0x03);
2530*53ee8cc1Swenshuai.xi 
2531*53ee8cc1Swenshuai.xi                     // set DLC curve index N0 & 16
2532*53ee8cc1Swenshuai.xi                     if (ucTmp == 0)
2533*53ee8cc1Swenshuai.xi                     {
2534*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN, g_uwTable[0]>>2);
2535*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN + 1, 0x01);
2536*53ee8cc1Swenshuai.xi                         msDlcWriteCurveLSB(MAIN_WINDOW, 0xFF, g_uwTable[0]&0x03);
2537*53ee8cc1Swenshuai.xi                     }
2538*53ee8cc1Swenshuai.xi 
2539*53ee8cc1Swenshuai.xi                     if (ucTmp == 15)
2540*53ee8cc1Swenshuai.xi                     {
2541*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN, 255-(g_uwTable[15]>>2));
2542*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN + 1, 0x01);
2543*53ee8cc1Swenshuai.xi                         msDlcWriteCurveLSB(MAIN_WINDOW, 16, g_uwTable[15]&0x03);
2544*53ee8cc1Swenshuai.xi                     }
2545*53ee8cc1Swenshuai.xi                 }
2546*53ee8cc1Swenshuai.xi                 else if (g_ucDlcFlickAlpha == 0)
2547*53ee8cc1Swenshuai.xi                 {
2548*53ee8cc1Swenshuai.xi                     g_ucTable[ucTmp] = g_uwPreTable[ucTmp] / DLC_DEFLICK_PRECISION_SHIFT;
2549*53ee8cc1Swenshuai.xi                 }
2550*53ee8cc1Swenshuai.xi                 else if ((ucTmp%4) == (g_ucUpdateCnt%4))
2551*53ee8cc1Swenshuai.xi                 {
2552*53ee8cc1Swenshuai.xi                     // target value with alpha blending
2553*53ee8cc1Swenshuai.xi                     uwBlend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)g_ucTable[ucTmp] * DLC_DEFLICK_PRECISION_SHIFT) +
2554*53ee8cc1Swenshuai.xi                                  ((DLC_DEFLICK_BLEND_FACTOR - (DWORD)g_ucDlcFlickAlpha) * (DWORD)g_uwPreTable[ucTmp]))/DLC_DEFLICK_BLEND_FACTOR);
2555*53ee8cc1Swenshuai.xi 
2556*53ee8cc1Swenshuai.xi                     if(uwBlend > g_uwPreTable[ucTmp])
2557*53ee8cc1Swenshuai.xi                     {
2558*53ee8cc1Swenshuai.xi                         if((uwBlend - g_uwPreTable[ucTmp]) > DLC_DEFLICK_PRECISION_SHIFT)
2559*53ee8cc1Swenshuai.xi                             uwBlend = g_uwPreTable[ucTmp] + DLC_DEFLICK_PRECISION_SHIFT;
2560*53ee8cc1Swenshuai.xi                     }
2561*53ee8cc1Swenshuai.xi                     else if(uwBlend < g_uwPreTable[ucTmp])
2562*53ee8cc1Swenshuai.xi                     {
2563*53ee8cc1Swenshuai.xi                         if((g_uwPreTable[ucTmp] - uwBlend) > DLC_DEFLICK_PRECISION_SHIFT)
2564*53ee8cc1Swenshuai.xi                             uwBlend = g_uwPreTable[ucTmp] - DLC_DEFLICK_PRECISION_SHIFT;
2565*53ee8cc1Swenshuai.xi                     }
2566*53ee8cc1Swenshuai.xi 
2567*53ee8cc1Swenshuai.xi                     g_uwPreTable[ucTmp] = uwBlend;
2568*53ee8cc1Swenshuai.xi 
2569*53ee8cc1Swenshuai.xi                     //g_ucTable[ucTmp] = g_uwPreTable[ucTmp] / DLC_DEFLICK_PRECISION_SHIFT;
2570*53ee8cc1Swenshuai.xi                     g_uwTable[ucTmp] = ((DWORD)g_uwPreTable[ucTmp]<<2) / DLC_DEFLICK_PRECISION_SHIFT;
2571*53ee8cc1Swenshuai.xi                     g_ucTable[ucTmp] = g_uwTable[ucTmp]>>2;
2572*53ee8cc1Swenshuai.xi 
2573*53ee8cc1Swenshuai.xi                     msWriteByte((REG_ADDR_DLC_DATA_START_MAIN+ucTmp), g_ucTable[ucTmp]);
2574*53ee8cc1Swenshuai.xi                     msDlcWriteCurveLSB(bWindow, ucTmp, g_uwTable[ucTmp]&0x03);
2575*53ee8cc1Swenshuai.xi 
2576*53ee8cc1Swenshuai.xi                     // set DLC curve index N0 & 16
2577*53ee8cc1Swenshuai.xi                     if (ucTmp == 0)
2578*53ee8cc1Swenshuai.xi                     {
2579*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN, g_uwTable[0]>>2);
2580*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN + 1, 0x01);
2581*53ee8cc1Swenshuai.xi                         msDlcWriteCurveLSB(MAIN_WINDOW, 0xFF, g_uwTable[0]&0x03);
2582*53ee8cc1Swenshuai.xi                     }
2583*53ee8cc1Swenshuai.xi 
2584*53ee8cc1Swenshuai.xi                     if (ucTmp == 15)
2585*53ee8cc1Swenshuai.xi                     {
2586*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN, 255-(g_uwTable[15]>>2));
2587*53ee8cc1Swenshuai.xi                         msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN + 1, 0x01);
2588*53ee8cc1Swenshuai.xi                         msDlcWriteCurveLSB(MAIN_WINDOW, 16, g_uwTable[15]&0x03);
2589*53ee8cc1Swenshuai.xi                     }
2590*53ee8cc1Swenshuai.xi                 }
2591*53ee8cc1Swenshuai.xi             }
2592*53ee8cc1Swenshuai.xi         }
2593*53ee8cc1Swenshuai.xi     }
2594*53ee8cc1Swenshuai.xi     else
2595*53ee8cc1Swenshuai.xi     {
2596*53ee8cc1Swenshuai.xi 
2597*53ee8cc1Swenshuai.xi         if( MAIN_WINDOW == bWindow )
2598*53ee8cc1Swenshuai.xi         {
2599*53ee8cc1Swenshuai.xi             for(ucTmp=0; ucTmp<=0x0f; ucTmp++)
2600*53ee8cc1Swenshuai.xi             {
2601*53ee8cc1Swenshuai.xi                 g_uwTable[ucTmp] = (g_wPIAlpha*(ucTmp*64 + 32)+(256-g_wPIAlpha)*g_uwTable[ucTmp]+128)/256;
2602*53ee8cc1Swenshuai.xi 
2603*53ee8cc1Swenshuai.xi                 if(g_uwTable[ucTmp]>(g_uwPreTable[ucTmp]/16))
2604*53ee8cc1Swenshuai.xi                 {
2605*53ee8cc1Swenshuai.xi                     if(g_ucDlcFlickAlpha==g_DlcParameters.ucDlcAlphaBlendingMin)
2606*53ee8cc1Swenshuai.xi                     {
2607*53ee8cc1Swenshuai.xi                         uwBlend = (WORD)(((16*(DWORD)g_uwTable[ucTmp])+(63*(DWORD)g_uwPreTable[ucTmp])+63)/64); //14-bits
2608*53ee8cc1Swenshuai.xi                         g_uwPreTable[ucTmp] = uwBlend;                                                              //14-bits
2609*53ee8cc1Swenshuai.xi                         uwBlend = (uwBlend+8)/16;                                                                     //10-bits
2610*53ee8cc1Swenshuai.xi                     }
2611*53ee8cc1Swenshuai.xi                     else
2612*53ee8cc1Swenshuai.xi                     {
2613*53ee8cc1Swenshuai.xi                         uwBlend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)g_uwTable[ucTmp]) +
2614*53ee8cc1Swenshuai.xi                                   ((128 - (DWORD)g_ucDlcFlickAlpha) * (DWORD)(g_uwPreTable[ucTmp]/16))+127)/128); //10-bits
2615*53ee8cc1Swenshuai.xi                         g_uwPreTable[ucTmp] = uwBlend*16;                                                            //14-bits
2616*53ee8cc1Swenshuai.xi                         uwBlend = uwBlend;
2617*53ee8cc1Swenshuai.xi                     }
2618*53ee8cc1Swenshuai.xi                 }
2619*53ee8cc1Swenshuai.xi                 else
2620*53ee8cc1Swenshuai.xi                 {
2621*53ee8cc1Swenshuai.xi                     if(g_ucDlcFlickAlpha==g_DlcParameters.ucDlcAlphaBlendingMin)
2622*53ee8cc1Swenshuai.xi                     {
2623*53ee8cc1Swenshuai.xi                         uwBlend = (WORD)(((16*(DWORD)g_uwTable[ucTmp])+(63*(DWORD)g_uwPreTable[ucTmp]))/64);  //14-bits
2624*53ee8cc1Swenshuai.xi                         g_uwPreTable[ucTmp] = uwBlend;                                                            //14-bits
2625*53ee8cc1Swenshuai.xi                         uwBlend = (uwBlend+8)/16;                                                                   //10-bits
2626*53ee8cc1Swenshuai.xi                     }
2627*53ee8cc1Swenshuai.xi                     else
2628*53ee8cc1Swenshuai.xi                     {
2629*53ee8cc1Swenshuai.xi                         uwBlend = (WORD)((((DWORD) g_ucDlcFlickAlpha * (DWORD)g_uwTable[ucTmp]) +
2630*53ee8cc1Swenshuai.xi                                   ((128 - (DWORD)g_ucDlcFlickAlpha) * (DWORD)(g_uwPreTable[ucTmp]/16)))/128); //10-bits
2631*53ee8cc1Swenshuai.xi                         g_uwPreTable[ucTmp] = uwBlend*16;                                                        //14-bits
2632*53ee8cc1Swenshuai.xi                         uwBlend = uwBlend;
2633*53ee8cc1Swenshuai.xi                     }
2634*53ee8cc1Swenshuai.xi                 }
2635*53ee8cc1Swenshuai.xi 
2636*53ee8cc1Swenshuai.xi                 g_uwTable[ucTmp] = uwBlend;
2637*53ee8cc1Swenshuai.xi                 g_ucTable[ucTmp] = g_uwTable[ucTmp]>>2;
2638*53ee8cc1Swenshuai.xi 
2639*53ee8cc1Swenshuai.xi                 msWriteByte((REG_ADDR_DLC_DATA_START_MAIN+ucTmp), g_ucTable[ucTmp]);
2640*53ee8cc1Swenshuai.xi                 msDlcWriteCurveLSB(bWindow, ucTmp, g_uwTable[ucTmp]&0x03);
2641*53ee8cc1Swenshuai.xi 
2642*53ee8cc1Swenshuai.xi                 // set DLC curve index N0 & 16
2643*53ee8cc1Swenshuai.xi                 if (ucTmp == 0)
2644*53ee8cc1Swenshuai.xi                 {
2645*53ee8cc1Swenshuai.xi                     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN, g_uwTable[0]>>2);
2646*53ee8cc1Swenshuai.xi                     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_N0_MAIN + 1, 0x01);
2647*53ee8cc1Swenshuai.xi                     msDlcWriteCurveLSB(MAIN_WINDOW, 0xFF, g_uwTable[0]&0x03);
2648*53ee8cc1Swenshuai.xi                 }
2649*53ee8cc1Swenshuai.xi 
2650*53ee8cc1Swenshuai.xi                 if (ucTmp == 15)
2651*53ee8cc1Swenshuai.xi                 {
2652*53ee8cc1Swenshuai.xi                     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN, 255-(g_uwTable[15]>>2));
2653*53ee8cc1Swenshuai.xi                     msWriteByte(REG_ADDR_DLC_DATA_EXTEND_16_MAIN + 1, 0x01);
2654*53ee8cc1Swenshuai.xi                     msDlcWriteCurveLSB(MAIN_WINDOW, 16, g_uwTable[15]&0x03);
2655*53ee8cc1Swenshuai.xi                 }
2656*53ee8cc1Swenshuai.xi             }
2657*53ee8cc1Swenshuai.xi         }
2658*53ee8cc1Swenshuai.xi 
2659*53ee8cc1Swenshuai.xi     }
2660*53ee8cc1Swenshuai.xi 
2661*53ee8cc1Swenshuai.xi     g_ucUpdateCnt++;
2662*53ee8cc1Swenshuai.xi 
2663*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
2664*53ee8cc1Swenshuai.xi }
2665*53ee8cc1Swenshuai.xi 
2666*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
2667*53ee8cc1Swenshuai.xi // Program register bytes to MST chip.
2668*53ee8cc1Swenshuai.xi //
2669*53ee8cc1Swenshuai.xi // Arguments: pTable - pointer of registers table
2670*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msWriteDLCRegsTbl(DlcRegUnitType code * pTable)2671*53ee8cc1Swenshuai.xi void msWriteDLCRegsTbl(DlcRegUnitType code *pTable)
2672*53ee8cc1Swenshuai.xi {
2673*53ee8cc1Swenshuai.xi     WORD wReg; // register index
2674*53ee8cc1Swenshuai.xi 
2675*53ee8cc1Swenshuai.xi     while (1)
2676*53ee8cc1Swenshuai.xi     {
2677*53ee8cc1Swenshuai.xi          wReg = pTable->wReg; // get register index
2678*53ee8cc1Swenshuai.xi          if (wReg == _END_OF_TBL_) // check end of table
2679*53ee8cc1Swenshuai.xi              break;
2680*53ee8cc1Swenshuai.xi 
2681*53ee8cc1Swenshuai.xi          msWriteByte(wReg, pTable->ucValue); // write register
2682*53ee8cc1Swenshuai.xi 
2683*53ee8cc1Swenshuai.xi          pTable++; // next
2684*53ee8cc1Swenshuai.xi     } // while
2685*53ee8cc1Swenshuai.xi }
2686*53ee8cc1Swenshuai.xi 
msDlcSpeedupTrigger(BYTE ucLoop)2687*53ee8cc1Swenshuai.xi void msDlcSpeedupTrigger(BYTE ucLoop)
2688*53ee8cc1Swenshuai.xi {
2689*53ee8cc1Swenshuai.xi     g_DlcParameters.ucDlcFlickAlphaStart = ucLoop;
2690*53ee8cc1Swenshuai.xi }
2691*53ee8cc1Swenshuai.xi 
2692*53ee8cc1Swenshuai.xi /******************************************************************************/
2693*53ee8cc1Swenshuai.xi /*                           CGC                                         */
2694*53ee8cc1Swenshuai.xi /******************************************************************************/
2695*53ee8cc1Swenshuai.xi 
msDlc_CGC_Init(void)2696*53ee8cc1Swenshuai.xi void msDlc_CGC_Init(void)
2697*53ee8cc1Swenshuai.xi {
2698*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
2699*53ee8cc1Swenshuai.xi 
2700*53ee8cc1Swenshuai.xi     if((msReadByte(REG_ADDR_DLC_HANDSHAKE) & _BIT7) )// Shall not Init CGC again while DLC is On.
2701*53ee8cc1Swenshuai.xi     {
2702*53ee8cc1Swenshuai.xi        msDlc_FunctionExit();
2703*53ee8cc1Swenshuai.xi        return;
2704*53ee8cc1Swenshuai.xi     }
2705*53ee8cc1Swenshuai.xi 
2706*53ee8cc1Swenshuai.xi     g_u8Chroma_OriGain = msReadByte(REG_ADDR_DLC_C_GAIN);
2707*53ee8cc1Swenshuai.xi     msDlc_CGC_ReInit();
2708*53ee8cc1Swenshuai.xi 
2709*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
2710*53ee8cc1Swenshuai.xi }
2711*53ee8cc1Swenshuai.xi 
msDlc_CGC_ReInit(void)2712*53ee8cc1Swenshuai.xi void msDlc_CGC_ReInit(void) // For CGC Init & Tool change parameter value dynamicly
2713*53ee8cc1Swenshuai.xi {
2714*53ee8cc1Swenshuai.xi     if ((0xFF-g_u8Chroma_OriGain)>g_DlcParameters.ucCGCChroma_GainLimitH)
2715*53ee8cc1Swenshuai.xi         g_u8CGC_UpperBond = (g_u8Chroma_OriGain+g_DlcParameters.ucCGCChroma_GainLimitH);
2716*53ee8cc1Swenshuai.xi     else
2717*53ee8cc1Swenshuai.xi         g_u8CGC_UpperBond = 0xFF;
2718*53ee8cc1Swenshuai.xi 
2719*53ee8cc1Swenshuai.xi     if (g_DlcParameters.ucCGCChroma_GainLimitL<g_u8Chroma_OriGain)
2720*53ee8cc1Swenshuai.xi         g_u8CGC_LowerBond = (g_u8Chroma_OriGain-g_DlcParameters.ucCGCChroma_GainLimitL);
2721*53ee8cc1Swenshuai.xi     else
2722*53ee8cc1Swenshuai.xi         g_u8CGC_LowerBond = 0x00;
2723*53ee8cc1Swenshuai.xi 
2724*53ee8cc1Swenshuai.xi     g_u16Ydark = (Y01_weight*(g_ucTable[0]+g_ucTable[1])+Y23_weight*(g_ucTable[2]+g_ucTable[3]))/(2*(Y01_weight+Y23_weight));
2725*53ee8cc1Swenshuai.xi     g_u16Ydark =  g_u16Ydark+((Y45_weight*(g_ucTable[4]+g_ucTable[5])+Y67_weight*(g_ucTable[6]+g_ucTable[7])))/(2*(Y45_weight+Y67_weight));
2726*53ee8cc1Swenshuai.xi 
2727*53ee8cc1Swenshuai.xi     if (g_DlcParameters.ucCGCCGain_offset & _BIT7)
2728*53ee8cc1Swenshuai.xi         g_u16Ydark = (g_u16Ydark-(g_DlcParameters.ucCGCCGain_offset&0x7F));
2729*53ee8cc1Swenshuai.xi     else
2730*53ee8cc1Swenshuai.xi         g_u16Ydark = (g_u16Ydark+g_DlcParameters.ucCGCCGain_offset);
2731*53ee8cc1Swenshuai.xi 
2732*53ee8cc1Swenshuai.xi     g_u16Ydark_pre = g_u16Ydark;
2733*53ee8cc1Swenshuai.xi 
2734*53ee8cc1Swenshuai.xi     //printf("\r\n[1]. g_ucTable[0] = %d \n", g_ucTable[0]);
2735*53ee8cc1Swenshuai.xi     //printf("\r\n[2]. g_ucTable[1] = %d \n", g_ucTable[1]);
2736*53ee8cc1Swenshuai.xi     //printf("\r\n[3]. g_ucTable[2] = %d \n", g_ucTable[2]);
2737*53ee8cc1Swenshuai.xi     //printf("\r\n[4]. g_ucTable[3] = %d \n", g_ucTable[3]);
2738*53ee8cc1Swenshuai.xi     //printf("\r\n[5]. g_ucTable[4] = %d \n", g_ucTable[4]);
2739*53ee8cc1Swenshuai.xi 
2740*53ee8cc1Swenshuai.xi 
2741*53ee8cc1Swenshuai.xi     //printf("\r\ng_u8CGC_UpperBond = %d \n", g_u8CGC_UpperBond);
2742*53ee8cc1Swenshuai.xi     //printf("\r\ng_u8CGC_LowerBond = %d \n", g_u8CGC_LowerBond);
2743*53ee8cc1Swenshuai.xi 
2744*53ee8cc1Swenshuai.xi     //printf("\r\ng_u16Ydark(std) = %d \n", g_u16Ydark);
2745*53ee8cc1Swenshuai.xi }
2746*53ee8cc1Swenshuai.xi 
msDlc_CGC_SetGain(BYTE u8CGain)2747*53ee8cc1Swenshuai.xi void msDlc_CGC_SetGain(BYTE u8CGain)
2748*53ee8cc1Swenshuai.xi {
2749*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
2750*53ee8cc1Swenshuai.xi 
2751*53ee8cc1Swenshuai.xi     if (g_DlcParameters.bCGCCGainCtrl && (REG_ADDR_DLC_C_GAIN != REG_NULL))
2752*53ee8cc1Swenshuai.xi         msWriteByte(REG_ADDR_DLC_C_GAIN, u8CGain);
2753*53ee8cc1Swenshuai.xi 
2754*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
2755*53ee8cc1Swenshuai.xi }
2756*53ee8cc1Swenshuai.xi 
msDlc_CGC_Handler(void)2757*53ee8cc1Swenshuai.xi void msDlc_CGC_Handler(void)
2758*53ee8cc1Swenshuai.xi {
2759*53ee8cc1Swenshuai.xi     BYTE u8TmpVal;
2760*53ee8cc1Swenshuai.xi 
2761*53ee8cc1Swenshuai.xi     WORD u16Ytemp, u16Ydiff;
2762*53ee8cc1Swenshuai.xi 
2763*53ee8cc1Swenshuai.xi     msDlc_FunctionEnter();
2764*53ee8cc1Swenshuai.xi 
2765*53ee8cc1Swenshuai.xi     //printf("\r\n g_u8CGC_UpperBond = %d \n", g_u8CGC_UpperBond);
2766*53ee8cc1Swenshuai.xi     //printf("\r\n g_u8CGC_LowerBond = %d \n", g_u8CGC_LowerBond);
2767*53ee8cc1Swenshuai.xi 
2768*53ee8cc1Swenshuai.xi     u16Ytemp = (DWORD) (Y01_weight*(g_ucTable[0]+g_ucTable[1])+
2769*53ee8cc1Swenshuai.xi              Y23_weight*(g_ucTable[2]+g_ucTable[3]))/
2770*53ee8cc1Swenshuai.xi             (Y01_weight+Y23_weight);
2771*53ee8cc1Swenshuai.xi 
2772*53ee8cc1Swenshuai.xi     u16Ytemp =  u16Ytemp/2+(DWORD)(Y45_weight*(g_ucTable[4]+g_ucTable[5])+
2773*53ee8cc1Swenshuai.xi                        Y67_weight*(g_ucTable[6]+g_ucTable[7]))/
2774*53ee8cc1Swenshuai.xi                       (2*(Y45_weight+Y67_weight));
2775*53ee8cc1Swenshuai.xi 
2776*53ee8cc1Swenshuai.xi     //printf("\r\nu16Ytemp       = %d", u16Ytemp);
2777*53ee8cc1Swenshuai.xi     //printf("\r\ng_u16Ydark_pre = %d", g_u16Ydark_pre);
2778*53ee8cc1Swenshuai.xi 
2779*53ee8cc1Swenshuai.xi     if (abs(u16Ytemp-g_u16Ydark_pre)>=Yvar_Th)
2780*53ee8cc1Swenshuai.xi     {
2781*53ee8cc1Swenshuai.xi         g_u8TCount++;
2782*53ee8cc1Swenshuai.xi 
2783*53ee8cc1Swenshuai.xi      	 if ((u16Ytemp>g_u16Ydark)&&(g_u8TCount>=Timer_CountU))
2784*53ee8cc1Swenshuai.xi      {
2785*53ee8cc1Swenshuai.xi              //printf("\r\ng_u8TCountU       = %d", g_u8TCount);
2786*53ee8cc1Swenshuai.xi          g_u8TCount = 0;
2787*53ee8cc1Swenshuai.xi 
2788*53ee8cc1Swenshuai.xi              u16Ydiff=(u16Ytemp-g_u16Ydark);
2789*53ee8cc1Swenshuai.xi 
2790*53ee8cc1Swenshuai.xi              if (u16Ydiff>g_DlcParameters.ucCGCYth)
2791*53ee8cc1Swenshuai.xi              {
2792*53ee8cc1Swenshuai.xi      	         g_u8Chroma_target = g_u8Chroma_OriGain+(WORD)((u16Ydiff-g_DlcParameters.ucCGCYth)*g_DlcParameters.ucCGCYCslope)/(0x20);
2793*53ee8cc1Swenshuai.xi 
2794*53ee8cc1Swenshuai.xi      	         if (g_u8Chroma_target > g_u8CGC_UpperBond)
2795*53ee8cc1Swenshuai.xi      	             g_u8Chroma_target = g_u8CGC_UpperBond;
2796*53ee8cc1Swenshuai.xi      	     }
2797*53ee8cc1Swenshuai.xi      	     else
2798*53ee8cc1Swenshuai.xi      	         g_u8Chroma_target = g_u8Chroma_OriGain;
2799*53ee8cc1Swenshuai.xi          }
2800*53ee8cc1Swenshuai.xi          else if ((u16Ytemp<=g_u16Ydark)&&(g_u8TCount>=Timer_CountD))
2801*53ee8cc1Swenshuai.xi          {
2802*53ee8cc1Swenshuai.xi              //printf("\r\ng_u8TCountD       = %d", g_u8TCount);
2803*53ee8cc1Swenshuai.xi              g_u8TCount = 0;
2804*53ee8cc1Swenshuai.xi 
2805*53ee8cc1Swenshuai.xi              u16Ydiff=(g_u16Ydark-u16Ytemp);
2806*53ee8cc1Swenshuai.xi 
2807*53ee8cc1Swenshuai.xi              if (u16Ydiff>g_DlcParameters.ucCGCYth)
2808*53ee8cc1Swenshuai.xi              {
2809*53ee8cc1Swenshuai.xi      	         g_u8Chroma_target = g_u8Chroma_OriGain-(WORD)((u16Ydiff-g_DlcParameters.ucCGCYth)*g_DlcParameters.ucCGCYCslope)/(0x20);
2810*53ee8cc1Swenshuai.xi 
2811*53ee8cc1Swenshuai.xi      	         if (g_u8Chroma_target < g_u8CGC_LowerBond)
2812*53ee8cc1Swenshuai.xi      	             g_u8Chroma_target = g_u8CGC_LowerBond;
2813*53ee8cc1Swenshuai.xi      	     }
2814*53ee8cc1Swenshuai.xi      	     else
2815*53ee8cc1Swenshuai.xi      	         g_u8Chroma_target = g_u8Chroma_OriGain;
2816*53ee8cc1Swenshuai.xi          }
2817*53ee8cc1Swenshuai.xi 
2818*53ee8cc1Swenshuai.xi          //printf("\r\ng_u8Chroma_target = %d", g_u8Chroma_target);
2819*53ee8cc1Swenshuai.xi 
2820*53ee8cc1Swenshuai.xi      	 u8TmpVal = msReadByte(REG_ADDR_DLC_C_GAIN);
2821*53ee8cc1Swenshuai.xi 
2822*53ee8cc1Swenshuai.xi      	 if (g_u8Chroma_target>u8TmpVal)
2823*53ee8cc1Swenshuai.xi      	     msDlc_CGC_SetGain(u8TmpVal+CGain_StepU);
2824*53ee8cc1Swenshuai.xi      	 else if (g_u8Chroma_target<u8TmpVal)
2825*53ee8cc1Swenshuai.xi      	     msDlc_CGC_SetGain(u8TmpVal-CGain_StepD);
2826*53ee8cc1Swenshuai.xi     }
2827*53ee8cc1Swenshuai.xi 
2828*53ee8cc1Swenshuai.xi     g_u16Ydark_pre = (DWORD)(31*g_u16Ydark_pre+u16Ytemp)/32;
2829*53ee8cc1Swenshuai.xi 
2830*53ee8cc1Swenshuai.xi     msDlc_FunctionExit();
2831*53ee8cc1Swenshuai.xi }
2832*53ee8cc1Swenshuai.xi 
2833*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
2834*53ee8cc1Swenshuai.xi // Debug Protocol
2835*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
2836*53ee8cc1Swenshuai.xi 
2837*53ee8cc1Swenshuai.xi // Debug Command Paser
2838*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_FORCE_PAUSE      0
2839*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_FORCE_RUN        1
2840*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_READ             2 // old mode
2841*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_1          3
2842*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_2          4
2843*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_REINIT           5
2844*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_READ_BOUNDARY	6
2845*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_BOUNDARY	7
2846*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_READ_CV1         8
2847*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_READ_CV2A        9
2848*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_READ_CV2B        10
2849*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_CV1        11
2850*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_CV2A       12
2851*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_CV2B       13
2852*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_READ_INFO        14
2853*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_INFO       15
2854*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_CGC_REINIT       16
2855*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_READ_Sloplimit   17
2856*53ee8cc1Swenshuai.xi #define URCMD_MST_DLC_TEST_WRITE_Sloplimit  18
2857*53ee8cc1Swenshuai.xi 
msDLC_ParametersTool(BYTE * pCmdBuff)2858*53ee8cc1Swenshuai.xi void msDLC_ParametersTool(BYTE *pCmdBuff)
2859*53ee8cc1Swenshuai.xi {
2860*53ee8cc1Swenshuai.xi     BYTE ucTmpLen;
2861*53ee8cc1Swenshuai.xi 
2862*53ee8cc1Swenshuai.xi     ucTmpLen = *(pCmdBuff+1); //ucTmpLen
2863*53ee8cc1Swenshuai.xi 
2864*53ee8cc1Swenshuai.xi     switch(*(pCmdBuff+3)) //UART_EXT_CMD
2865*53ee8cc1Swenshuai.xi     {
2866*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_FORCE_PAUSE:
2867*53ee8cc1Swenshuai.xi 
2868*53ee8cc1Swenshuai.xi             break;
2869*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_FORCE_RUN:
2870*53ee8cc1Swenshuai.xi 
2871*53ee8cc1Swenshuai.xi             break;
2872*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_READ:
2873*53ee8cc1Swenshuai.xi             {
2874*53ee8cc1Swenshuai.xi                 BYTE i;
2875*53ee8cc1Swenshuai.xi                 for (i=0; i<16; i+=2)
2876*53ee8cc1Swenshuai.xi                 {
2877*53ee8cc1Swenshuai.xi                     putchar(0xF3);
2878*53ee8cc1Swenshuai.xi                     putchar(g_DlcParameters.ucLumaCurve[i]);
2879*53ee8cc1Swenshuai.xi                     putchar(g_DlcParameters.ucLumaCurve[i+1]);
2880*53ee8cc1Swenshuai.xi                     Delay1ms(150);
2881*53ee8cc1Swenshuai.xi                 }
2882*53ee8cc1Swenshuai.xi             }
2883*53ee8cc1Swenshuai.xi             break;
2884*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_WRITE_1:
2885*53ee8cc1Swenshuai.xi             {
2886*53ee8cc1Swenshuai.xi                 BYTE i;
2887*53ee8cc1Swenshuai.xi               #if 1//( ENABLE_UART_CHECKSUM )
2888*53ee8cc1Swenshuai.xi                 ucTmpLen--; // remove checksum byte
2889*53ee8cc1Swenshuai.xi               #endif
2890*53ee8cc1Swenshuai.xi                 for (i=0; i<(ucTmpLen-4); i++)
2891*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucLumaCurve[i] = *(pCmdBuff+4 + i);
2892*53ee8cc1Swenshuai.xi             }
2893*53ee8cc1Swenshuai.xi             break;
2894*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_WRITE_2:
2895*53ee8cc1Swenshuai.xi             {
2896*53ee8cc1Swenshuai.xi                 BYTE i;
2897*53ee8cc1Swenshuai.xi               #if 1//( ENABLE_UART_CHECKSUM )
2898*53ee8cc1Swenshuai.xi                 ucTmpLen--; // remove checksum byte
2899*53ee8cc1Swenshuai.xi               #endif
2900*53ee8cc1Swenshuai.xi                 for (i=0; i<(ucTmpLen-4); i++)
2901*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucLumaCurve[8 + i] = *(pCmdBuff+4 + i);
2902*53ee8cc1Swenshuai.xi             }
2903*53ee8cc1Swenshuai.xi             break;
2904*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_READ_CV1:
2905*53ee8cc1Swenshuai.xi             {
2906*53ee8cc1Swenshuai.xi                 putchar(0xF2);
2907*53ee8cc1Swenshuai.xi                 putchar(g_DlcParameters.ucLumaCurve[*(pCmdBuff+4)]);
2908*53ee8cc1Swenshuai.xi             }
2909*53ee8cc1Swenshuai.xi             break;
2910*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_READ_CV2A:
2911*53ee8cc1Swenshuai.xi             {
2912*53ee8cc1Swenshuai.xi                 putchar(0xF2);
2913*53ee8cc1Swenshuai.xi                 putchar(g_DlcParameters.ucLumaCurve2_a[*(pCmdBuff+4)]);
2914*53ee8cc1Swenshuai.xi             }
2915*53ee8cc1Swenshuai.xi             break;
2916*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_READ_CV2B:
2917*53ee8cc1Swenshuai.xi             {
2918*53ee8cc1Swenshuai.xi                 putchar(0xF2);
2919*53ee8cc1Swenshuai.xi                 putchar(g_DlcParameters.ucLumaCurve2_b[*(pCmdBuff+4)]);
2920*53ee8cc1Swenshuai.xi             }
2921*53ee8cc1Swenshuai.xi             break;
2922*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_WRITE_CV1:
2923*53ee8cc1Swenshuai.xi             {
2924*53ee8cc1Swenshuai.xi                 BYTE i;
2925*53ee8cc1Swenshuai.xi               #if 1//( ENABLE_UART_CHECKSUM )
2926*53ee8cc1Swenshuai.xi                 ucTmpLen--; // remove checksum byte
2927*53ee8cc1Swenshuai.xi               #endif
2928*53ee8cc1Swenshuai.xi                 for (i=0; i<(ucTmpLen-4-1); i++)
2929*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucLumaCurve[*(pCmdBuff+4) + i] = *(pCmdBuff+5 + i);
2930*53ee8cc1Swenshuai.xi             }
2931*53ee8cc1Swenshuai.xi             break;
2932*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_WRITE_CV2A:
2933*53ee8cc1Swenshuai.xi             {
2934*53ee8cc1Swenshuai.xi                 BYTE i;
2935*53ee8cc1Swenshuai.xi               #if 1//( ENABLE_UART_CHECKSUM )
2936*53ee8cc1Swenshuai.xi                 ucTmpLen--; // remove checksum byte
2937*53ee8cc1Swenshuai.xi               #endif
2938*53ee8cc1Swenshuai.xi                 for (i=0; i<(ucTmpLen-4-1); i++)
2939*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucLumaCurve2_a[*(pCmdBuff+4) + i] = *(pCmdBuff+5 + i);
2940*53ee8cc1Swenshuai.xi             }
2941*53ee8cc1Swenshuai.xi             break;
2942*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_WRITE_CV2B:
2943*53ee8cc1Swenshuai.xi             {
2944*53ee8cc1Swenshuai.xi                 BYTE i;
2945*53ee8cc1Swenshuai.xi               #if 1//( ENABLE_UART_CHECKSUM )
2946*53ee8cc1Swenshuai.xi                 ucTmpLen--; // remove checksum byte
2947*53ee8cc1Swenshuai.xi               #endif
2948*53ee8cc1Swenshuai.xi                 for (i=0; i<(ucTmpLen-4-1); i++)
2949*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucLumaCurve2_b[*(pCmdBuff+4) + i] = *(pCmdBuff+5 + i);
2950*53ee8cc1Swenshuai.xi             }
2951*53ee8cc1Swenshuai.xi             break;
2952*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_READ_INFO:
2953*53ee8cc1Swenshuai.xi             {
2954*53ee8cc1Swenshuai.xi                 if (*(pCmdBuff+4) == 1) // DLC curve
2955*53ee8cc1Swenshuai.xi                 {
2956*53ee8cc1Swenshuai.xi                     putchar(0xF2);
2957*53ee8cc1Swenshuai.xi                     putchar(g_ucTable[*(pCmdBuff+5)]);
2958*53ee8cc1Swenshuai.xi                 }
2959*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 2) // DLC other
2960*53ee8cc1Swenshuai.xi                 {
2961*53ee8cc1Swenshuai.xi                     if (*(pCmdBuff+5) < 64)
2962*53ee8cc1Swenshuai.xi                     {
2963*53ee8cc1Swenshuai.xi                         putchar(0xF2);
2964*53ee8cc1Swenshuai.xi                         if (*(pCmdBuff+5)%2)
2965*53ee8cc1Swenshuai.xi                             putchar(g_wLumaHistogram32H[*(pCmdBuff+5)/2] & 0xFF);
2966*53ee8cc1Swenshuai.xi                         else
2967*53ee8cc1Swenshuai.xi                             putchar(g_wLumaHistogram32H[*(pCmdBuff+5)/2] >> 8);
2968*53ee8cc1Swenshuai.xi                     }
2969*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 200)
2970*53ee8cc1Swenshuai.xi                     {
2971*53ee8cc1Swenshuai.xi                         WORD wVer;
2972*53ee8cc1Swenshuai.xi                         wVer = msDlcLibVersionCheck();
2973*53ee8cc1Swenshuai.xi                         putchar(0xF3);
2974*53ee8cc1Swenshuai.xi                         putchar(wVer >> 8);
2975*53ee8cc1Swenshuai.xi                         putchar(wVer & 0xFF);
2976*53ee8cc1Swenshuai.xi                     }
2977*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 201)
2978*53ee8cc1Swenshuai.xi                     {
2979*53ee8cc1Swenshuai.xi                         putchar(0xF3);
2980*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBleStartPointTH >> 8);
2981*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBleStartPointTH & 0xFF);
2982*53ee8cc1Swenshuai.xi                     }
2983*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 202)
2984*53ee8cc1Swenshuai.xi                     {
2985*53ee8cc1Swenshuai.xi                         putchar(0xF3);
2986*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBleEndPointTH >> 8);
2987*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBleEndPointTH & 0xFF);
2988*53ee8cc1Swenshuai.xi                     }
2989*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 203)
2990*53ee8cc1Swenshuai.xi                     {
2991*53ee8cc1Swenshuai.xi                         putchar(0xF3);
2992*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_1 >> 8);
2993*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_1 & 0xFF);
2994*53ee8cc1Swenshuai.xi                     }
2995*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 204)
2996*53ee8cc1Swenshuai.xi                     {
2997*53ee8cc1Swenshuai.xi                         putchar(0xF3);
2998*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_2 >> 8);
2999*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_2 & 0xFF);
3000*53ee8cc1Swenshuai.xi                     }
3001*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 205)
3002*53ee8cc1Swenshuai.xi                     {
3003*53ee8cc1Swenshuai.xi                         putchar(0xF3);
3004*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_3 >> 8);
3005*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_3 & 0xFF);
3006*53ee8cc1Swenshuai.xi                     }
3007*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 206)
3008*53ee8cc1Swenshuai.xi                     {
3009*53ee8cc1Swenshuai.xi                         putchar(0xF3);
3010*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_4 >> 8);
3011*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_4 & 0xFF);
3012*53ee8cc1Swenshuai.xi                     }
3013*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 207)
3014*53ee8cc1Swenshuai.xi                     {
3015*53ee8cc1Swenshuai.xi                         putchar(0xF3);
3016*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_5 >> 8);
3017*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcBLESlopPoint_5 & 0xFF);
3018*53ee8cc1Swenshuai.xi                     }
3019*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) == 208)
3020*53ee8cc1Swenshuai.xi                     {
3021*53ee8cc1Swenshuai.xi                         putchar(0xF3);
3022*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcDark_BLE_Slop_Min >> 8);
3023*53ee8cc1Swenshuai.xi                         putchar(g_DlcParameters.uwDlcDark_BLE_Slop_Min & 0xFF);
3024*53ee8cc1Swenshuai.xi                     }
3025*53ee8cc1Swenshuai.xi                     else if (*(pCmdBuff+5) >= 64)
3026*53ee8cc1Swenshuai.xi                     {
3027*53ee8cc1Swenshuai.xi                         putchar(0xF2);
3028*53ee8cc1Swenshuai.xi                         if (*(pCmdBuff+5) == 64)
3029*53ee8cc1Swenshuai.xi                             putchar(g_wLumiAverageTemp & 0xFF);
3030*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 65)
3031*53ee8cc1Swenshuai.xi                             putchar(g_wLumiAverageTemp >> 8);
3032*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 66)
3033*53ee8cc1Swenshuai.xi                             putchar(g_wLumiTotalCount & 0xFF);
3034*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 67)
3035*53ee8cc1Swenshuai.xi                             putchar(g_wLumiTotalCount >> 8);
3036*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 68)
3037*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_L_L_U);
3038*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 69)
3039*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_L_L_D);
3040*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 70)
3041*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_L_H_U);
3042*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 71)
3043*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_L_H_D);
3044*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 72)
3045*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_S_L_U);
3046*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 73)
3047*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_S_L_D);
3048*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 74)
3049*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_S_H_U);
3050*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 75)
3051*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.u8_S_H_D);
3052*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 76)
3053*53ee8cc1Swenshuai.xi                             putchar(g_ucHistogramMin);
3054*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 77)
3055*53ee8cc1Swenshuai.xi                             putchar(g_ucHistogramMax);
3056*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 78)
3057*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcPureImageMode);
3058*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 79)
3059*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcLevelLimit);
3060*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 80)
3061*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcAvgDelta);
3062*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 81)
3063*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcFastAlphaBlending);
3064*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 82)
3065*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.bEnableBLE);
3066*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 83)
3067*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.bEnableWLE);
3068*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 84)
3069*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcBLEPoint);
3070*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 85)
3071*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcWLEPoint);
3072*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 86)
3073*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcAvgDeltaStill);
3074*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 87)
3075*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcYAvgThresholdL);
3076*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 88)
3077*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcYAvgThresholdH);
3078*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 89)
3079*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucCGCCGain_offset);
3080*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 90)
3081*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucCGCChroma_GainLimitH);
3082*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 91)
3083*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucCGCChroma_GainLimitL);
3084*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 92)
3085*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucCGCYCslope);
3086*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 93)
3087*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucCGCYth);
3088*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 94)
3089*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.bCGCCGainCtrl);
3090*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 95)
3091*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcYAvgThresholdM);
3092*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 96)
3093*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcCurveMode);
3094*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 97)
3095*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcCurveModeMixAlpha);
3096*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 98)
3097*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcAlgorithmMode);
3098*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 99)
3099*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcSepPointH);
3100*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 100)
3101*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcSepPointL);
3102*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 101)
3103*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcCurveDiff_L_TH);
3104*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 102)
3105*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcCurveDiff_H_TH);
3106*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 103)
3107*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcCurveDiffCoringTH);
3108*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 104)
3109*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcAlphaBlendingMin);
3110*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 105)
3111*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcAlphaBlendingMax);
3112*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 106)
3113*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcFlicker_alpha);
3114*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 107)
3115*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcYAVG_L_TH);
3116*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 108)
3117*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcYAVG_H_TH);
3118*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 109)
3119*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcDiffBase_L);
3120*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 110)
3121*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcDiffBase_M);
3122*53ee8cc1Swenshuai.xi                         else if (*(pCmdBuff+5) == 111)
3123*53ee8cc1Swenshuai.xi                             putchar(g_DlcParameters.ucDlcDiffBase_H);
3124*53ee8cc1Swenshuai.xi                         else
3125*53ee8cc1Swenshuai.xi                             putchar(0);
3126*53ee8cc1Swenshuai.xi                     }
3127*53ee8cc1Swenshuai.xi                     else
3128*53ee8cc1Swenshuai.xi                     {
3129*53ee8cc1Swenshuai.xi                         putchar(0xF2);
3130*53ee8cc1Swenshuai.xi                         putchar(0);
3131*53ee8cc1Swenshuai.xi                     }
3132*53ee8cc1Swenshuai.xi                 }
3133*53ee8cc1Swenshuai.xi             }
3134*53ee8cc1Swenshuai.xi             break;
3135*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_WRITE_INFO:
3136*53ee8cc1Swenshuai.xi             {
3137*53ee8cc1Swenshuai.xi                 if (*(pCmdBuff+4) == 0)
3138*53ee8cc1Swenshuai.xi                 {
3139*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_L_L_U = *(pCmdBuff+5);
3140*53ee8cc1Swenshuai.xi                 }
3141*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 1)
3142*53ee8cc1Swenshuai.xi                 {
3143*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_L_L_D = *(pCmdBuff+5);
3144*53ee8cc1Swenshuai.xi                 }
3145*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 2)
3146*53ee8cc1Swenshuai.xi                 {
3147*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_L_H_U = *(pCmdBuff+5);
3148*53ee8cc1Swenshuai.xi                 }
3149*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 3)
3150*53ee8cc1Swenshuai.xi                 {
3151*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_L_H_D = *(pCmdBuff+5);
3152*53ee8cc1Swenshuai.xi                 }
3153*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 4)
3154*53ee8cc1Swenshuai.xi                 {
3155*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_S_L_U = *(pCmdBuff+5);
3156*53ee8cc1Swenshuai.xi                 }
3157*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 5)
3158*53ee8cc1Swenshuai.xi                 {
3159*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_S_L_D = *(pCmdBuff+5);
3160*53ee8cc1Swenshuai.xi                 }
3161*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 6)
3162*53ee8cc1Swenshuai.xi                 {
3163*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_S_H_U = *(pCmdBuff+5);
3164*53ee8cc1Swenshuai.xi                 }
3165*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 7)
3166*53ee8cc1Swenshuai.xi                 {
3167*53ee8cc1Swenshuai.xi                     g_DlcParameters.u8_S_H_D = *(pCmdBuff+5);
3168*53ee8cc1Swenshuai.xi                 }
3169*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 8)
3170*53ee8cc1Swenshuai.xi                 {
3171*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcPureImageMode = *(pCmdBuff+5);
3172*53ee8cc1Swenshuai.xi                 }
3173*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 9)
3174*53ee8cc1Swenshuai.xi                 {
3175*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcLevelLimit = *(pCmdBuff+5);
3176*53ee8cc1Swenshuai.xi                 }
3177*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 10)
3178*53ee8cc1Swenshuai.xi                 {
3179*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcAvgDelta = *(pCmdBuff+5);
3180*53ee8cc1Swenshuai.xi                 }
3181*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 11)
3182*53ee8cc1Swenshuai.xi                 {
3183*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcFastAlphaBlending = *(pCmdBuff+5);
3184*53ee8cc1Swenshuai.xi                 }
3185*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 12)
3186*53ee8cc1Swenshuai.xi                 {
3187*53ee8cc1Swenshuai.xi                     g_DlcParameters.bEnableBLE = *(pCmdBuff+5);
3188*53ee8cc1Swenshuai.xi                 }
3189*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 13)
3190*53ee8cc1Swenshuai.xi                 {
3191*53ee8cc1Swenshuai.xi                     g_DlcParameters.bEnableWLE = *(pCmdBuff+5);
3192*53ee8cc1Swenshuai.xi                 }
3193*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 14)
3194*53ee8cc1Swenshuai.xi                 {
3195*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcBLEPoint = *(pCmdBuff+5);
3196*53ee8cc1Swenshuai.xi                 }
3197*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 15)
3198*53ee8cc1Swenshuai.xi                 {
3199*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcWLEPoint = *(pCmdBuff+5);
3200*53ee8cc1Swenshuai.xi                 }
3201*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 16)
3202*53ee8cc1Swenshuai.xi                 {
3203*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcAvgDeltaStill= *(pCmdBuff+5);
3204*53ee8cc1Swenshuai.xi                 }
3205*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 17)
3206*53ee8cc1Swenshuai.xi                 {
3207*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcYAvgThresholdL = *(pCmdBuff+5);
3208*53ee8cc1Swenshuai.xi                 }
3209*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 18)
3210*53ee8cc1Swenshuai.xi                 {
3211*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcYAvgThresholdH = *(pCmdBuff+5);
3212*53ee8cc1Swenshuai.xi                 }
3213*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 19)
3214*53ee8cc1Swenshuai.xi                 {
3215*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucCGCCGain_offset = *(pCmdBuff+5);
3216*53ee8cc1Swenshuai.xi                 }
3217*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 20)
3218*53ee8cc1Swenshuai.xi                 {
3219*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucCGCChroma_GainLimitH = *(pCmdBuff+5);
3220*53ee8cc1Swenshuai.xi                 }
3221*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 21)
3222*53ee8cc1Swenshuai.xi                 {
3223*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucCGCChroma_GainLimitL = *(pCmdBuff+5);
3224*53ee8cc1Swenshuai.xi                 }
3225*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 22)
3226*53ee8cc1Swenshuai.xi                 {
3227*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucCGCYCslope = *(pCmdBuff+5);
3228*53ee8cc1Swenshuai.xi                 }
3229*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 23)
3230*53ee8cc1Swenshuai.xi                 {
3231*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucCGCYth = *(pCmdBuff+5);
3232*53ee8cc1Swenshuai.xi                 }
3233*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 24)
3234*53ee8cc1Swenshuai.xi                 {
3235*53ee8cc1Swenshuai.xi                     g_DlcParameters.bCGCCGainCtrl = *(pCmdBuff+5);
3236*53ee8cc1Swenshuai.xi                 }
3237*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 25)
3238*53ee8cc1Swenshuai.xi                 {
3239*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcYAvgThresholdM = *(pCmdBuff+5);
3240*53ee8cc1Swenshuai.xi                 }
3241*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 26)
3242*53ee8cc1Swenshuai.xi                 {
3243*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcCurveMode = *(pCmdBuff+5);
3244*53ee8cc1Swenshuai.xi                 }
3245*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 27)
3246*53ee8cc1Swenshuai.xi                 {
3247*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcCurveModeMixAlpha = *(pCmdBuff+5);
3248*53ee8cc1Swenshuai.xi                 }
3249*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 28)
3250*53ee8cc1Swenshuai.xi                 {
3251*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcAlgorithmMode = *(pCmdBuff+5);
3252*53ee8cc1Swenshuai.xi                 }
3253*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 29)
3254*53ee8cc1Swenshuai.xi                 {
3255*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcSepPointH = *(pCmdBuff+5);
3256*53ee8cc1Swenshuai.xi                 }
3257*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 30)
3258*53ee8cc1Swenshuai.xi                 {
3259*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcSepPointL = *(pCmdBuff+5);
3260*53ee8cc1Swenshuai.xi                 }
3261*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 31)
3262*53ee8cc1Swenshuai.xi                 {
3263*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcBleStartPointTH = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3264*53ee8cc1Swenshuai.xi                 }
3265*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 32)
3266*53ee8cc1Swenshuai.xi                 {
3267*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcBleEndPointTH = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3268*53ee8cc1Swenshuai.xi                 }
3269*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 33)
3270*53ee8cc1Swenshuai.xi                 {
3271*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcCurveDiff_L_TH = *(pCmdBuff+5);
3272*53ee8cc1Swenshuai.xi                 }
3273*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 34)
3274*53ee8cc1Swenshuai.xi                 {
3275*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcCurveDiff_H_TH = *(pCmdBuff+5);
3276*53ee8cc1Swenshuai.xi                 }
3277*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 35)
3278*53ee8cc1Swenshuai.xi                 {
3279*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcBLESlopPoint_1 = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3280*53ee8cc1Swenshuai.xi                 }
3281*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 36)
3282*53ee8cc1Swenshuai.xi                 {
3283*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcBLESlopPoint_2 = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3284*53ee8cc1Swenshuai.xi                 }
3285*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 37)
3286*53ee8cc1Swenshuai.xi                 {
3287*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcBLESlopPoint_3 = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3288*53ee8cc1Swenshuai.xi                 }
3289*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 38)
3290*53ee8cc1Swenshuai.xi                 {
3291*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcBLESlopPoint_4 = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3292*53ee8cc1Swenshuai.xi                 }
3293*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 39)
3294*53ee8cc1Swenshuai.xi                 {
3295*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcBLESlopPoint_5 = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3296*53ee8cc1Swenshuai.xi                 }
3297*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 40)
3298*53ee8cc1Swenshuai.xi                 {
3299*53ee8cc1Swenshuai.xi                     g_DlcParameters.uwDlcDark_BLE_Slop_Min = (WORD)((*(pCmdBuff+6)<<8)+(*(pCmdBuff+5)));
3300*53ee8cc1Swenshuai.xi                 }
3301*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 41)
3302*53ee8cc1Swenshuai.xi                 {
3303*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcCurveDiffCoringTH = *(pCmdBuff+5);
3304*53ee8cc1Swenshuai.xi                 }
3305*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 42)
3306*53ee8cc1Swenshuai.xi                 {
3307*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcAlphaBlendingMin = *(pCmdBuff+5);
3308*53ee8cc1Swenshuai.xi                 }
3309*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 43)
3310*53ee8cc1Swenshuai.xi                 {
3311*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcAlphaBlendingMax = *(pCmdBuff+5);
3312*53ee8cc1Swenshuai.xi                 }
3313*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 44)
3314*53ee8cc1Swenshuai.xi                 {
3315*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcFlicker_alpha= *(pCmdBuff+5);
3316*53ee8cc1Swenshuai.xi                 }
3317*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 45)
3318*53ee8cc1Swenshuai.xi                 {
3319*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcYAVG_L_TH = *(pCmdBuff+5);
3320*53ee8cc1Swenshuai.xi                 }
3321*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 46)
3322*53ee8cc1Swenshuai.xi                 {
3323*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcYAVG_H_TH = *(pCmdBuff+5);
3324*53ee8cc1Swenshuai.xi                 }
3325*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 47)
3326*53ee8cc1Swenshuai.xi                 {
3327*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcDiffBase_L= *(pCmdBuff+5);
3328*53ee8cc1Swenshuai.xi                 }
3329*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 48)
3330*53ee8cc1Swenshuai.xi                 {
3331*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcDiffBase_M = *(pCmdBuff+5);
3332*53ee8cc1Swenshuai.xi                 }
3333*53ee8cc1Swenshuai.xi                 else if (*(pCmdBuff+4) == 49)
3334*53ee8cc1Swenshuai.xi                 {
3335*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcDiffBase_H = *(pCmdBuff+5);
3336*53ee8cc1Swenshuai.xi                 }
3337*53ee8cc1Swenshuai.xi                 msDlcSpeedupTrigger(16);
3338*53ee8cc1Swenshuai.xi             }
3339*53ee8cc1Swenshuai.xi             break;
3340*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_REINIT:
3341*53ee8cc1Swenshuai.xi             msDlc_AP_ReinitWithoutPara();
3342*53ee8cc1Swenshuai.xi             msDlcOnOff( _ENABLE, MAIN_WINDOW);
3343*53ee8cc1Swenshuai.xi             break;
3344*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_CGC_REINIT:
3345*53ee8cc1Swenshuai.xi             msDlc_CGC_ReInit();
3346*53ee8cc1Swenshuai.xi             break;
3347*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_READ_Sloplimit:
3348*53ee8cc1Swenshuai.xi             {
3349*53ee8cc1Swenshuai.xi                 putchar(0xF2);
3350*53ee8cc1Swenshuai.xi                 putchar(g_DlcParameters.ucDlcHistogramLimitCurve[*(pCmdBuff+4)]);
3351*53ee8cc1Swenshuai.xi             }
3352*53ee8cc1Swenshuai.xi             break;
3353*53ee8cc1Swenshuai.xi         case URCMD_MST_DLC_TEST_WRITE_Sloplimit:
3354*53ee8cc1Swenshuai.xi             {
3355*53ee8cc1Swenshuai.xi                 BYTE i;
3356*53ee8cc1Swenshuai.xi               #if 1//( ENABLE_UART_CHECKSUM )
3357*53ee8cc1Swenshuai.xi                 ucTmpLen--; // remove checksum byte
3358*53ee8cc1Swenshuai.xi               #endif
3359*53ee8cc1Swenshuai.xi                 for (i=0; i<(ucTmpLen-4-1); i++)
3360*53ee8cc1Swenshuai.xi                     g_DlcParameters.ucDlcHistogramLimitCurve[*(pCmdBuff+4) + i] = *(pCmdBuff+5 + i);
3361*53ee8cc1Swenshuai.xi             }
3362*53ee8cc1Swenshuai.xi             break;
3363*53ee8cc1Swenshuai.xi     }
3364*53ee8cc1Swenshuai.xi }
3365*53ee8cc1Swenshuai.xi 
3366*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
3367*53ee8cc1Swenshuai.xi //
3368*53ee8cc1Swenshuai.xi //////////////////////////////////////////////////////////////
msDlcLibVersionCheck(void)3369*53ee8cc1Swenshuai.xi WORD msDlcLibVersionCheck(void)
3370*53ee8cc1Swenshuai.xi {
3371*53ee8cc1Swenshuai.xi     return DLC_LIB_VERSION;
3372*53ee8cc1Swenshuai.xi }
3373*53ee8cc1Swenshuai.xi 
msDlcCGCLibVersionCheck(void)3374*53ee8cc1Swenshuai.xi WORD msDlcCGCLibVersionCheck(void)
3375*53ee8cc1Swenshuai.xi {
3376*53ee8cc1Swenshuai.xi     return DLC_CGC_LIB_VERSION;
3377*53ee8cc1Swenshuai.xi }
3378*53ee8cc1Swenshuai.xi 
3379*53ee8cc1Swenshuai.xi #undef _MSDLC_C_
3380