Files
2026-08-24 10:03:24 +08:00

238 lines
5.8 KiB
C++

/*
* Copyright (c) 2014 Amlogic, Inc. All rights reserved.
*
* This source code is subject to the terms and conditions defined in the
* file 'LICENSE' which is part of this source code package.
*
* Description: c++ file
*/
#define LOG_MODULE_TAG "PQ"
#define LOG_CLASS_TAG "WhitebalanceDataBase"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include "WhitebalanceDataBase.h"
#include "CPQLog.h"
#include "CConfigFile.h"
#define WHITE_BALANCE_TABLE_NAME "WHITE_BALANCE_TABLE"
#define KEY_WHITE_BALANCE "KEY_WHITE_BALANCE"
#define KEY_WHITE_BALANCE_GAMMA "KEY_WHITE_BALANCE_GAMMA"
#define KEY_GAMMA_TABLE "KEY_GAMMA_TABLE"
#define WHITEBALANCE_DEFAULT_PATH "/vendor/etc/tvconfig/pq"
static char mFilePath[64] = "\0";
WhitebalanceDataBase *WhitebalanceDataBase::mInstance = NULL;
WhitebalanceDataBase *WhitebalanceDataBase::GetInstance()
{
if (NULL == mInstance) {
mInstance = new WhitebalanceDataBase();
}
return mInstance;
}
WhitebalanceDataBase::WhitebalanceDataBase()
{
Init();
}
WhitebalanceDataBase::~WhitebalanceDataBase()
{
}
int WhitebalanceDataBase::Init(void)
{
static char wb_path[128] = "\0";
const char *config_value = NULL;
if (strlen(mFilePath) > 0) {
config_value = mFilePath;
} else {
config_value = CConfigFile::GetInstance()->GetString(CFG_SECTION_PQ, CFG_PQ_WHITEBALANCE_FILE_PATH, WHITEBALANCE_DEFAULT_PATH);
}
if (config_value == NULL) {
LOGE("%s config_value is NULL\n",__FUNCTION__);
return -1;
}
snprintf(wb_path, sizeof(wb_path), "%s/WHITE_BALANCE", config_value);
LOGD("%s wb_path Path: %s\n",__FUNCTION__, wb_path);
closeDb();
if (CreateNewDB(wb_path) != true) {
LOGE("%s CreateNewDB fail!\n", wb_path);
return -1;
}
return 0;
}
int WhitebalanceDataBase::closePqDB(void)
{
return closeDb();
}
int WhitebalanceDataBase::reopenDB(const char *db_path)
{
int rval = openDb(db_path);
return rval;
}
bool WhitebalanceDataBase::CreateNewDB(const char *db_path)
{
if (openDb(db_path) != 0) {
LOGE("%s Create db file fail, check path is exist!\n",__FUNCTION__);
closeDb();
return false;
}
if (CreateTable(WHITE_BALANCE_TABLE_NAME) != true) {
LOGE("%s Create table %s fail!\n",__FUNCTION__, WHITE_BALANCE_TABLE_NAME);
return false;
}
return true;
}
bool WhitebalanceDataBase::CreateTable(const char *TableName)
{
char key[128];
snprintf(key, sizeof(key), "CREATE TABLE IF NOT EXISTS %s(Key TEXT PRIMARY KEY, Value BLOB)", TableName);
if (exeSql(key) != true) {
LOGE("%s CREATE SQL: %s fail!\n",__FUNCTION__, key);
return false;
}
//for get
char key_get[128];
snprintf(key_get, sizeof(key_get), "SELECT Value FROM %s WHERE Key=?", TableName);
PrepareSqlSelect(key_get);
//for set
char key_set[128];
snprintf(key_set, sizeof(key_set), "REPLACE INTO %s(Key,Value) VALUES(?,?)", TableName);
PrepareSqlUpdate(key_set);
return true;
}
bool WhitebalanceDataBase::SetWhiteBalanceFilePath(char *path)
{
if (path == NULL) {
return false;
}
snprintf(mFilePath, sizeof(mFilePath), "%s", path);
return true;
}
bool WhitebalanceDataBase::SetSyncData(void *pData, int iSize)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s", "SYNC_DATA_INFO");
return SetBlobValueToTable(key, pData, iSize);
}
bool WhitebalanceDataBase::GetSyncData(void *pData, int iSize)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s", "SYNC_DATA_INFO");
return GetBlobValueFromTable(key, pData, iSize);
}
bool WhitebalanceDataBase::SetRGBGainOffsetData(COLORTEMP_DATA *pData, int level, int src, int timing)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s_%d_%d_%d", KEY_WHITE_BALANCE, src, timing, level);
return SetBlobValueToTable(key, (void *)pData, sizeof(COLORTEMP_DATA));
}
bool WhitebalanceDataBase::GetRGBGainOffsetData(COLORTEMP_DATA *pData, int level, int src, int timing)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s_%d_%d_%d", KEY_WHITE_BALANCE, src, timing, level);
return GetBlobValueFromTable(key, (void *)pData, sizeof(COLORTEMP_DATA));
}
bool WhitebalanceDataBase::SetWhitebalanceGammaData(GAMMA_OFFSET_DATA *pData, int level, int mode, int src, int timing)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s_%d_%d_%d_%d", KEY_WHITE_BALANCE_GAMMA, src, timing, level, mode);
return SetBlobValueToTable(key, (void *)pData, sizeof(GAMMA_OFFSET_DATA));
}
bool WhitebalanceDataBase::GetWhitebalanceGammaData(GAMMA_OFFSET_DATA *pData, int level, int mode, int src, int timing)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s_%d_%d_%d_%d", KEY_WHITE_BALANCE_GAMMA, src, timing, level, mode);
return GetBlobValueFromTable(key, (void *)pData, sizeof(GAMMA_OFFSET_DATA));
}
bool WhitebalanceDataBase::SetGammaTableData(tcon_gamma_table_t *pData, int level, int type)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s_%d_%d", KEY_GAMMA_TABLE, level, type);
return SetBlobValueToTable(key, (void *)pData, sizeof(tcon_gamma_table_t));
}
bool WhitebalanceDataBase::GetGammaTableData(tcon_gamma_table_t *pData, int level, int type)
{
if (pData == NULL) {
return false;
}
char key[64];
snprintf(key, sizeof(key), "%s_%d_%d", KEY_GAMMA_TABLE, level, type);
return GetBlobValueFromTable(key, (void *)pData, sizeof(tcon_gamma_table_t));
}