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