📄 dvb_av.c
字号:
/**************************************************************************
(C)Copyright Cheertek Inc. 2002-2004,
D700, all right reserved.
Product : STB Firmware
****************************************************************************/
#include <stdio.h>
#include "ap_defs.h"
#include "ct_type.h"
#include "ct_os.h"
#include "ct_osd.h"
#include "ct_video.h"
#include "ct_audio.h"
#include "ct_tve.h"
#include "ct_adac.h"
#include "ct_drammap.h"
#include "dvb_type.h"
#include "dvb_av.h"
#include "dvb_avio.h"
#include "dvb_filt.h"
#include "dvb_dgst.h"
#include "dvb_sys.h"
#include "dvb_nim.h"
#include "dvb_ttx.h"
#include "dvb_fp.h"
#include "dvb_osd.h"
#include "task_cfg.h"
#include "av_cfg.h"
#include "tve_cfg.h"
#include "dvb_sbtl.h"
#include "ct_demux.h"
#include "ct_filter.h"
#include "ct_sys.h"
#ifdef MPGENC_ENABLE
#include "dvb_mpeg2enc.h"
#endif
#ifdef MUSIC_ENABLE
#if (defined(CT216S) || defined(CT216T) ||defined (CT216H)|| defined(CT956))
#include "dvb_music.h"
#else
#include "dvb_mp3.h"
#endif
#endif
#ifdef CT216X
#include "ct_ttx_vbi.h"
#include "dev_tve.h"
#endif
#ifdef IMAGE_ENABLE
#if (defined CT216S || defined CT216T ||defined CT216H || defined CT956)
#include "dvb_image.h"
#else
#include "dvb_jpg.h"
#endif
#endif
#ifdef MOVIE_ENABLE
#include "dvb_movie.h"
#endif
#ifdef HDMI_ENABLE
#include "dvb_hdmi.h"
#endif
#ifdef PVR_ENABLE
#include "dvb_pvr.h"
#endif
/*******************************************************************************************/
//#define DVB_AV_DBG
//#define DVB_AV_AUDIO_DESCRIPTOR_TEST
#define AV_MSG(p) printf p
#ifdef DVB_AV_DBG
//#define AV_DBG(p) printf p
#define AV_DBG(p)
#else
#define AV_DBG(p)
#endif
/*******************************************************************************************/
/*
For Digest Mode Screen Region
176 704
+-------------+ +------------+
280 | Real Region | ==> 560 | Virtual |
| Screen | | Region |
+-------------+ +------------+
N_VID_SCALING_1_2 Video Size
88 352
+-------------+ +-------------+
140 | Video | ==> 280 | Video |
| | | |
+-------------+ +-------------+
N_VID_SCALING_1_4 Video Size
44 176
+-------------+ +-------------+
70 | Video | ==> 140 | Video |
| | | |
+-------------+ +-------------+
*/
/*******************************************************************************************/
#define DVB_AV_BITSTREAM_BUFFER_SIZE ((CT_DRAM_INPUT_BITBUF_SIZE_ALIGN_UNIT*CT_DRAM_INPUT_BITBUF_SIZE_MIN_UNIT)) // Min. Size
#if !(defined(CT956)||defined(CT216U))
#define DVB_AV_TS_FILTER_BLOCK_SIZE (CT_DRAM_INPUT_BITBUF_SIZE_ALIGN_UNIT)
#define DVB_AV_TS_FILTER_BLOCK_UNIT_NUM (DVB_AV_TS_FILTER_BLOCK_SIZE/188)
#define DVB_AV_TS_FILTER_BLOCK_STUFFING_NUM (DVB_AV_TS_FILTER_BLOCK_SIZE%188)
#define DVB_AV_TS_FILTER_BLOCK_MIN_NUM (1)
#endif //#if !(defined(CT956)||defined(CT216U))
/*******************************************************************************************/
#define DIGEST_VIDEO_X_OFFSET_PAL (40) //32 //32
#if defined(CT216S) || defined(CT216T) || defined (CT216H) || defined(CT956)
#define DIGEST_VIDEO_X_OFFSET_NTSC (43) //32 //24
#else
#define DIGEST_VIDEO_X_OFFSET_NTSC (30) //32 //24
#endif
#define DIGEST_VIDEO_Y_OFFSET_NTSC (8)
#define DIGEST_VIDEO_Y_OFFSET_PAL (18) //20
#define TIME_INTERVAL_OF_LOCK (200)
#define TIME_INTERVAL_OF_IFRAME (100)
/*******************************************************************************************/
#define DVB_AV_RECOVER_MONITOR_FAIL_CHECK_TIMES (800)
#define DVB_AV_RECOVER_MONITOR_INTERVAL (10/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
/*******************************************************************************************/
#define DVB_AV_DELAY_10_MS (10/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_25_MS (25/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_50_MS (50/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_100_MS (100/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_150_MS (150/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_200_MS (200/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_250_MS (250/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_500_MS (500/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_DELAY_1000_MS (1000/CTOS_MS_PER_TICKS) // 1 tick = 10 ms
#define DVB_AV_BG_MAX_WIDTH 656
#ifdef CT956
#define AUDIO_FREEZE_ENABLE
#define VIDEO_FREEZE_ENABLE
#endif // end #ifdef CT956
/*******************************************************************************************/
typedef enum
{
EN_FIRST_AUD_TYPE_AV_SYNC, /* Turn On Audio while AV Sync */
EN_FIRST_AUD_TYPE_FREQ, /* Turn On Audio in Freq Task */
EN_FIRST_AUD_TYPE_AV_PTS_CHECK, /* Turn On Audio after A/V PTS check OK */
EN_FIRST_AUD_TYPE_UNKNOWS
}
EN_FIRST_AUD_TYPE;
/*******************************************************************************************/
typedef enum
{
EN_AUDIO_PTS_STEADY_UNMUTE,
EN_AUDIO_FINELY_TUNE_MUTE,
EN_AUDIO_DEFAULT_MUTE
} EN_AUDIO_UNMUTE_STATE;
/*******************************************************************************************/
CTOS_TASK stDvbAvTaskCtrlBlk;
CTOS_SEMAPHORE stDvbAvSemaphore;
CTOS_SEMAPHORE stDvbAvRecoverSemaphore;
static u8 au8DvbAvTaskStack[DVB_AV_TASK_STACK_SIZE];
static bool8 b8DvbAvTaskCreated = FALSE;
static bool8 b8DvbAvSemaphoreCreate = FALSE;
static bool8 b8DvbAvRecoverSemaphoreCreate = FALSE;
CTOS_TASK stDvbFreqTaskCtrlBlk;
static u8 au8DvbFreqTaskStack[DVB_FREQ_TASK_STACK_SIZE];
static bool8 b8DvbFreqTaskCreated = FALSE;
static bool8 b8DvbAvInit = FALSE;
CTOS_TIMER stRecoverMonitorTimer;
static bool8 b8recoverMonitorTimerCreated = FALSE;
static bool8 b8DTHEnable = FALSE;
/******************************************************************************/
u8 au8AvNotifyStack[DVB_AV_HISR_STACK_SIZE];
/*******************************************************************************************/
static bool8 b8ForecRecoverHang = FALSE;
static bool8 b8PollAvBufferStatus = FALSE;
static u16 u16PollAvBufferCount = 50;
static bool8 b8PollRiscDebugStatus = FALSE;
static u16 u16PollRiscDebugCount = 50;
static u8* pu8DvbIFrameData = NULL;
static bool8 b8DvbAvVideoDisplay = TRUE;
static u8 u8DvbAvBackgroundWeight = 15;
static bool8 b8DvbAvBackgroundDisplay = TRUE;
CT_V_SCREEN_INFO stDvbAvPicScreen;
CT_V_SCREEN_INFO stDvbAvClipScreen;
CT_V_SCREEN_INFO stDvbAvDisplayScreen;
CT_V_SCREEN_INFO stDvbAvBackgroundScreen;
/*******************************************************************************************/
static bool8 b8VideoScreenEnable = TRUE;
static bool8 b8DisplayFirstFrameFlag = FALSE;
static bool8 b8VideoFreezeByError = FALSE;
static EN_CT_SCAN_MODE enDvbVideoScanMode = EN_CT_SCAN_TYPE_INTERLACED;
static EN_CT_TVE_OUTPUT_MODE enCurrentTveOutputFormat = EN_CT_TVE_OUTPUT_MODE_2CVBS_SVIDEO;
static EN_VID_FORMAT enCurrentVideoFormat = EN_VID_FORMAT_2CVBS_SVIDEO;
static bool8 b8CurrentCCIR601Mode = FALSE;
static bool8 b8CurrentCCIR656Mode = FALSE;
static bool8 b8DefaultCCIR601Mode = FALSE;
static bool8 b8DefaultCCIR656Mode = FALSE;
static u16 u16CCIR656HDS = 492;
static u16 u16CCIR656HDW = 720;
static EN_CT_AUDIO_MODE enAvCtAudioMode = EN_CT_AUDIO_MODE_MPG;
static EN_CT_VID_MODE enCtSetupVideoMode = EN_CT_VID_MODE_PAL;
static EN_VID_SCALING enDvbAvCurrentScaling_type = EN_VID_SCALING_NORMAL;
static EN_RATIO_TYPE enDefaultRatioType = EN_RATIO_LETTER_BOX;
static EN_RATIO_TYPE enCurrentRatioType = EN_RATIO_FIT_SCREEN;
static EN_VID_DISPLAY enTvType = EN_VID_DISPLAY_4_3;
static u16 u16DvbAvVideoPosX = 0;
static u16 u16DvbAvVideoPosY = 0;
static bool8 b8AVPause = FALSE;
static bool8 b8VideoFreeze = FALSE;
static u8 u8VidWeight = 15;
static u8 u8NoFrameDisplayed = 0;
static u8 u8CurrentVolume = 32;
static bool8 b8CurrentMute = FALSE;
static u16 u16CurrentVidPID = 0;
static u16 u16CurrentAudPID = 0;
static u16 u16CurrentTtxVbiPID = 0;
static bool8 b8AV_PIDConflict = FALSE;
static u8 u8VidType, u8AudType;
static u8 u8NoVideoCount = 0;
static u8 u8NoAudioCount = 0;
static EN_FIRST_SCR_TYPE enFirstScreenType = EN_FIRST_SCR_TYPE_AV_SYNC; //EN_FIRST_SCR_TYPE_AV_SYNC; //EN_FIRST_SCR_TYPE_I_FRAME;
static EN_FIRST_AUD_TYPE b8FirstAudioType = EN_FIRST_AUD_TYPE_FREQ; /* Be Ware: */
static u32 u32DvbAvTveEnableDacMask = TVE_MACK_DAC_ALL;
/*******************************************************************************************/
static EN_VID_SCALING enDigestScaling_type;
static bool8 b8DigestInit = FALSE;
static bool8 b8DigestValid = FALSE;
static bool8 b8DigestMode = FALSE;
static u8 u8DigestPosCount = 0;
static u16 u16LockWaitCounter = 5;
static u16 u16IFrameWaitCounter = 50;
/*******************************************************************************************/
static bool8 b8DvbAvEnableVbiTTX = TRUE;
/*******************************************************************************************/
static bool8 b8DvbAvBorderEnable = FALSE;
static u32 u32DvbAvBorderRGB = 0;
/*******************************************************************************************/
//For background layer
//程
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -