summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--Android.mk14
-rw-r--r--screen_source/Android.mk31
-rw-r--r--screen_source/aml_screen.cpp296
-rw-r--r--screen_source/v4l2_vdin.cpp676
-rw-r--r--screen_source/v4l2_vdin.h144
-rw-r--r--tv_callback.h18
-rw-r--r--tv_input.cpp263
-rw-r--r--tvapi/android/Android.mk2
-rw-r--r--tvapi/android/include/ITv.h98
-rw-r--r--tvapi/android/include/ITvClient.h56
-rw-r--r--tvapi/android/include/ITvService.h66
-rw-r--r--tvapi/android/include/Tv.h158
-rw-r--r--tvapi/android/include/tvcmd.h1212
-rw-r--r--tvapi/android/jni/Android.mk135
-rw-r--r--tvapi/android/jni/cfbc_jni.cpp18
-rw-r--r--tvapi/android/jni/cfbc_test.cpp86
-rw-r--r--tvapi/android/jni/com_droidlogic_app_tv_TvControlManager.cpp (renamed from tvapi/android/jni/android_amlogic_tv.cpp)929
-rw-r--r--tvapi/android/libtvbinder/Android.mk48
-rw-r--r--tvapi/android/libtvbinder/ITv.cpp292
-rw-r--r--tvapi/android/libtvbinder/ITvClient.cpp116
-rw-r--r--tvapi/android/libtvbinder/ITvService.cpp100
-rw-r--r--tvapi/android/libtvbinder/Tv.cpp378
-rw-r--r--tvapi/android/tv/Android.mk23
-rw-r--r--tvapi/android/tv/CTv.cpp104
-rw-r--r--tvapi/android/tv/CTv.h54
-rw-r--r--tvapi/android/tvserver/Android.mk164
-rw-r--r--tvapi/android/tvserver/TvService.cpp8911
-rw-r--r--tvapi/android/tvserver/TvService.h170
-rw-r--r--tvapi/android/tvserver/main.cpp46
-rw-r--r--tvapi/android/tvserver/tv_callback.h18
-rw-r--r--[-rwxr-xr-x]tvapi/build/include/.gitignore0
-rw-r--r--tvapi/build/include/xxxconfig.h1
-rw-r--r--tvapi/docs/tv.uml12156
-rw-r--r--tvapi/libtv/Android.mk12
-rw-r--r--tvapi/libtv/audio/CAudioCustomerCtrl.cpp126
-rw-r--r--tvapi/libtv/audio/CAudioCustomerCtrl.h31
-rw-r--r--tvapi/libtv/audio/CTvAudio.cpp30
-rw-r--r--tvapi/libtv/audio/CTvAudio.h76
-rw-r--r--tvapi/libtv/audio/audio_alsa.cpp2073
-rw-r--r--tvapi/libtv/audio/audio_alsa.h257
-rw-r--r--tvapi/libtv/audio/audio_android.cpp1035
-rw-r--r--tvapi/libtv/audio/audio_android.h78
-rw-r--r--tvapi/libtv/audio/audio_android_effect.cpp591
-rw-r--r--tvapi/libtv/audio/audio_android_effect.h65
-rw-r--r--tvapi/libtv/audio/audio_api.cpp2470
-rw-r--r--tvapi/libtv/audio/audio_api.h323
-rw-r--r--tvapi/libtv/audio/audio_effect.cpp356
-rw-r--r--tvapi/libtv/audio/audio_effect.h58
-rw-r--r--tvapi/libtv/include/amstream.h526
-rw-r--r--tvapi/libtv/include/amvecm.h136
-rw-r--r--tvapi/libtv/include/cm.h308
-rw-r--r--tvapi/libtv/include/hdmirx_cec.h316
-rw-r--r--tvapi/libtv/include/ve.h461
-rw-r--r--tvapi/libtv/tv/AutoBackLight.cpp425
-rw-r--r--tvapi/libtv/tv/CAutoPQparam.cpp150
-rw-r--r--tvapi/libtv/tv/CAutoPQparam.h41
-rw-r--r--tvapi/libtv/tv/CAv.cpp116
-rw-r--r--tvapi/libtv/tv/CAv.h24
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.cpp443
-rw-r--r--tvapi/libtv/tv/CFbcCommunication.h25
-rw-r--r--tvapi/libtv/tv/CFrontEnd.cpp198
-rw-r--r--tvapi/libtv/tv/CFrontEnd.h19
-rw-r--r--tvapi/libtv/tv/CTv.cpp13003
-rw-r--r--tvapi/libtv/tv/CTv.h1453
-rw-r--r--tvapi/libtv/tv/CTvBooking.cpp324
-rw-r--r--tvapi/libtv/tv/CTvBooking.h166
-rw-r--r--tvapi/libtv/tv/CTvEpg.cpp24
-rw-r--r--tvapi/libtv/tv/CTvEv.h12
-rw-r--r--tvapi/libtv/tv/CTvLog.h8
-rw-r--r--tvapi/libtv/tv/CTvRecord.cpp552
-rw-r--r--tvapi/libtv/tv/CTvRecord.h92
-rw-r--r--tvapi/libtv/tv/CTvSatellite.h42
-rw-r--r--tvapi/libtv/tv/CTvScanner.cpp335
-rw-r--r--tvapi/libtv/tv/CTvScanner.h26
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.cpp1279
-rw-r--r--tvapi/libtv/tv/CTvScreenCapture.h351
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.cpp361
-rw-r--r--tvapi/libtv/tv/CTvSubtitle.h484
-rw-r--r--tvapi/libtv/tv/CTvVchipCheck.cpp6
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.cpp4
-rw-r--r--tvapi/libtv/tv/CUpgradeFBC.h282
-rw-r--r--tvapi/libtv/tv/ScreenCatch.cpp379
-rw-r--r--tvapi/libtv/tvconfig/CIniFile.cpp706
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.conf58
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.cpp106
-rw-r--r--tvapi/libtv/tvconfig/tvconfig.h40
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.cpp694
-rw-r--r--tvapi/libtv/tvdb/CTvChannel.h574
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.cpp25
-rw-r--r--tvapi/libtv/tvdb/CTvDatabase.h188
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.cpp86
-rw-r--r--tvapi/libtv/tvdb/CTvDimension.h194
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.cpp483
-rw-r--r--tvapi/libtv/tvdb/CTvEvent.h170
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.cpp88
-rw-r--r--tvapi/libtv/tvdb/CTvGroup.h60
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.cpp1806
-rw-r--r--tvapi/libtv/tvdb/CTvProgram.h1066
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.cpp366
-rw-r--r--tvapi/libtv/tvdb/CTvRegion.h84
-rw-r--r--tvapi/libtv/tvin/CHDMIRxCEC.cpp38
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.cpp478
-rw-r--r--tvapi/libtv/tvin/CSourceConnectDetect.h73
-rw-r--r--tvapi/libtv/tvin/CTvin.cpp203
-rw-r--r--tvapi/libtv/tvin/CTvin.h191
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.cpp54
-rw-r--r--tvapi/libtv/tvsetting/CBlobDevice.h100
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.cpp403
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceE2prom.h152
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.cpp160
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceFile.h52
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.cpp258
-rw-r--r--tvapi/libtv/tvsetting/CBlobDeviceRam.h74
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.cpp4658
-rw-r--r--tvapi/libtv/tvsetting/CTvSetting.h30
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingCfg.h782
-rw-r--r--tvapi/libtv/tvsetting/CTvSettingDeviceFactory.cpp10
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.cpp2726
-rw-r--r--tvapi/libtv/tvsetting/TvKeyData.h64
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.cpp2575
-rw-r--r--tvapi/libtv/tvsetting/audio_cfg.h239
-rw-r--r--tvapi/libtv/tvutils/CCondition.h2
-rw-r--r--tvapi/libtv/tvutils/CFile.cpp65
-rw-r--r--tvapi/libtv/tvutils/CFile.h3
-rw-r--r--tvapi/libtv/tvutils/CHdmiCecCmd.cpp2
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.cpp31
-rw-r--r--tvapi/libtv/tvutils/CMsgQueue.h3
-rw-r--r--tvapi/libtv/tvutils/CSerialCommunication.h96
-rw-r--r--tvapi/libtv/tvutils/CSerialPort.cpp18
-rw-r--r--tvapi/libtv/tvutils/CSqlite.cpp8
-rw-r--r--tvapi/libtv/tvutils/CSqlite.h12
-rw-r--r--tvapi/libtv/tvutils/CThread.cpp2
-rw-r--r--tvapi/libtv/tvutils/CTvInput.cpp25
-rw-r--r--tvapi/libtv/tvutils/CTvInput.h4
-rw-r--r--tvapi/libtv/tvutils/serial_base.h34
-rw-r--r--tvapi/libtv/tvutils/serial_operate.cpp66
-rw-r--r--tvapi/libtv/tvutils/serial_operate.h70
-rw-r--r--tvapi/libtv/tvutils/tvutils.cpp3931
-rw-r--r--tvapi/libtv/tvutils/tvutils.h222
-rw-r--r--tvapi/libtv/tvutils/zepoll.cpp2
-rw-r--r--tvapi/libtv/version/version.cpp188
-rw-r--r--tvapi/libtv/version/version.h22
-rw-r--r--tvapi/libtv/vpp/CPQdb.cpp3509
-rw-r--r--tvapi/libtv/vpp/CPQdb.h340
-rw-r--r--tvapi/libtv/vpp/CVpp.cpp5602
-rw-r--r--tvapi/libtv/vpp/CVpp.h230
-rw-r--r--tvapi/tvtests/Android.mk98
-rw-r--r--tvapi/tvtests/android_tvtest.cpp2
-rw-r--r--tvapi/tvtests/comm_test.cpp4
-rw-r--r--tvapi/tvtests/ssm_test.cpp420
-rw-r--r--tvapi/tvtests/tvconfig_test.cpp854
151 files changed, 45277 insertions, 47437 deletions
diff --git a/tvapi/libtv/tvin/CTvin.cpp b/tvapi/libtv/tvin/CTvin.cpp
index 4f27455..66a2a1f 100644
--- a/tvapi/libtv/tvin/CTvin.cpp
+++ b/tvapi/libtv/tvin/CTvin.cpp
@@ -20,6 +20,7 @@
#include "../tvsetting/CTvSetting.h"
#include "../tvutils/tvutils.h"
#include "../tvconfig/tvconfig.h"
+#include "CFbcCommunication.h"
#ifdef LOG_TAG
@@ -460,7 +461,7 @@ int CTvin::VDIN_GetSignalInfo ( struct tvin_info_s *SignalInfo )
if ( rt < 0 ) {
LOGW ( "Vdin get signal info, error(%s), ret = %d.\n", strerror ( errno ), rt );
- system("reboot");
+ //system("reboot");
}
return rt;
@@ -531,20 +532,14 @@ int CTvin::VDIN_GetDisplayVFreq (void)
memset(buf, 0, sizeof(buf));
read(fd, buf, sizeof(buf));
close(fd);
- if(strncmp("4k2k50hz420", buf, 11) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----1.\n", buf);
+ LOGD( "s%, VDIN_GetDisplayVFreq is %s\n", __FUNCTION__, buf);
+ if (strstr(buf, "50hz") != NULL) {
return 50;
- } else if (strncmp("4k2k60hz420", buf, 11) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----2.\n", buf);
+ } else if (strstr(buf, "60hz") != 0) {
return 60;
- } else if (strncmp("1080p", buf, 5) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----3.\n", buf);
- return 60;
- } else if (strncmp("4k2k30hz", buf, 8) == 0) {
- LOGD("VDIN_GetDisplayVFreq (%s)----4.\n", buf);
- return 30;
+ } else {
+ return 50;
}
- return 50;
}
int CTvin::VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc)
@@ -552,6 +547,17 @@ int CTvin::VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc)
FILE *fp = NULL;
const char *config_value = NULL;
static int display_mode_type = -1;
+ CFbcCommunication *pFBC = NULL;
+ static int last_freq = 50;
+
+ last_freq = VDIN_GetDisplayVFreq();
+ if (last_freq == freq) {
+ LOGD ( "%s, same freq, last_freq = %d, freq = %d.", __FUNCTION__, last_freq, freq);
+ return 0;
+ } else {
+ LOGD ( "%s, from last_freq[%d[ to new_freq[%d].", __FUNCTION__, last_freq, freq);
+ last_freq = freq;
+ }
if (display_mode_type == -1) {
config_value = config_get_str ( "TV", "tvin.display.mode.type", "null" );
@@ -571,6 +577,14 @@ int CTvin::VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc)
return -1;
}
+ if ( isFbc ) {
+ pFBC = GetSingletonFBC();
+ if (pFBC != NULL) {
+ pFBC->cfbc_Set_VMute (COMM_DEV_SERIAL, 2);
+ usleep ( 300000 );
+ }
+ }
+
switch ( display_resolution ) {
case VPP_DISPLAY_RESOLUTION_1366X768:
if ( freq == 50 ) {
@@ -581,16 +595,16 @@ int CTvin::VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc)
break;
case VPP_DISPLAY_RESOLUTION_3840X2160:
if ( freq == 50 ) {
- if(isFbc) {
- fprintf ( fp, "%s", "4k2k50hz420" );
+ if (isFbc) {
+ fprintf ( fp, "%s", "2160p50hz420" );
} else {
- fprintf ( fp, "%s", "4k2k50hz" );
+ fprintf ( fp, "%s", "2160p50hz" );
}
} else {
- if(isFbc) {
- fprintf ( fp, "%s", "4k2k60hz420" );
+ if (isFbc) {
+ fprintf ( fp, "%s", "2160p60hz420" );
} else {
- fprintf ( fp, "%s", "4k2k60hz" );
+ fprintf ( fp, "%s", "2160p60hz" );
}
}
break;
@@ -599,7 +613,7 @@ int CTvin::VDIN_SetDisplayVFreq ( int freq, int display_resolution , bool isFbc)
if ( freq == 50 ) {
fprintf ( fp, "%s", "1080p50hz" );
} else {
- fprintf ( fp, "%s", "1080p" );
+ fprintf ( fp, "%s", "1080p60hz" );
}
break;
}
@@ -655,6 +669,27 @@ int CTvin::VDIN_Set2Dto3D ( int on_off )
VdinParam.flag |= ( on_off ) ? ( TVIN_PARM_FLAG_2D_TO_3D ) : ( 0 );
return VDIN_SetVdinParam ( &VdinParam );
}
+
+int CTvin::VDIN_Get_avg_luma(void)
+{
+ unsigned int lum_sum,pixel_sum,luma_avg;
+ struct tvin_parm_s vdinParam;
+
+ if ( 0 == VDIN_GetVdinParam( &vdinParam )) {
+ lum_sum = vdinParam.luma_sum;
+ pixel_sum = vdinParam.pixel_sum*2;
+ if (pixel_sum != 0 && m_is_decoder_start) {
+ luma_avg = lum_sum/pixel_sum;
+ } else {
+ luma_avg = 116;
+ }
+ } else {
+ return -1;
+ }
+ LOGD ( "VDIN_get_avg_lut lum_sum =%d,pixel_sum=%d,lut_avg=%d\n", lum_sum,pixel_sum,luma_avg);
+ return luma_avg;
+}
+
int CTvin::VDIN_GetHistgram ( int *hisgram )
{
int i = 0;
@@ -1119,15 +1154,23 @@ int CTvin::set3D_FL_Frame(int value)
int CTvin::setLatchFlag(int value)
{
+ int fd = -1;
+ int nodeVal = 0;
+ char s[10];
FILE *fp = NULL;
+ memset(s, 0, sizeof(s));
+ read(fd, s, sizeof(s));
+ close(fd);
+ nodeVal = atoi(s);
fp = fopen ( "/sys/module/am_vecm/parameters/vecm_latch_flag", "w" );
if ( fp == NULL ) {
LOGW ( "/sys/module/am_vecm/parameters/vecm_latch_flag error(%s)!\n", strerror ( errno ) );
return -1;
}
- fprintf ( fp, "%d", value );
+ fprintf ( fp, "%d", value | nodeVal);
fclose ( fp );
fp = NULL;
+ LOGD ( "read vecm_latch_flag = (%s)====(0x%x), then set vecm_latch_flag | 0x%x = 0x%x.\n", s, nodeVal, value, value | nodeVal);
return 0;
}
@@ -1152,15 +1195,15 @@ int CTvin::VDIN_SetDIProg_Proc_Config ( int value )
return 0;
}
#if(1)
-int CTvin::VDIN_SetDISip_Top_Bot ( int value )
+int CTvin::VDIN_SetDIInput2Pre ( int value )
{
FILE *fp = NULL;
- fp = fopen ( "/sys/module/di/parameters/skip_top_bot", "w" );
+ fp = fopen ( "/sys/module/di/parameters/input2pre", "w" );
if ( fp == NULL ) {
- LOGW ( "Open /sys/module/di/parameters/skip_top_bot error(%s)!\n", strerror ( errno ) );
+ LOGW ( "Open /sys/module/di/parameters/input2pre error(%s)!\n", strerror ( errno ) );
return -1;
}
@@ -1812,7 +1855,7 @@ int CTvin::get_frame_average ( enum adc_cal_type_e calType, struct adc_cal_s *me
mem_data->cr_black /= CR_BLACK_SIZE;
/*
- for(j=COMP_BLACK_VS; j<=COMP_BLACK_VE; j++) {
+ for (j=COMP_BLACK_VS; j<=COMP_BLACK_VE; j++) {
for (i=COMP_BLACK_HS; i<=COMP_BLACK_HE;) {
//mem_data->cb_black += get_mem_data(dp, ((COMP_BUF_WID*j+i)*YCBCR422+CB422_POS));
mem_data->cr_black += get_mem_data(dp, ((COMP_BUF_WID*j+i)*YCBCR422+CR422_POS));
@@ -2611,6 +2654,40 @@ int CTvin::isVgaFmtInHdmi ( tvin_sig_fmt_t fmt )
return -1;
}
+int CTvin::isSDFmtInHdmi ( tvin_sig_fmt_t fmt )
+{
+ if ( fmt == TVIN_SIG_FMT_HDMI_640X480P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X480P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X480I_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X240P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X480I_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X240P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X480P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X576P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576I_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X288P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X576I_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X288P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576P_50HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X480P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_2880X576P_60HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X576P_100HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576I_100HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X480P_120HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X480I_120HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X576P_200HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X576I_200HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X480P_240HZ
+ || fmt == TVIN_SIG_FMT_HDMI_1440X480I_240HZ
+ || fmt == TVIN_SIG_FMT_HDMI_800X600_00HZ
+ || fmt == TVIN_SIG_FMT_HDMI_720X400_00HZ ) {
+ LOGD ( "%s, SD format.", "TV" );
+ return true;
+ } else {
+ LOGD ( "%s, HD format.", "TV" );
+ return false;
+ }
+}
bool CTvin::Tvin_is50HzFrameRateFmt ( tvin_sig_fmt_t fmt )
{
@@ -3037,6 +3114,7 @@ CTvin::CTvinSigDetect::CTvinSigDetect ( CTvin *pTvin )
mpObserver = NULL;
mpTvin = pTvin;
mKeepNosigTime = 0;
+ mResumeLaterTime = 0;
m_is_nosig_checktimes_once_valid = false;
}
@@ -3045,7 +3123,7 @@ CTvin::CTvinSigDetect::~CTvinSigDetect()
}
-int CTvin::CTvinSigDetect::startDetect()
+int CTvin::CTvinSigDetect::startDetect(bool bPause)
{
LOGD ( "startDetect()" );
@@ -3061,7 +3139,7 @@ int CTvin::CTvinSigDetect::startDetect()
m_pre_sig_info = m_cur_sig_info;
//
- m_request_pause_detect = false;
+ m_request_pause_detect = bPause;
this->run();
return mDetectState;
}
@@ -3075,6 +3153,7 @@ int CTvin::CTvinSigDetect::initSigState()
m_pre_sig_info = m_cur_sig_info;
mKeepNosigTime = 0;
m_is_nosig_checktimes_once_valid = false;
+ mResumeLaterTime = 0;
return 0;
}
@@ -3107,10 +3186,11 @@ int CTvin::CTvinSigDetect::requestAndWaitPauseDetect()
return 0;
}
-int CTvin::CTvinSigDetect::resumeDetect()
+int CTvin::CTvinSigDetect::resumeDetect(int later)//ms
{
CMutex::Autolock _l ( mLock );
LOGD ( "resumeDetect()" );
+ mResumeLaterTime = later;
m_request_pause_detect = false;
mDetectPauseCondition.signal();
return 0;
@@ -3128,23 +3208,23 @@ int CTvin::CTvinSigDetect::Tv_TvinSigDetect ( int &sleeptime )
mpTvin->VDIN_GetSignalInfo ( &m_cur_sig_info ); //get info
//set no sig check times
static long long sNosigKeepTime = 0;
- //LOGD("stime=%d status=%d, sNosigKeepTime = %d, mKeepNosigTime = %d", sleeptime, m_cur_sig_info.status, sNosigKeepTime, mKeepNosigTime);
- if(m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG || m_cur_sig_info.status == TVIN_SIG_STATUS_NULL) {
+ //LOGD("stime=%d status=%d, fmt = %d sNosigKeepTime = %d, mKeepNosigTime = %d", sleeptime, m_cur_sig_info.status,m_cur_sig_info.fmt, sNosigKeepTime, mKeepNosigTime);
+ if ( m_cur_sig_info.status == TVIN_SIG_STATUS_NOSIG || m_cur_sig_info.status == TVIN_SIG_STATUS_NULL ) {
sNosigKeepTime += sleeptime;
- if(sNosigKeepTime > mKeepNosigTime) { //real no sig
+ if ( sNosigKeepTime > mKeepNosigTime ) { //real no sig
//cur is no sig
- if(m_is_nosig_checktimes_once_valid) { //just once change,is nosig, and default it
+ if ( m_is_nosig_checktimes_once_valid ) { //just once change,is nosig, and default it
m_is_nosig_checktimes_once_valid = false;
mKeepNosigTime = 0;
}
//
- } else { //not
+ } else {//not
m_cur_sig_info.status = m_pre_sig_info.status;
}
} else {
sNosigKeepTime = 0;
//
- if(m_is_nosig_checktimes_once_valid) { //just once change,not nosig,default is
+ if ( m_is_nosig_checktimes_once_valid ) { //just once change,not nosig,default is
m_is_nosig_checktimes_once_valid = false;
mKeepNosigTime = 0;
}
@@ -3157,7 +3237,7 @@ int CTvin::CTvinSigDetect::Tv_TvinSigDetect ( int &sleeptime )
if ( m_cur_sig_info.status == TVIN_SIG_STATUS_STABLE ) { // to stable
//
- sleeptime = 200;
+ sleeptime = 20;
mpObserver->onSigToStable();
} else if ( m_pre_sig_info.status == TVIN_SIG_STATUS_STABLE && m_cur_sig_info.status == TVIN_SIG_STATUS_UNSTABLE ) { //stable to unstable
//
@@ -3199,6 +3279,12 @@ int CTvin::CTvinSigDetect::Tv_TvinSigDetect ( int &sleeptime )
//
sleeptime = 20;//sleeptime = 500;
mpObserver->onSigStillStable();
+ if ( m_cur_sig_info.trans_fmt != m_pre_sig_info.trans_fmt ) {
+ mpObserver->onStableTransFmtChange();
+ }
+ if (m_cur_sig_info.fmt != m_pre_sig_info.fmt) {
+ mpObserver->onStableSigFmtChange();
+ }
break;
case TVIN_SIG_STATUS_NOTSUP:
@@ -3251,16 +3337,24 @@ bool CTvin::CTvinSigDetect::threadLoop()
while ( !exitPending() ) { //requietexit() or requietexitWait() not call
while ( m_request_pause_detect ) {
- mRequestPauseCondition.broadcast();
mLock.lock();
+ mRequestPauseCondition.broadcast();
mDetectState = STATE_PAUSE;
mDetectPauseCondition.wait ( mLock ); //first unlock,when return,lock again,so need,call unlock
mDetectState = STATE_RUNNING;
mLock.unlock();
+ //
+ while (!m_request_pause_detect && mResumeLaterTime > 0) {
+ //LOGD("mResumeLaterTime = %d", mResumeLaterTime);
+ usleep(10 * 1000);
+ mResumeLaterTime -= 10;
+ }
}
//
- mpObserver->onLoop();
+ mResumeLaterTime = 0;
+ //
+ mpObserver->onSigDetectLoop();
Tv_TvinSigDetect ( sleeptime );
//可以优化
if ( !m_request_pause_detect ) {
@@ -3278,15 +3372,46 @@ bool CTvin::CTvinSigDetect::threadLoop()
v4l2_std_id CTvin::CvbsFtmToV4l2ColorStd(tvin_sig_fmt_t fmt)
{
v4l2_std_id v4l2_std;
- if(fmt == TVIN_SIG_FMT_CVBS_NTSC_M || fmt == TVIN_SIG_FMT_CVBS_NTSC_443) {
+ if (fmt == TVIN_SIG_FMT_CVBS_NTSC_M || fmt == TVIN_SIG_FMT_CVBS_NTSC_443) {
v4l2_std = V4L2_COLOR_STD_NTSC;
- } else if(fmt >= TVIN_SIG_FMT_CVBS_PAL_I && fmt <= TVIN_SIG_FMT_CVBS_PAL_CN) {
+ } else if (fmt >= TVIN_SIG_FMT_CVBS_PAL_I && fmt <= TVIN_SIG_FMT_CVBS_PAL_CN) {
v4l2_std = V4L2_COLOR_STD_PAL;
- } else if(fmt == TVIN_SIG_FMT_CVBS_SECAM) {
+ } else if (fmt == TVIN_SIG_FMT_CVBS_SECAM) {
v4l2_std = V4L2_COLOR_STD_SECAM;
} else {
v4l2_std = V4L2_COLOR_STD_PAL;
}
return v4l2_std;
}
+
+
+int CTvin::CvbsFtmToColorStdEnum(tvin_sig_fmt_t fmt)
+{
+ v4l2_std_id v4l2_std;
+ if (fmt == TVIN_SIG_FMT_CVBS_NTSC_M || fmt == TVIN_SIG_FMT_CVBS_NTSC_443) {
+ v4l2_std = CC_ATV_VIDEO_STD_NTSC;
+ } else if (fmt >= TVIN_SIG_FMT_CVBS_PAL_I && fmt <= TVIN_SIG_FMT_CVBS_PAL_CN) {
+ v4l2_std = CC_ATV_VIDEO_STD_PAL;
+ } else if (fmt == TVIN_SIG_FMT_CVBS_SECAM) {
+ v4l2_std = CC_ATV_VIDEO_STD_SECAM;
+ } else {
+ v4l2_std = CC_ATV_VIDEO_STD_PAL;
+ }
+ return v4l2_std;
+}
+
+int CTvin::GetITContent()
+{
+ FILE *fp = NULL;
+ int value = 0;
+ fp = fopen("/sys/module/tvin_hdmirx/parameters/it_content", "r");
+ if (fp == NULL) {
+ LOGE ( "Open /sys/module/tvin_hdmirx/parameters/it_content error(%s)!\n", strerror ( errno ) );
+ return -1;
+ }
+ fscanf(fp, "%d", &value );
+ fclose(fp);
+ fp = NULL;
+ return value;
+}
//**************************************************************************