⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvb_av.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 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 + -