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