summaryrefslogtreecommitdiff
path: root/tvapi/libtv/vpp/CPQdb.cpp (plain)
blob: e4a90ec22e0017077e9b1bf4d30374c34d328fd3
1/*
2 * CPQdb.cpp
3 *
4 * Created on: 2011-12-13
5 * Author: casey
6 *
7 * change 2015.04
8 * showbo
9 */
10
11
12#include <stdio.h>
13#include <string.h>
14#include <stdlib.h>
15#include <sys/stat.h>
16#include <errno.h>
17#include "CPQdb.h"
18#include "../tvutils/tvutils.h"
19#include "../tvutils/tvutils.h"
20
21#if (PQ_NO_ANDROID == 0)
22#include <android/log.h>
23
24#define LOG_TAG "CPQdb"
25#include "CTvLog.h"
26#endif
27
28
29#if (PQ_NO_ANDROID == 1)
30using namespace std;
31#endif
32
33//#define CPQDB_DEBUG
34
35#define BRIGHTNESS_ID 0
36#define CONTRAST_ID 1
37#define SATURATION_ID 1
38#define HUE_ID 0
39#define SHARPNESS_ID 1
40
41//static char *str_buf[256];
42
43#define ID_FIELD "TableID"
44#define NR_LEVEL_NAME "NRLevel"
45#define CM_LEVEL_NAME "CMLevel"
46#define LEVEL_NAME "Level"
47#define ADC_SETTING "ADC_Settings"
48#define CVD2_SETTING "CVD2_Settings"
49#define PORT "Port"
50#define FORMAT "Format"
51
52
53#define CC_LINE_MAX_LEN (1024)
54
55#define LOG_TAG "CPQdb"
56//#define CPQDB_DEBUG
57
58CPqData::CPqData()
59{
60 int i = 0, j = 0;
61
62 for (i = 0; i < 15; i++) {
63 pq_bri_data[i].TotalNode = 0;
64 pq_bri_data[i].NodeValue = 0;
65 pq_bri_data[i].IndexValue = 0;
66 pq_bri_data[i].RegValue = 0;
67 pq_bri_data[i].step = 0;
68
69 pq_con_data[i].TotalNode = 0;
70 pq_con_data[i].NodeValue = 0;
71 pq_con_data[i].IndexValue = 0;
72 pq_con_data[i].RegValue = 0;
73 pq_con_data[i].step = 0;
74
75 pq_sat_data[i].TotalNode = 0;
76 pq_sat_data[i].NodeValue = 0;
77 pq_sat_data[i].IndexValue = 0;
78 pq_sat_data[i].RegValue = 0;
79 pq_sat_data[i].step = 0;
80
81 pq_hue_data[i].TotalNode = 0;
82 pq_hue_data[i].NodeValue = 0;
83 pq_hue_data[i].IndexValue = 0;
84 pq_hue_data[i].RegValue = 0;
85 pq_hue_data[i].step = 0;
86 }
87
88 for (i = 0; i < 10; i++) {
89 pq_sharpness_reg_data[i].length = 0;
90 for (j = 0; j < 50; j++) {
91 pq_sharpness_reg_data[i].reg_data[j].TotalNode = 0;
92 pq_sharpness_reg_data[i].reg_data[j].Value.type = 0;
93 pq_sharpness_reg_data[i].reg_data[j].Value.addr = 0;
94 pq_sharpness_reg_data[i].reg_data[j].Value.mask = 0;
95 pq_sharpness_reg_data[i].reg_data[j].Value.val = 0;
96 pq_sharpness_reg_data[i].reg_data[j].NodeValue = 0;
97 pq_sharpness_reg_data[i].reg_data[j].IndexValue = 0;
98 pq_sharpness_reg_data[i].reg_data[j].step = 0;
99 }
100 }
101}
102
103CPqData::~CPqData()
104{
105}
106
107int CPqData::openDB()
108{
109 int rval;
110 project_info_t tmp_info;
111 char *PARAM_PQ = "/param/pq.db";
112 char SYSTEM_PQ[128] = {0};
113 char tmp_buf[128] = {0};
114
115 strcpy(SYSTEM_PQ, "/system/etc/pq.db");
116
117 if (GetProjectInfo(&tmp_info) == 0) {
118 strcpy(tmp_buf, "/system/etc/");
119 strcat(tmp_buf, tmp_info.panel_type);
120 strcat(tmp_buf, ".db");
121 if (access(tmp_buf, 0) == 0) {
122 strncpy(SYSTEM_PQ, tmp_buf, sizeof(SYSTEM_PQ) - 1);
123 }
124 }
125
126 if (access(PARAM_PQ, 0) < 0) {
127 CFile file(SYSTEM_PQ);
128 if (file.copyTo(PARAM_PQ) != 0) {
129 LOGE("%s, copy file \"%s\" to \"%s\" error", __FUNCTION__, SYSTEM_PQ, PARAM_PQ);
130 return -1;
131 } else {
132 LOGD("%s, copy file \"%s\" to \"%s\" ok", __FUNCTION__, SYSTEM_PQ, PARAM_PQ);
133 }
134 }
135
136 closeDb();
137 rval = openDb(PARAM_PQ);
138
139 char *err;
140 bool isOk = integrityCheck();
141 if (!isOk) {
142 CFile file ( SYSTEM_PQ );
143 if ( file.copyTo ( PARAM_PQ ) != 0 ) {
144 LOGE ( "%s, copy file = %s , error", __FUNCTION__, SYSTEM_PQ );
145 return -1;
146 } else {
147 closeDb();
148 rval = openDb(PARAM_PQ);
149 LOGD ( "%s, copy file = %s , ok", __FUNCTION__, SYSTEM_PQ );
150 }
151 }
152 return rval;
153}
154
155int CPqData::getRegValues(tvin_port_t source, tvin_sig_fmt_t signal, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
156{
157 CSqlite::Cursor c_tablelist, c_reg_list;
158 int iOutRet = 0;
159 char sqlmaster[256];
160 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
161 //first get table name
162 sprintf(sqlmaster, "select TableName from GeneralCommonTable where "
163 "TVIN_PORT = %d and "
164 "TVIN_SIG_FMT = %d and "
165 "TVIN_TRANS_FMT = %d ;",
166 source, signal, mode);
167 this->select(sqlmaster, c_tablelist);
168 int index_am_reg = 0;
169 if (c_tablelist.moveToFirst()) { //for table list
170 int index_tablename = c_tablelist.getColumnIndex("TableName");
171 do {
172 sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s;", c_tablelist.getString(index_tablename).string());
173 this->select(sqlmaster, c_reg_list);
174 if (c_reg_list.moveToFirst()) { //reg list for each table
175 int index_type = 0;//c_reg_list.getColumnIndex("RegType");
176 int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
177 int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
178 int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
179 do {
180 regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
181 regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
182 regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
183 regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
184 index_am_reg++;
185 } while (c_reg_list.moveToNext());
186 }
187 } while (c_tablelist.moveToNext());
188 }
189 //
190 regs->length = index_am_reg;
191 LOGD("getRegValues length = %d", regs->length);
192 return index_am_reg;
193}
194
195int CPqData::getRegValuesByValue(const char *name, const char *f_name, const char *f2_name, const int val,
196 const int val2, am_regs_t *regs)
197{
198 CSqlite::Cursor c_reg_list;
199 char sqlmaster[256];
200 int rval = -1;
201 //first get table name
202 if ((strlen(f2_name) == 0) && (val2 == 0))
203 sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d;", name, f_name, val);
204 else
205 sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d and %s = %d;", name, f_name, val,
206 f2_name, val2);
207
208 rval = this->select(sqlmaster, c_reg_list);
209 int count = c_reg_list.getCount();
210 if (count > 512) {
211 LOGD("getRegValuesByValue regs is too more, in pq.db count = %d", count);
212 return -1;
213 }
214 int index_am_reg = 0;
215 if (c_reg_list.moveToFirst()) { //reg list for each table
216 int index_type = 0;//c_reg_list.getColumnIndex("RegType");
217 int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
218 int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
219 int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
220 do {
221 regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
222 regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
223 regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
224 regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
225 index_am_reg++;
226 } while (c_reg_list.moveToNext());
227 } else rval = -1;
228 //
229 regs->length = index_am_reg;
230 LOGD("getRegValuesByValue length = %d", regs->length);
231 return rval;
232}
233
234int CPqData::getRegValuesByValue_long(const char *name, const char *f_name, const char *f2_name, const int val, const int val2, am_regs_t *regs, am_regs_t *regs_1)
235{
236 CSqlite::Cursor c_reg_list;
237 char sqlmaster[256];
238 int rval = -1;
239 //first get table name
240 if ((strlen(f2_name) == 0) && (val2 == 0))
241 sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d;", name, f_name, val);
242 else
243 sprintf(sqlmaster, "select RegType, RegAddr, RegMask, RegValue from %s where %s = %d and %s = %d;", name, f_name, val,
244 f2_name, val2);
245
246 rval = this->select(sqlmaster, c_reg_list);
247
248 int index_am_reg = 0;
249 int count = c_reg_list.getCount();
250 if (count > 1024) {
251 LOGD("getRegValuesByValue_long regs is too more, in pq.db count = %d", count);
252 return -1;
253 }
254 if (c_reg_list.moveToFirst()) { //reg list for each table
255 int index_type = 0;//c_reg_list.getColumnIndex("RegType");
256 int index_addr = 1;//c_reg_list.getColumnIndex("RegAddr");
257 int index_mask = 2;//c_reg_list.getColumnIndex("RegMask");
258 int index_val = 3;//c_reg_list.getColumnIndex("RegValue");
259 do {
260 if (index_am_reg < 512) {
261 regs->am_reg[index_am_reg].type = c_reg_list.getInt(index_type);
262 regs->am_reg[index_am_reg].addr = c_reg_list.getInt(index_addr);
263 regs->am_reg[index_am_reg].mask = c_reg_list.getInt(index_mask);
264 regs->am_reg[index_am_reg].val = c_reg_list.getInt(index_val);
265 } else if (index_am_reg >= 512 && index_am_reg < 1024) {
266 regs_1->am_reg[index_am_reg - 512].type = c_reg_list.getInt(index_type);
267 regs_1->am_reg[index_am_reg - 512].addr = c_reg_list.getInt(index_addr);
268 regs_1->am_reg[index_am_reg - 512].mask = c_reg_list.getInt(index_mask);
269 regs_1->am_reg[index_am_reg - 512].val = c_reg_list.getInt(index_val);
270 } else {
271 }
272 index_am_reg++;
273 } while (c_reg_list.moveToNext());
274 } else rval = -1;
275 //
276 if (count < 512) {
277 regs->length = index_am_reg;
278 } else if (index_am_reg >= 512 && index_am_reg < 1024) {
279 regs->length = 512;
280 regs_1->length = index_am_reg - 512;
281 }
282 LOGD("getRegValuesByValue length = %d", index_am_reg);
283 return rval;
284}
285int CPqData::PQ_GetBaseColorParams(vpp_color_basemode_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
286{
287 CSqlite::Cursor c;
288 char sqlmaster[256];
289 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
290 int rval = -1;
291 sprintf(sqlmaster, "select TableName from GeneralColormanagementTable where "
292 "TVIN_PORT = %d and "
293 "TVIN_SIG_FMT = %d and "
294 "TVIN_TRANS_FMT = %d ;",
295 source_port, sig_fmt, mode);
296
297 this->select(sqlmaster, c);
298
299 if (c.moveToFirst()) {
300 int index_TableName = 0;//c.getColumnIndex("TableName");
301 rval = getRegValuesByValue(c.getString(index_TableName), CM_LEVEL_NAME, "", (int)basemode, 0, regs);
302 }
303 return rval;
304}
305
306int CPqData::PQ_GetCM2Params(vpp_color_management2_t basemode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
307{
308 CSqlite::Cursor c;
309 char sqlmaster[256];
310 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
311 int rval = -1;
312 if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
313 if (source_port != TVIN_PORT_CVBS3) {
314 source_port = TVIN_PORT_CVBS1;
315 }
316 } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
317 source_port = TVIN_PORT_HDMI0;
318 } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
319 source_port = TVIN_PORT_MPEG0;
320 }
321
322 if (sig_fmt >= TVIN_SIG_FMT_MAX) {
323 sig_fmt = TVIN_SIG_FMT_NULL;
324 }
325
326 sprintf(sqlmaster, "select TableName from GeneralCM2Table where "
327 "TVIN_PORT = %d and "
328 "TVIN_SIG_FMT = %d and "
329 "TVIN_TRANS_FMT = %d ;",
330 source_port, sig_fmt, mode);
331
332 rval = this->select(sqlmaster, c);
333
334 if (c.moveToFirst()) {
335 int index_TableName = 0;//c.getColumnIndex("TableName");
336 rval = getRegValuesByValue(c.getString(index_TableName), CM_LEVEL_NAME, "", (int)basemode, 0, regs);
337 }
338 return rval;
339}
340
341int CPqData::PQ_GetNR2Params(vpp_noise_reduction2_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
342{
343 CSqlite::Cursor c;
344 char sqlmaster[256];
345 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
346 int rval = -1;
347
348 if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
349 if (source_port != TVIN_PORT_CVBS3) {
350 source_port = TVIN_PORT_CVBS1;
351 }
352 } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
353 source_port = TVIN_PORT_HDMI0;
354 } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
355 source_port = TVIN_PORT_MPEG0;
356 }
357
358 sprintf(sqlmaster, "select TableName from GeneralNR2Table where "
359 "TVIN_PORT = %d and "
360 "TVIN_SIG_FMT = %d and "
361 "TVIN_TRANS_FMT = %d ;",
362 source_port, sig_fmt, mode);
363
364 rval = this->select(sqlmaster, c);
365
366 if (c.moveToFirst()) {
367 int index_TableName = 0;//c.getColumnIndex("TableName");
368 rval = getRegValuesByValue(c.getString(index_TableName), LEVEL_NAME, "", (int)nr_mode, 0, regs);
369 }
370 return rval;
371}
372
373int CPqData::PQ_GetXVYCCParams(vpp_xvycc_mode_t xvycc_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs, am_regs_t *regs_1)
374{
375 CSqlite::Cursor c;
376 char sqlmaster[256];
377 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
378 int rval = -1;
379
380 if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
381 if (source_port != TVIN_PORT_CVBS3) {
382 source_port = TVIN_PORT_CVBS1;
383 }
384 } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
385 source_port = TVIN_PORT_HDMI0;
386 } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
387 source_port = TVIN_PORT_MPEG0;
388 }
389
390 sprintf(sqlmaster, "select TableName from GeneralXVYCCTable where "
391 "TVIN_PORT = %d and "
392 "TVIN_SIG_FMT = %d and "
393 "TVIN_TRANS_FMT = %d ;",
394 source_port, sig_fmt, mode);
395
396 rval = this->select(sqlmaster, c);
397
398 if (c.moveToFirst()) {
399 int index_TableName = 0;//c.getColumnIndex("TableName");
400 rval = getRegValuesByValue_long(c.getString(index_TableName), LEVEL_NAME, "", (int)xvycc_mode, 0, regs, regs_1);
401 }
402 return rval;
403}
404
405int CPqData::PQ_GetMCDIParams(vpp_mcdi_mode_t mcdi_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, am_regs_t *regs)
406{
407 CSqlite::Cursor c;
408 char sqlmaster[256];
409 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
410 int rval = -1;
411
412 if (source_port >= TVIN_PORT_CVBS0 && source_port <= TVIN_PORT_CVBS7) {
413 if (source_port != TVIN_PORT_CVBS3) {
414 source_port = TVIN_PORT_CVBS1;
415 }
416 } else if (source_port >= TVIN_PORT_HDMI0 && source_port <= TVIN_PORT_HDMI7) {
417 source_port = TVIN_PORT_HDMI0;
418 } else if (source_port > TVIN_PORT_DTV || source_port < TVIN_PORT_NULL) {
419 source_port = TVIN_PORT_MPEG0;
420 }
421
422 sprintf(sqlmaster, "select TableName from GeneralMCDITable where "
423 "TVIN_PORT = %d and "
424 "TVIN_SIG_FMT = %d and "
425 "TVIN_TRANS_FMT = %d ;",
426 source_port, sig_fmt, mode);
427
428 rval = this->select(sqlmaster, c);
429
430 if (c.moveToFirst()) {
431 int index_TableName = 0;//c.getColumnIndex("TableName");
432 rval = getRegValuesByValue(c.getString(index_TableName), LEVEL_NAME, "", (int)mcdi_mode, 0, regs);
433 }
434 return rval;
435}
436
437int CPqData::PQ_GetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
438 tcon_rgb_ogo_t *params)
439{
440 CSqlite::Cursor c;
441 char sqlmaster[256];
442
443 int rval = -1;
444
445 //default
446 params->en = 1;
447 params->r_pre_offset = 0;
448 params->g_pre_offset = 0;
449 params->b_pre_offset = 0;
450 params->r_gain = 1024;
451 params->g_gain = 1024;
452 params->b_gain = 1024;
453 params->r_post_offset = 0;
454 params->g_post_offset = 0;
455 params->b_post_offset = 0;
456
457 sprintf(sqlmaster, "select TableName from GeneralWhiteBalanceTable where "
458 "TVIN_PORT = %d and "
459 "TVIN_SIG_FMT = %d and "
460 "TVIN_TRANS_FMT = %d;",
461 source_port, sig_fmt, trans_fmt);
462
463 rval = this->select(sqlmaster, c);
464
465 if (c.moveToFirst()) {
466 int index_TableName = 0;//c.getColumnIndex("TableName");
467 sprintf(sqlmaster, "select Enable, R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset from %s where "
468 "Level = %d and def = 0;", c.getString(index_TableName).string(), (int)Tempmode);
469
470 rval = this->select(sqlmaster, c);
471
472 if (c.moveToFirst()) {
473 params->en = c.getInt(0);//index 0
474 params->r_pre_offset = c.getInt(1);
475 params->g_pre_offset = c.getInt(2);
476 params->b_pre_offset = c.getInt(3);
477 params->r_gain = c.getInt(4);
478 params->g_gain = c.getInt(5);
479 params->b_gain = c.getInt(6);
480 params->r_post_offset = c.getInt(7);
481 params->g_post_offset = c.getInt(8);
482 params->b_post_offset = c.getInt(9);//index 9
483 }
484 }
485 return rval;
486}
487int CPqData::PQ_SetColorTemperatureParams(vpp_color_temperature_mode_t Tempmode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, tvin_trans_fmt_t trans_fmt,
488 tcon_rgb_ogo_t params)
489{
490 CSqlite::Cursor c;
491 char sqlmaster[256];
492 char sql[512];
493
494 int rval = -1;
495
496 sprintf(sqlmaster, "select TableName from GeneralWhiteBalanceTable where "
497 "TVIN_PORT = %d and "
498 "TVIN_SIG_FMT = %d and "
499 "TVIN_TRANS_FMT = %d;",
500 source_port, sig_fmt, trans_fmt);
501
502 rval = this->select(sqlmaster, c);
503
504 if (c.moveToFirst()) {
505 int index_TableName = 0;//c.getColumnIndex("TableName");
506 sprintf(sql, "update %s set Enable = %d, "
507 "R_Pre_Offset = %d, G_Pre_Offset = %d, B_Pre_Offset = %d, R_Gain = %d, G_Gain = %d, B_Gain = %d, "
508 "R_Post_Offset = %d, G_Post_Offset = %d, B_Post_Offset = %d where Level = %d and def = 0;", c.getString(index_TableName).string(),
509 params.en, params.r_pre_offset, params.g_pre_offset, params.b_pre_offset, params.r_gain, params.g_gain,
510 params.b_gain, params.r_post_offset, params.g_post_offset, params.b_post_offset, Tempmode);
511
512 rval = this->exeSql(sql);
513 }
514 return rval;
515}
516
517int CPqData::PQ_ResetAllColorTemperatureParams(void)
518{
519 CSqlite::Cursor c;
520 char sqlmaster[512];
521
522 int rval = -1;
523
524 sprintf(sqlmaster, "select distinct TableName from GeneralWhiteBalanceTable ;");
525
526 rval = this->select(sqlmaster, c);
527
528 if (c.moveToFirst()) {
529 int index_TableName = 0;//c.getColumnIndex("TableName");
530 do { //delete
531 sprintf(sqlmaster, "delete from %s where def = 0;"
532 "insert into %s( Level , Enable , R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset, def ) "
533 "select Level, Enable, R_Pre_Offset, G_Pre_Offset, B_Pre_Offset, R_Gain, G_Gain, B_Gain, R_Post_Offset, G_Post_Offset, B_Post_Offset, 0 from %s where def = 1;",
534 c.getString(index_TableName).string(), c.getString(index_TableName).string(), c.getString(index_TableName).string());
535 rval = this->exeSql(sqlmaster);
536 } while (c.moveToNext());
537 }
538 return rval;
539}
540
541int CPqData::PQ_GetDNLPParams(tvin_port_t source_port, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d,
542 tvin_trans_fmt_t trans_fmt, ve_dnlp_t *params, ve_dnlp_table_t *newParams, int *dnlpFlag)
543{
544 CSqlite::Cursor c;
545 char sqlmaster[256];
546 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
547 int rval = -1;
548 //default
549 params->en = 0;
550 params->rt = VE_DNLP_RT_0S;
551 params->rl = VE_DNLP_RL_01;
552 params->black = VE_DNLP_EXT_00;
553 params->white = VE_DNLP_EXT_00;
554
555 mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);//(status << 16)|trans_fmt;
556
557 sprintf(sqlmaster, "select TableName from GeneralDNLPTable where "
558 "TVIN_PORT = %d and "
559 "TVIN_SIG_FMT = %d and "
560 "TVIN_TRANS_FMT = %d ;",
561 source_port, fmt, mode);
562
563 rval = this->select(sqlmaster, c);
564
565 if (c.moveToFirst()) {
566 int index_TableName = 0;//c.getColumnIndex("TableName");
567 sprintf(sqlmaster, "select value from %s ", c.getString(index_TableName).string());
568
569 rval = this->select(sqlmaster, c);
570 int count = c.getCount();
571 if (count == 1) {
572 int val;
573 c.moveToFirst();
574 val = c.getInt(0);//index 0
575 *dnlpFlag = 0;
576 params->en = (val & 0xf0000000) >> 28;
577 params->rt = (ve_dnlp_rt_e)((val & 0x0f000000) >> 24);
578 params->rl = (ve_dnlp_rl_e)((val & 0x00ff0000) >> 16);
579 params->black = (ve_dnlp_ext_e)((val & 0x0000ff00) >> 8);
580 params->white = (ve_dnlp_ext_e)((val & 0x000000ff) >> 0);
581 } else if (count > 1) {
582 c.moveToFirst();
583 c.moveToNext();
584 *dnlpFlag = 1;
585 newParams->en = c.getInt(0);
586 c.moveToNext();
587 newParams->method = c.getInt(0);
588 c.moveToNext();
589 newParams->cliprate = c.getInt(0);
590 c.moveToNext();
591 newParams->lowrange = c.getInt(0);
592 c.moveToNext();
593 newParams->hghrange = c.getInt(0);
594 c.moveToNext();
595 newParams->lowalpha = c.getInt(0);
596 c.moveToNext();
597 newParams->midalpha = c.getInt(0);
598 c.moveToNext();
599 newParams->hghalpha = c.getInt(0);
600 }
601 }
602 return rval;
603}
604
605int CPqData::PQ_SetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
606{
607 return SetNonlinearMapping(TVPQ_DATA_BRIGHTNESS, source_type, osd0, osd25, osd50, osd75, osd100);
608}
609int CPqData::PQ_GetNoLineAllBrightnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
610{
611 int osdvalue[5] = {0};
612 int rval;
613 rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_BRIGHTNESS, source_type, osdvalue);
614 *osd0 = osdvalue[0];
615 *osd25 = osdvalue[1];
616 *osd50 = osdvalue[2];
617 *osd75 = osdvalue[3];
618 *osd100 = osdvalue[4];
619 if (rval) {
620 LOGE("PQ_GetNoLineAllBrightnessParams Error %d\n", rval);
621 }
622 return rval;
623
624}
625
626int CPqData::PQ_GetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
627{
628 int val;
629
630 GetNonlinearMapping(TVPQ_DATA_BRIGHTNESS, source_port, level, &val);
631 *params = CaculateLevelParam(pq_bri_data, bri_nodes, val);
632 return 0;
633
634}
635int CPqData::PQ_SetBrightnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
636{
637 return 0;
638}
639
640int CPqData::PQ_SetNoLineAllContrastParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
641{
642 return SetNonlinearMapping(TVPQ_DATA_CONTRAST, source_type, osd0, osd25, osd50, osd75, osd100);
643}
644int CPqData::PQ_GetNoLineAllContrastParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
645{
646 int osdvalue[5] = {0};
647 int rval;
648 rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_CONTRAST, source_type, osdvalue);
649 *osd0 = osdvalue[0];
650 *osd25 = osdvalue[1];
651 *osd50 = osdvalue[2];
652 *osd75 = osdvalue[3];
653 *osd100 = osdvalue[4];
654 if (rval) {
655 LOGE("PQ_GetNoLineAllContrastParams Error %d\n", rval);
656 }
657 return rval;
658}
659
660int CPqData::PQ_GetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
661{
662 int val;
663 GetNonlinearMapping(TVPQ_DATA_CONTRAST, source_port, level, &val);
664 *params = CaculateLevelParam(pq_con_data, con_nodes, val);
665 return 0;
666}
667int CPqData::PQ_SetContrastParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
668{
669 return 0;
670}
671
672int CPqData::PQ_SetNoLineAllSaturationParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
673{
674 return SetNonlinearMapping(TVPQ_DATA_SATURATION, source_type, osd0, osd25, osd50, osd75, osd100);
675}
676int CPqData::PQ_GetNoLineAllSaturationParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
677{
678 int osdvalue[5] = {0};
679 int rval;
680 rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_SATURATION, source_type, osdvalue);
681 *osd0 = osdvalue[0];
682 *osd25 = osdvalue[1];
683 *osd50 = osdvalue[2];
684 *osd75 = osdvalue[3];
685 *osd100 = osdvalue[4];
686 if (rval) {
687 LOGE("PQ_GetNoLineAllSaturationParams Error %d\n", rval);
688 }
689 return rval;
690}
691
692int CPqData::PQ_GetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
693{
694 int val;
695 GetNonlinearMapping(TVPQ_DATA_SATURATION, source_port, level, &val);
696 *params = CaculateLevelParam(pq_sat_data, sat_nodes, val);
697 return 0;
698}
699int CPqData::PQ_SetSaturationParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
700{
701 return 0;
702}
703
704int CPqData::PQ_SetNoLineAllHueParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
705{
706 return SetNonlinearMapping(TVPQ_DATA_HUE, source_type, osd0, osd25, osd50, osd75, osd100);
707}
708int CPqData::PQ_GetNoLineAllHueParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
709{
710 int osdvalue[5] = {0};
711 int rval;
712 rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_HUE, source_type, osdvalue);
713 *osd0 = osdvalue[0];
714 *osd25 = osdvalue[1];
715 *osd50 = osdvalue[2];
716 *osd75 = osdvalue[3];
717 *osd100 = osdvalue[4];
718 if (rval) {
719 LOGE("PQ_GetNoLineAllHueParams Error %d\n", rval);
720 }
721 return rval;
722}
723
724int CPqData::PQ_GetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int *params)
725{
726 int val;
727 GetNonlinearMapping(TVPQ_DATA_HUE, source_port, level, &val);
728 *params = CaculateLevelParam(pq_hue_data, hue_nodes, val);
729 return 0;
730}
731int CPqData::PQ_SetHueParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
732{
733 return 0;
734}
735
736int CPqData::PQ_SetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
737{
738 return SetNonlinearMapping(TVPQ_DATA_SHARPNESS, source_type, osd0, osd25, osd50, osd75, osd100);
739}
740int CPqData::PQ_GetNoLineAllSharpnessParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
741{
742 int osdvalue[5] = {0};
743 int rval;
744 rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_SHARPNESS, source_type, osdvalue);
745 *osd0 = osdvalue[0];
746 *osd25 = osdvalue[1];
747 *osd50 = osdvalue[2];
748 *osd75 = osdvalue[3];
749 *osd100 = osdvalue[4];
750 if (rval) {
751 LOGE("PQ_GetNoLineAllSharpnessParams Error %d\n", rval);
752 }
753 return rval;
754}
755
756int CPqData::PQ_GetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t *regs)
757{
758 int val;
759 GetNonlinearMapping(TVPQ_DATA_SHARPNESS, source_port, level, &val);
760 LOGD("val = %d\n", val);
761 *regs = CaculateLevelRegsParam(pq_sharpness_reg_data, val);
762 return 0;
763}
764int CPqData::PQ_GetPLLParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs)
765{
766 int ret = -1;
767 int i = 0;
768
769 ret = getRegValuesByValue(ADC_SETTING, PORT, FORMAT, source_port, sig_fmt, regs);
770#ifdef CPQDB_DEBUG
771 if (ret == 0) {
772 for (i = 0; i < regs->length; i++) {
773 LOGD("%s, =================================================", "TV");
774 LOGD("%s, regData.am_reg[%d].type = %d", "TV", i, regs->am_reg[i].type);
775 LOGD("%s, regData.am_reg[%d].addr = %d", "TV", i, regs->am_reg[i].addr);
776 LOGD("%s, regData.am_reg[%d].mask = %d", "TV", i, regs->am_reg[i].mask);
777 LOGD("%s, regData.am_reg[%d].val = %d", "TV", i, regs->am_reg[i].val);
778 }
779 }
780#endif
781 if (regs->am_reg[0].val == 0 && regs->am_reg[1].val == 0 && regs->am_reg[2].val == 0 && regs->am_reg[3].val == 0) {
782 LOGE("%s,db's value is all zeros, that's not OK!!!\n", "TV");
783 return -1;
784 }
785 return ret;
786}
787int CPqData::PQ_GetCVD2Params(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, am_regs_t *regs)
788{
789 int ret = -1;
790 int i = 0;
791 ret = getRegValuesByValue(CVD2_SETTING, PORT, FORMAT, source_port, sig_fmt, regs);
792#ifdef CPQDB_DEBUG
793 if (ret == 0) {
794 for (i = 0; i < regs->length; i++) {
795 LOGD("%s, =================================================", "TV");
796 LOGD("%s, regData.am_reg[%d].type = %d", "TV", i, regs->am_reg[i].type);
797 LOGD("%s, regData.am_reg[%d].addr = %d", "TV", i, regs->am_reg[i].addr);
798 LOGD("%s, regData.am_reg[%d].mask = %d", "TV", i, regs->am_reg[i].mask);
799 LOGD("%s, regData.am_reg[%d].val = %d", "TV", i, regs->am_reg[i].val);
800 }
801 }
802#endif
803 if (regs->am_reg[0].val == 0 && regs->am_reg[1].val == 0 && regs->am_reg[2].val == 0 && regs->am_reg[3].val == 0) {
804 LOGE("%s,db's value is all zeros, that's not OK!!!\n", "TV");
805 return -1;
806 }
807
808 return ret;
809}
810int CPqData::PQ_SetSharpnessParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, am_regs_t regs)
811{
812 return 0;
813}
814
815int CPqData::PQ_SetNoLineAllVolumeParams(tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
816{
817 return SetNonlinearMapping(TVPQ_DATA_VOLUME, source_type, osd0, osd25, osd50, osd75, osd100);
818}
819int CPqData::PQ_GetNoLineAllVolumeParams(tv_source_input_type_t source_type, int *osd0, int *osd25, int *osd50, int *osd75, int *osd100)
820{
821 int osdvalue[5] = {0};
822 int rval;
823 rval = GetNonlinearMappingByOSDFac(TVPQ_DATA_VOLUME, source_type, osdvalue);
824 *osd0 = osdvalue[0];
825 *osd25 = osdvalue[1];
826 *osd50 = osdvalue[2];
827 *osd75 = osdvalue[3];
828 *osd100 = osdvalue[4];
829 if (rval) {
830 LOGE("PQ_GetNoLineAllSharpnessParams Error %d\n", rval);
831 }
832 return rval;
833}
834
835int CPqData::PQ_SetVolumeParams(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int level, int params)
836{
837 return 0;
838}
839
840
841int CPqData::PQ_ResetAllNoLineParams(void)
842{
843 int rval;
844 char sqlmaster[256];
845 char *err = NULL;
846
847 sprintf(sqlmaster, "delete from NonlinearMapping; "
848 "insert into NonlinearMapping(TVIN_PORT, Item_ID, Level, Value) select TVIN_PORT, Item_ID, Level, Value from NonlinearMapping_Default;");
849
850 rval = this->exeSql(sqlmaster);
851 return rval;
852}
853
854
855int CPqData::PQ_GetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params)
856{
857 CSqlite::Cursor c;
858 char sqlmaster[256];
859 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
860 int rval = -1;
861
862 sprintf(sqlmaster, "select TableName from GeneralNoiseReductionTable where "
863 "TVIN_PORT = %d and "
864 "TVIN_SIG_FMT = %d and "
865 "TVIN_TRANS_FMT = %d ;",
866 source_port, sig_fmt, mode);
867
868 rval = this->select(sqlmaster, c);
869
870 if (c.moveToFirst()) {
871 int index_TableName = 0;//c.getColumnIndex("TableName");
872 sprintf(sqlmaster, "select NRValue from %s where NRLevel = %d;" , c.getString(index_TableName).string(), (int)nr_mode);
873
874 rval = this->select(sqlmaster, c);
875
876 if (c.moveToFirst()) {
877 *params = c.getInt(0);
878 }
879 }
880 return rval;
881}
882
883int CPqData::PQ_SetNoiseReductionParams(vpp_noise_reduction_mode_t nr_mode, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int *params)
884{
885 return 0;
886}
887
888int CPqData::PQ_GetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, vpp_display_mode_t dmode, tvin_cutwin_t *cutwin_t)
889{
890 CSqlite::Cursor c;
891 char sqlmaster[256];
892 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
893 int rval = -1;
894
895 cutwin_t->hs = 0;
896 cutwin_t->he = 0;
897 cutwin_t->vs = 0;
898 cutwin_t->ve = 0;
899
900 sprintf(sqlmaster, "select Hs, He, Vs, Ve from OVERSCAN where "
901 "TVIN_PORT = %d and "
902 "TVIN_SIG_FMT = %d and "
903 "TVIN_TRANS_FMT = %d ;",
904 source_type, fmt, mode);
905
906 rval = this->select(sqlmaster, c);
907
908 if (c.moveToFirst()) {
909 cutwin_t->hs = c.getInt(0);
910 cutwin_t->he = c.getInt(1);
911 cutwin_t->vs = c.getInt(2);
912 cutwin_t->ve = c.getInt(3);
913 }
914 return rval;
915}
916int CPqData::PQ_SetOverscanParams(tv_source_input_type_t source_type, tvin_sig_fmt_t fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, tvin_cutwin_t cutwin_t)
917{
918 CSqlite::Cursor c;
919 char sqlmaster[256];
920 int mode = is2dOr3d;//Check2Dor3D(status, trans_fmt);
921 int rval = -1;
922
923 sprintf(sqlmaster, "select * from OVERSCAN where TVIN_PORT = %d and TVIN_SIG_FMT = %d and TVIN_TRANS_FMT = %d;", source_type, fmt, mode);
924
925 rval = this->select(sqlmaster, c);
926
927 if (c.moveToFirst()) {
928 sprintf(sqlmaster, "update OVERSCAN set Hs = %d, He = %d, Vs = %d, Ve = %d where TVIN_PORT = %d and TVIN_SIG_FMT = %d and TVIN_TRANS_FMT = %d;",
929 cutwin_t.hs, cutwin_t.he, cutwin_t.vs, cutwin_t.ve, source_type, fmt, mode);
930 } else {
931 sprintf(sqlmaster, "Insert into OVERSCAN(TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, Hs, He, Vs, Ve) values(%d, %d, %d ,%d ,%d, %d, %d);",
932 source_type, fmt, mode, cutwin_t.hs, cutwin_t.he, cutwin_t.vs, cutwin_t.ve);
933 }
934 rval = this->exeSql(sqlmaster);
935
936 return rval;
937}
938
939int CPqData::PQ_ResetAllOverscanParams(void)
940{
941 int rval;
942 char sqlmaster[256];
943
944 sprintf(sqlmaster, "delete from OVERSCAN; insert into OVERSCAN(TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, hs, he, vs, ve) select TVIN_PORT, TVIN_SIG_FMT, TVIN_TRANS_FMT, hs, he, vs, ve from OVERSCAN_default;");
945 rval = this->exeSql(sqlmaster);
946
947 return rval;
948}
949
950int CPqData::PQ_GetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
951{
952 CSqlite::Cursor c;
953 char sqlmaster[256];
954
955 int rval = -1;
956
957 sprintf(sqlmaster, "select Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR from Picture_Mode where "
958 "TVIN_PORT = %d and "
959 "Mode = %d ;",
960 source_type, pq_mode);
961
962 rval = this->select(sqlmaster, c);
963
964 if (c.moveToFirst()) {
965 params->brightness = c.getInt(0);
966 params->contrast = c.getInt(1);
967 params->saturation = c.getInt(2);
968 params->hue = c.getInt(3);
969 params->sharpness = c.getInt(4);
970 params->backlight = c.getInt(5);
971 params->nr = c.getInt(6);
972 }
973 return rval;
974}
975int CPqData::PQ_SetPQModeParams(tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
976{
977 int rval;
978 char sql[256];
979
980 sprintf(sql, "update Picture_Mode set Brightness = %d, Contrast = %d, Saturation = %d, Hue = %d, Sharpness = %d, Backlight = %d, NR= %d "
981 " where TVIN_PORT = %d and Mode = %d;",
982 params->brightness, params->contrast, params->saturation,
983 params->hue, params->sharpness, params->backlight, params->nr,
984 source_type, pq_mode);
985 rval = this->exeSql(sql);
986 return 0;
987}
988
989int CPqData::PQ_SetPQModeParamsByName(const char *name, tv_source_input_type_t source_type, vpp_picture_mode_t pq_mode, vpp_pq_para_t *params)
990{
991 int rval;
992 char sql[256];
993
994 sprintf(sql, "insert into %s(TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR)"
995 " values(%d,%d,%d,%d,%d,%d,%d,%d,%d);", name, source_type, pq_mode, params->brightness, params->contrast, params->saturation,
996 params->hue, params->sharpness, params->backlight, params->nr);
997
998 rval = this->exeSql(sql);
999 return 0;
1000}
1001
1002int CPqData::PQ_ResetAllPQModeParams(void)
1003{
1004 int rval;
1005 char sqlmaster[256];
1006
1007 sprintf(sqlmaster, "delete from picture_mode; insert into picture_mode(TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR) select TVIN_PORT, Mode, Brightness, Contrast, Saturation, Hue, Sharpness, Backlight, NR from picture_mode_default;");
1008
1009 rval = this->exeSql(sqlmaster);
1010 return rval;
1011}
1012
1013int CPqData::PQ_GetGammaSpecialTable(int gammaValue, const char *f_name, tcon_gamma_table_t *gamma_value)
1014{
1015 CSqlite::Cursor c;
1016 char sqlmaster[256];
1017 int rval = -1;
1018
1019 sprintf(sqlmaster, "select %s from GAMMA_%d", f_name, gammaValue);
1020
1021 rval = this->select(sqlmaster, c);
1022
1023 if (c.moveToFirst()) {
1024 int index = 0;
1025 do {
1026 gamma_value->data[index] = c.getInt(0);
1027 index++;
1028 } while (c.moveToNext());
1029 }
1030 return rval;
1031}
1032
1033int CPqData::PQ_GetGammaTableR(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_r)
1034{
1035 return PQ_GetGammaTable(panel_id, source_port, fmt, "Red", gamma_r);
1036}
1037
1038int CPqData::PQ_GetGammaTableG(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_g)
1039{
1040 return PQ_GetGammaTable(panel_id, source_port, fmt, "Green", gamma_g);
1041}
1042
1043int CPqData::PQ_GetGammaTableB(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, tcon_gamma_table_t *gamma_b)
1044{
1045 return PQ_GetGammaTable(panel_id, source_port, fmt, "Blue", gamma_b);
1046}
1047
1048int CPqData::PQ_GetGammaTable(int panel_id, tvin_port_t source_port, tvin_sig_fmt_t fmt, const char *f_name, tcon_gamma_table_t *val)
1049{
1050 CSqlite::Cursor c;
1051 char sqlmaster[256];
1052
1053 int rval = -1;
1054
1055 sprintf(sqlmaster, "select TableName from GeneralGammaTable where "
1056 "TVIN_PORT = %d and "
1057 "TVIN_SIG_FMT = %d;",
1058 source_port, fmt);
1059
1060 rval = this->select(sqlmaster, c);
1061
1062 if (c.moveToFirst()) {
1063 int index_TableName = 0;//c.getColumnIndex("TableName");
1064 sprintf(sqlmaster, "select %s from %s;", f_name, c.getString(index_TableName).string());
1065
1066 rval = this->select(sqlmaster, c);
1067 if (c.moveToFirst()) {
1068 int index = 0;
1069 do {
1070 val->data[index] = c.getInt(0);
1071 index++;
1072 } while (c.moveToNext());
1073 }
1074 }
1075 return rval;
1076}
1077
1078
1079int CPqData::PQ_GetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t *adjparam)
1080{
1081 CSqlite::Cursor c;
1082 char sqlmaster[256];
1083 int rval = -1;
1084
1085 adjparam->clk_step = 0;
1086 adjparam->phase = 0;
1087 adjparam->hpos_step = 0;
1088 adjparam->vpos_step = 0;
1089 adjparam->vga_in_clean = 0;
1090
1091 sprintf(sqlmaster, "select Clk, Phase, HPos, VPos, Vga_in_clean from VGA_AutoParams where TVIN_SIG_FMT = %d", vga_fmt);
1092
1093 rval = this->select(sqlmaster, c);
1094
1095 if (c.moveToFirst()) {
1096 adjparam->clk_step = c.getInt(0);
1097 adjparam->phase = c.getInt(1);
1098 adjparam->hpos_step = c.getInt(2);
1099 adjparam->vpos_step = c.getInt(3);
1100 adjparam->vga_in_clean = c.getInt(4);
1101 }
1102 return rval;
1103}
1104int CPqData::PQ_SetVGAAjustPara(tvin_sig_fmt_t vga_fmt, tvafe_vga_parm_t adjparam)
1105{
1106 CSqlite::Cursor c;
1107 char sql[256];
1108 int rval = -1;
1109
1110 sprintf(sql, "select * from VGA_AutoParams where TVIN_SIG_FMT = %d;", vga_fmt);
1111
1112 rval = this->select(sql, c);
1113
1114 if (c.moveToFirst()) {
1115 sprintf(sql, "Insert into VGA_AutoParams(TVIN_SIG_FMT, Clk, Phase, HPos, VPos, Vga_in_clean) values(%d, %d, %d ,%d ,%d, %d);",
1116 vga_fmt, adjparam.clk_step, adjparam.phase, adjparam.hpos_step, adjparam.vpos_step, adjparam.vga_in_clean);
1117 } else {
1118 sprintf(sql, "update VGA_AutoParams set Clk = %d, Phase = %d, HPos = %d, VPos = %d, Vga_in_clean = %d where TVIN_SIG_FMT = %d;",
1119 adjparam.clk_step, adjparam.phase, adjparam.hpos_step, adjparam.vpos_step, adjparam.vga_in_clean, vga_fmt);
1120 }
1121 rval = this->exeSql(sql);
1122 return rval;
1123}
1124
1125int CPqData::CaculateLevelParam(tvpq_data_t *pq_data, int nodes, int level)
1126{
1127 int i;
1128
1129 for (i = 0; i < nodes; i++) {
1130 if (level < pq_data[i].IndexValue) {
1131 break;
1132 }
1133 }
1134
1135 if (i == 0) {
1136 return pq_data[i].RegValue;
1137 } else if (i == nodes) {
1138 return pq_data[i - 1].RegValue;
1139 } else {
1140 return pq_data[i - 1].RegValue + (level - pq_data[i - 1].IndexValue) * pq_data[i - 1].step;
1141 }
1142}
1143
1144am_regs_t CPqData::CaculateLevelRegsParam(tvpq_sharpness_regs_t *pq_regs, int level)
1145{
1146 am_regs_t regs;
1147 int i;
1148
1149 for (i = 0; i < sha_nodes; i++) {
1150 if (level < pq_regs[i].reg_data[0].IndexValue) {
1151 break;
1152 }
1153 }
1154
1155 if (i == 0) {
1156 regs.length = pq_regs[i].length;
1157 for (int j = 0; j < pq_regs[i].length; j++) {
1158 regs.am_reg[j].type = pq_regs[i].reg_data[j].Value.type;
1159 regs.am_reg[j].addr = pq_regs[i].reg_data[j].Value.addr;
1160 regs.am_reg[j].mask = pq_regs[i].reg_data[j].Value.mask;
1161 regs.am_reg[j].val = pq_regs[i].reg_data[j].Value.val;
1162 }
1163
1164 } else if (i == sha_nodes) {
1165 regs.length = pq_regs[i - 1].length;
1166 for (int j = 0; j < pq_regs[i - 1].length; j++) {
1167 regs.am_reg[j].type = pq_regs[i - 1].reg_data[j].Value.type;
1168 regs.am_reg[j].addr = pq_regs[i - 1].reg_data[j].Value.addr;
1169 regs.am_reg[j].mask = pq_regs[i - 1].reg_data[j].Value.mask;
1170 regs.am_reg[j].val = pq_regs[i - 1].reg_data[j].Value.val;
1171 }
1172 } else {
1173 regs.length = pq_regs[i - 1].length;
1174 for (int j = 0; j < pq_regs[i - 1].length; j++) {
1175 regs.am_reg[j].type = pq_regs[i - 1].reg_data[j].Value.type;
1176 regs.am_reg[j].addr = pq_regs[i - 1].reg_data[j].Value.addr;
1177 regs.am_reg[j].mask = pq_regs[i - 1].reg_data[j].Value.mask;
1178 regs.am_reg[j].val = pq_regs[i - 1].reg_data[j].Value.val + (level - pq_regs[i - 1].reg_data[j].IndexValue) * pq_regs[i - 1].reg_data[j].step;
1179 }
1180 }
1181
1182 return regs;
1183}
1184
1185
1186int CPqData::GetNonlinearMapping(tvpq_data_type_t data_type, tvin_port_t source_port, int level, int *params)
1187{
1188 CSqlite::Cursor c;
1189 char sqlmaster[256];
1190 int rval = -1;
1191
1192 tv_source_input_type_t type;
1193 //showboz
1194 type = CTvin::Tvin_SourcePortToSourceInputType(source_port);//???
1195
1196 sprintf(sqlmaster, "select Value from NonlinearMapping where "
1197 "TVIN_PORT = %d and "
1198 "Item_ID = %d and "
1199 "Level = %d ;",
1200 type, data_type, level);
1201
1202 rval = this->select(sqlmaster, c);
1203
1204 if (c.moveToFirst()) {
1205 *params = c.getInt(0);
1206 }
1207 return rval;
1208}
1209
1210int CPqData::GetNonlinearMappingByOSDFac(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int *params)
1211{
1212 CSqlite::Cursor c;
1213 char sqlmaster[256];
1214 int rval = -1;
1215
1216 sprintf(sqlmaster, "select Value from NonlinearMapping where "
1217 "TVIN_PORT = %d and "
1218 "Item_ID = %d and ("
1219 "Level = 0 or Level = 25 or Level = 50 or Level = 75 or Level = 100);",
1220 source_type, data_type);
1221
1222 rval = this->select(sqlmaster, c);
1223
1224 if (c.moveToFirst()) {
1225 params[0] = c.getInt(0);
1226 params[1] = c.getInt(1);
1227 params[2] = c.getInt(2);
1228 params[3] = c.getInt(3);
1229 params[4] = c.getInt(4);
1230 }
1231 return rval;
1232}
1233
1234int CPqData::SetNonlinearMapping(tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
1235{
1236
1237 int rval;
1238 char *err = NULL;
1239 int osdvalue[101];
1240 double step[4];
1241 char sql[256];
1242
1243 step[0] = (osd25 - osd0) / 25.0;
1244 step[1] = (osd50 - osd25) / 25.0;
1245 step[2] = (osd75 - osd50) / 25.0;
1246 step[3] = (osd100 - osd75) / 25.0;
1247
1248
1249 for (int i = 0; i <= 100; i++) {
1250 if (i == 0) {
1251 osdvalue[i] = osd0;
1252 } else if ((i > 0) && (i <= 25)) {
1253 osdvalue[i] = osd0 + (int)(i * step[0]);
1254 } else if ((i > 25) && (i <= 50)) {
1255 osdvalue[i] = osd25 + (int)((i - 25) * step[1]);
1256 } else if ((i > 50) && (i <= 75)) {
1257 osdvalue[i] = osd50 + (int)((i - 50) * step[2]);
1258 } else if ((i > 75) && (i <= 100)) {
1259 osdvalue[i] = osd75 + (int)((i - 75) * step[3]);
1260 }
1261 sprintf(sql, "update NonLinearMapping set Value = %d where TVIN_PORT = %d and Item_ID = %d and Level = %d ;", osdvalue[i], source_type, data_type, i);
1262 if (!(this->exeSql(sql))) {
1263 return -1;
1264 }
1265 }
1266 return 0;
1267}
1268
1269int CPqData::SetNonlinearMappingByName(const char *name, tvpq_data_type_t data_type, tv_source_input_type_t source_type, int osd0, int osd25, int osd50, int osd75, int osd100)
1270{
1271 int rval;
1272 char *err = NULL;
1273 int osdvalue[101];
1274 double step[4];
1275 char sql[256];
1276
1277 step[0] = (osd25 - osd0) / 25.0;
1278 step[1] = (osd50 - osd25) / 25.0;
1279 step[2] = (osd75 - osd50) / 25.0;
1280 step[3] = (osd100 - osd75) / 25.0;
1281
1282 for (int i = 0; i <= 100; i++) {
1283 if (i == 0) {
1284 osdvalue[i] = osd0;
1285 } else if ((i > 0) && (i <= 25)) {
1286 osdvalue[i] = osd0 + (int)(i * step[0]);
1287 } else if ((i > 25) && (i <= 50)) {
1288 osdvalue[i] = osd25 + (int)((i - 25) * step[1]);
1289 } else if ((i > 50) && (i <= 75)) {
1290 osdvalue[i] = osd50 + (int)((i - 50) * step[2]);
1291 } else if ((i > 75) && (i <= 100)) {
1292 osdvalue[i] = osd75 + (int)((i - 75) * step[3]);
1293 }
1294 memset(sql, '\0', 256);
1295 sprintf(sql, "insert into %s(TVIN_PORT, Item_ID, Level, Value) values(%d,%d,%d,%d);", name, source_type, data_type, i, osdvalue[i]);
1296 if (!(this->exeSql(sql))) {
1297 return -1;
1298 }
1299 }
1300 return 0;
1301}
1302
1303int CPqData::LoadPQData(tvpq_data_type_t data_type, tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag)
1304{
1305 CSqlite::Cursor c;
1306 int rval;
1307 char sqlmaster[256];
1308 int mode = is2dOr3d;
1309 tvpq_data_t *pq_data = NULL;
1310 int *pq_nodes = NULL;
1311
1312 switch (data_type) {
1313 case TVPQ_DATA_BRIGHTNESS:
1314 sprintf(sqlmaster, "select TableName from GeneralContrastBrightnessTable where "
1315 "TVIN_PORT = %d and "
1316 "TVIN_SIG_FMT = %d and "
1317 "TVIN_TRANS_FMT = %d and "
1318 "%s = %d;",
1319 source_port, sig_fmt, mode, ID_FIELD, BRIGHTNESS_ID);
1320 pq_data = pq_bri_data;
1321 pq_nodes = &bri_nodes;
1322 break;
1323 case TVPQ_DATA_CONTRAST:
1324 sprintf(sqlmaster, "select TableName from GeneralContrastBrightnessTable where "
1325 "TVIN_PORT = %d and "
1326 "TVIN_SIG_FMT = %d and "
1327 "TVIN_TRANS_FMT = %d and "
1328 "%s = %d;",
1329 source_port, sig_fmt, mode, ID_FIELD, CONTRAST_ID);
1330 pq_data = pq_con_data;
1331 pq_nodes = &con_nodes;
1332 break;
1333 case TVPQ_DATA_HUE:
1334 sprintf(sqlmaster, "select TableName from GeneralSaturationHueTable where "
1335 "TVIN_PORT = %d and "
1336 "TVIN_SIG_FMT = %d and "
1337 "TVIN_TRANS_FMT = %d and "
1338 "%s = %d;",
1339 source_port, sig_fmt, mode, ID_FIELD, HUE_ID);
1340 pq_data = pq_hue_data;
1341 pq_nodes = &hue_nodes;
1342 break;
1343 case TVPQ_DATA_SATURATION:
1344 sprintf(sqlmaster, "select TableName from GeneralSaturationHueTable where "
1345 "TVIN_PORT = %d and "
1346 "TVIN_SIG_FMT = %d and "
1347 "TVIN_TRANS_FMT = %d and "
1348 "%s = %d;",
1349 source_port, sig_fmt, mode, ID_FIELD, SATURATION_ID);
1350 pq_data = pq_sat_data;
1351 pq_nodes = &sat_nodes;
1352 break;
1353 case TVPQ_DATA_SHARPNESS:
1354 //sprintf(sqlmaster, "select TableName from GeneralSharpnessTable where "
1355 sprintf(sqlmaster, "select TableName from GeneralSharpnessG9Table where "
1356 "TVIN_PORT = %d and "
1357 "TVIN_SIG_FMT = %d and "
1358 "TVIN_TRANS_FMT = %d and "
1359 "%s = %d;",
1360 source_port, sig_fmt, mode, ID_FIELD, SHARPNESS_ID);
1361 pq_data = NULL;
1362 pq_nodes = &sha_nodes;
1363 break;
1364 default:
1365 break;
1366 }
1367
1368 rval = this->select(sqlmaster, c);
1369
1370 if (c.moveToFirst()) {
1371 switch (data_type) {
1372 case TVPQ_DATA_BRIGHTNESS:
1373 case TVPQ_DATA_CONTRAST:
1374 case TVPQ_DATA_HUE:
1375 case TVPQ_DATA_SATURATION:
1376 sprintf(sqlmaster, "select TotalNode, NodeNumber, IndexValue, RegValue, StepUp from %s order by NodeNumber asc;", c.getString(0).string());
1377 break;
1378 case TVPQ_DATA_SHARPNESS:
1379 sprintf(sqlmaster, "select TotalNode, NodeNumber, RegType, RegAddr, RegMask, IndexValue, RegValue, StepUp from %s order by NodeNumber asc;", c.getString(0).string());
1380 break;
1381 default:
1382 break;
1383 }
1384 }
1385
1386 rval = this->select(sqlmaster, c);
1387
1388 if (c.moveToFirst()) {
1389 if (data_type == TVPQ_DATA_SHARPNESS) {
1390 *pq_nodes = c.getInt(0);//TotalNode?
1391 int length = c.getCount() / (*pq_nodes);
1392 int index = 0;
1393 for (int i = 0; i < *pq_nodes; i++) {
1394 pq_sharpness_reg_data[i].length = length;
1395 }
1396 do {
1397 pq_sharpness_reg_data[index / length].reg_data[index % length].TotalNode = c.getInt(0);
1398 pq_sharpness_reg_data[index / length].reg_data[index % length].NodeValue = c.getInt(1);
1399 pq_sharpness_reg_data[index / length].reg_data[index % length].Value.type = c.getUInt(2);
1400 pq_sharpness_reg_data[index / length].reg_data[index % length].Value.addr = c.getUInt(3);
1401 pq_sharpness_reg_data[index / length].reg_data[index % length].Value.mask = c.getUInt(4);
1402 pq_sharpness_reg_data[index / length].reg_data[index % length].IndexValue = c.getInt(5);
1403 pq_sharpness_reg_data[index / length].reg_data[index % length].Value.val = c.getUInt(6);
1404 pq_sharpness_reg_data[index / length].reg_data[index % length].step = c.getF(7);
1405 index++;
1406 } while (c.moveToNext());
1407 } else {
1408 int index = 0;
1409 do {
1410 pq_data[index].TotalNode = c.getInt(0);
1411 pq_data[index].NodeValue = c.getInt(1);
1412 pq_data[index].IndexValue = c.getInt(2);
1413 pq_data[index].RegValue = c.getInt(3);
1414 pq_data[index].step = c.getF(4);
1415 if (flag == 1) {
1416 if (data_type == TVPQ_DATA_BRIGHTNESS) {
1417 LOGD("%s, bri pq_data[%d].RegValue = %d\n", "TV", index, pq_data[index].RegValue);
1418 pq_data[index].RegValue -= 64;
1419 LOGD("%s, bri pq_data[%d].RegValue + 64 = %d\n", "TV", index, pq_data[index].RegValue);
1420 } else if (data_type == TVPQ_DATA_CONTRAST) {
1421 LOGD("%s, con pq_data[%d].RegValue = %d\n", "TV", index, pq_data[index].RegValue);
1422 pq_data[index].RegValue += 64;
1423 LOGD("%s, con pq_data[%d].RegValue + 64 = %d\n", "TV", index, pq_data[index].RegValue);
1424 }
1425 }
1426 index++;
1427 } while (c.moveToNext());
1428 *pq_nodes = index;
1429 }
1430 }
1431
1432 return rval;
1433}
1434
1435int CPqData::LoadAllPQData(tvin_port_t source_port, tvin_sig_fmt_t sig_fmt, is_3d_type_t is2dOr3d, tvin_trans_fmt_t trans_fmt, int flag)
1436{
1437 int rval = -1;
1438 rval = LoadPQData(TVPQ_DATA_BRIGHTNESS, source_port, sig_fmt, is2dOr3d, trans_fmt, flag);
1439 if (rval) {
1440 return rval;
1441 }
1442 rval = LoadPQData(TVPQ_DATA_CONTRAST, source_port, sig_fmt, is2dOr3d, trans_fmt, flag);
1443 if (rval) {
1444 return rval;
1445 }
1446 rval = LoadPQData(TVPQ_DATA_SATURATION, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
1447 if (rval) {
1448 return rval;
1449 }
1450 rval = LoadPQData(TVPQ_DATA_HUE, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
1451 if (rval) {
1452 return rval;
1453 }
1454 rval = LoadPQData(TVPQ_DATA_SHARPNESS, source_port, sig_fmt, is2dOr3d, trans_fmt, -1);
1455 if (rval) {
1456 return rval;
1457 }
1458 return rval;
1459}
1460
1461typedef enum initial_type_e {
1462 TYPE_PMode = 0,
1463 TYPE_PMode_Default,
1464 TYPE_Nonlinear,
1465 TYPE_NonLinear_Default,
1466 TYPE_VGA_AUTO,
1467 TYPE_OVERSCAN,
1468} initial_type_t;
1469
1470const char *Pmode_name[6] = {
1471 "Picture_Mode",
1472 "Picture_Mode_Default",
1473 "NonlinearMapping",
1474 "NonlinearMapping_Default",
1475 "VGA_AutoParams",
1476 "OVERSCAN"
1477};
1478
1479void CPqData::initialTable(int type)
1480{
1481 vpp_pq_para_t pmode_default;
1482
1483 pmode_default.backlight = 100;
1484 pmode_default.brightness = 50;
1485 pmode_default.contrast = 50;
1486 pmode_default.hue = 50;
1487 pmode_default.nr = 0;
1488 pmode_default.saturation = 50;
1489 pmode_default.sharpness = 50;
1490
1491
1492 switch (type) {
1493 case TYPE_PMode:
1494 case TYPE_PMode_Default:
1495 for (int i = 0; i < 6; i++ ) {
1496 for (int j = 0; j < 4; j++) {
1497 PQ_SetPQModeParamsByName(Pmode_name[type], (tv_source_input_type_t) i, (vpp_picture_mode_t)j, &pmode_default);
1498 }
1499 }
1500 break;
1501 case TYPE_Nonlinear:
1502 case TYPE_NonLinear_Default:
1503 for (int i = 0; i < 6; i++ ) {
1504 for (int j = 0; j < 5; j++) {
1505 SetNonlinearMappingByName(Pmode_name[type], (tvpq_data_type_t) j, (tv_source_input_type_t)i, 0, (int)255 / 4.0, (int)255 * 2 / 4.0, (int)255 * 3 / 4.0, 255);
1506 }
1507 }
1508 break;
1509 case TYPE_VGA_AUTO:
1510 break;
1511 case TYPE_OVERSCAN:
1512 break;
1513 }
1514}
1515
1516int CPqData::PQ_GetPhaseArray(am_phase_t *am_phase)
1517{
1518 CSqlite::Cursor c;
1519 int iOutRet = 0;
1520 char sqlmaster[256];
1521 sprintf(sqlmaster, "select Phase from Phase order by Format ASC; ");
1522
1523 this->select(sqlmaster, c);
1524 int nums = 0;
1525 am_phase->length = c.getCount();
1526 if (c.moveToFirst()) {
1527 do {
1528 am_phase->phase[nums] = c.getInt(0);//col index is 0[Phase]
1529 nums++;
1530 } while (c.moveToNext());
1531 }
1532 //
1533 return nums;
1534}
1535
1536