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