/****************************************************************************** *_Copyright (c) 2009 Digital Stream Technology Inc. All Rights Reserved. * * Module: dsthaldtv.h * * Description * DTV Interface Functions * * @author * @version $Revision: 1.1 $ * ******************************************************************************/ #if !defined (_DSTHAL_DTV_H_) #define _DSTHAL_DTV_H_ #include "dsthallocal.h" #include "dstoslayer.h" #include "dsthaldisp.h" typedef struct tag_PESInfo_t { DS_U32 i_flags; DS_S64 i_pts; DS_S64 i_dts; } PESInfo_t; typedef void (*DHL_DTV_PES_CALLBACK)(int Pid, DS_U8 *pPidData, int Size, PESInfo_t *p_info); typedef void (DHL_VDC_CALLBACK)(DS_U32 CallerContext, void *Notification); typedef DHL_VDC_CALLBACK * P_DHL_VDC_CALLBACK; /****************************************************************************** * DHL AV Callback Type ******************************************************************************/ typedef enum { DHL_CB_VDC_SQH, //Sequence Header change to VDC set DHL_CB_VDC_CCUDP, //CC user data parser to VDC set DHL_CB_VDC_CCEDP, //CC extended data parser to VDC set DHL_CB_VDC_DECODE_ERR, //Decoder Error Report(DoNotUse this enum type) DHL_CB_NOTIFY_VSTARTING, //Notify about video starting state(FALSE-starting, TRUE-complete) DHL_CB_NOTIFY_VSTOPPING, //Norify about video stopping state(FALSE-stopping, TRUE-complete) DHL_CB_NOTIFY_DISPINITIALIZE, //Norify display initialization state(TRUE-complete) DHL_CB_VDC_FATAL_ERROR, //Norify VDC FATAL ERROR DHL_CB_END } DHL_DTV_CBTYPE; /****************************************************************************** * DHL Audio Stream Type ******************************************************************************/ typedef enum { DHL_STREAM_AUDIO_PCM = 0x00000400, DHL_STREAM_AUDIO_AC3 = 0x00000100, DHL_STREAM_AUDIO_MPEG2 = 0x00000200, DHL_STREAM_AUDIO_AAC = 0x00000800, DHL_STREAM_AUDIO_MPEG4 = 0x00001000, DHL_STREAM_AUDIO_END } DHL_AUD_STREAMTYPE; /****************************************************************************** * DHL Digital Audio (SPDIF) Output Type ******************************************************************************/ typedef enum { DHL_STREAM_AUDOUT_PCM=1, DHL_STREAM_AUDOUT_AC3 } DHL_AUD_OUTPUT_FORMAT; /****************************************************************************** * DHL DTV Program Information ******************************************************************************/ typedef struct tag_DHL_PRG_INFO { DS_U16 VidPID; //current video PID DS_U16 AudPID; //current audio PID DS_U16 PCRPID; //current PCR PID DHL_AUD_STREAMTYPE AudStreamType; //current input audio stream type } DHL_PRG_INFO, *P_DHL_PRG_INFO; typedef struct tag_PES_FILTER { DS_U16 uPesPid; DS_U32 Param; DS_BOOL isValid; } DHL_PESFILTER, *P_DST_PESFILTER; /****************************************************************************** * MPEG Audio Information ******************************************************************************/ typedef struct tag_DHL_DTV_MPEG_STATUS { /* The following status fields are for MPEG mode. Please refer to MPEG * Specification ISO/IEC 11172-3 for a detail explanation and the * expected values. */ DS_U32 MpegId; /* 1: ISO/IEC 11172-3; 0: reserved */ DS_U32 MpegLayer; /* 1: Layer 3; 2: Layer 2; 3: Layer 1 */ DS_U32 ProtectionBit; /* 0: CRC protected; 1: no CRC protected */ DS_U32 BitRateIndex; /* Index to a bitrate table */ DS_U32 SampleRate; /* 0: 44.1kHz; 1: 48kHz; 2: 32kHz; 3: reserved */ DS_U32 PaddingBit; /* Indicates whether the frame contains an */ /* extra slot to adjust the mean bitrate. */ /* 0: no padding; 1: padding exists */ DS_U32 PrivateBit; /* Reserved for non-ISO purpose */ DS_U32 Mode; /* Indicates the audio configuration mode */ DS_U32 ModeExtension; /* Indicates which subbands are in intensity */ /* stereo */ DS_U32 Copyright; /* 0:no copyright protected; */ /* 1:copyright protected */ DS_U32 Original; /* 0:bitstream is a copy; */ /* 1:bitstream is an original */ DS_U32 Emphasis; /* Indicates which type of de-emphasis is used */ } DHL_DTV_MPEG_STATUS, *P_DHL_DTV_MPEG_STATUS; /****************************************************************************** * DTV AC3 Information ******************************************************************************/ typedef struct tag_DHL_DTV_AC3_STATUS { /* The following status fields are for AC3 mode. Please refer to AC-3 */ /* ATSC document for a detail explanation and the expected values. */ DS_U32 Fscod; /* Indicates the current sample rate code: */ /* 0: 48kHz; 1: 44.1kHz; 2: 32kHz; 3: reserved */ DS_U32 Frmsizecod; /* Current frame size code */ DS_U32 Lfeon; /* 0: Low frequency effects channel is off */ /* 1: Low frequency effects channel is on */ DS_U32 Acmod; /* Current audio coding mode */ DS_U32 Bsid; /* Bit stream identification value 0-31 */ DS_U32 Bsmod; /* Current bit stream mode */ DS_U32 Cmixlev; /* Centre mixing level */ DS_U32 Surmixlev; /* Surround mixing level */ DS_U32 Dsurmod; /* Dolby surround mode */ DS_U32 Copyright; /* Copyright bit value 0 or 1 */ DS_U32 Original; /* Original bit stream 0 or 1 */ DS_U32 Dialnorm1; /* Dialogue normalization word (CH1)value 0-31 */ DS_U32 Dialnorm2; /* Dialogue normalization word (CH2) value 0-31 */ DS_U32 Langcod1; /* Current language code (CH1) value 0-255 */ DS_U32 Langcod2; /* Current language code (CH2) value 0-255 */ DS_U32 Roomtype1; /* Room type (CH1) value 0-3 */ DS_U32 Roomtype2; /* Room type (CH2) value 0-3 */ DS_U32 Mixlevel1; /* Current mixing level (CH1) value 0-31 */ DS_U32 Mixlevel2; /* Current mixing level (CH2) value 0-31 */ } DHL_DTV_AC3_STATUS, *P_DHL_DTV_AC3_STATUS; /****************************************************************************** * DTV Video Source Information from Sequence Header ******************************************************************************/ typedef struct tag_DHL_DTV_SRCVID_INFO { DS_U32 uSrcW; DS_U32 uSrcH; DS_U32 uFrameRate; DS_BOOL bInterlace; DHL_DISP_ASPECTRATIO AspectRatio; } DHL_DTV_SRCVID_INFO, *P_DHL_DTV_SRCVID_INFO; /****************************************************************************** * DTV Configuration ******************************************************************************/ typedef struct tag_DHL_DTV_CONFIGURATION { OS_MUTEX_ID AVMutex; DS_BOOL bScrambled; //Is this channel scrambled? P_DHL_VDC_CALLBACK VideoCbFunc[DHL_CB_END]; DS_U32 VideoCbParam[DHL_CB_END]; DS_BOOL bVideoPlayReq; DS_BOOL bAudioPlayReq; DS_BOOL bVideoInPlay; DS_BOOL bAudioInPlay; DS_BOOL isAVPaused; DHL_PRG_INFO PrgInfo; } DHL_DTV_CONFIG, *P_DHL_DTV_CONFIG; /****************************************************************************** * Audio Decoder Compression Mode (Specified in Dolby Specifiction.) ******************************************************************************/ typedef enum /* AC3 Compression mode */ { DHL_ADC_COMP_CUSTOM0 = 0, /* Custom mode 0 (Analog Dialnorm) */ DHL_ADC_COMP_CUSTOM1, /* Custom mode 1 (Digital Dialnorm) */ DHL_ADC_COMP_LINE, /* Line out mode */ DHL_ADC_COMP_RF /* RF Remodulation mode */ } DHL_ADC_COMP_MODE, *P_DHL_ADC_COMP_MODE; /****************************************************************************** * MPEG PES Header - Flag Field ******************************************************************************/ typedef enum { DHL_PES_SCRAMBLING_CONTROL = 0, DHL_PES_PRIORITY, DHL_DATA_ALIGNMENT_INDICATOR, DHL_COPYRIGHT, DHL_ORIGINAL_OR_COPY, DHL_PTS_DTS_FLAGS, DHL_ESCR_FLAG, DHL_ES_RATE_FLAG, DHL_DSM_TRICK_MODE_FLAG, DHL_ADDITIONAL_COPY_INFO_FLAG, DHL_PES_CRC_FLAG, DHL_PES_EXTENSION_FLAG, DHL_PES_PRIVATE_DATA_FLAG, DHL_PACK_HEADER_FIELD_FLAG, DHL_PROG_PACK_SEQ_COUNTER_FLAG, DHL_P_STD_BUFFER_FLAG, DHL_PES_EXTENSION_FLAG_2, DHL_STREAM_ID } DHL_MPEG_PES_H_FLAG, *P_DHL_MPEG_PES_H_FLAG; /****************************************************************************** * MPEG PES Header - Type Field ******************************************************************************/ typedef enum { DHL_PES_START = 0, DHL_PES_VIDEO_0, //MPEG_0 DHL_PES_VIDEO_1, //MPEG_1 DHL_PES_AUDIO_P, //PRIMARY Parser DHL_PES_AUDIO_S, //SECONDARY Parser DHL_PES_AUDIO_J, //J1 Parser DHL_PES_AUDIO_SP,//SPDIF Parser DHL_PES_END, } DHL_MPEG_PES_H_TYPE, *P_DHL_MPEG_PES_H_TYPE; typedef enum { DHL_CC_PRGSEQ_SHIFT = 0, DHL_CC_PRGFR_SHIFT = 1, DHL_CC_TOPFL_SHIFT = 2, DHL_CC_RPTFL_SHIFT = 3, DHL_CC_CODE_SHIFT = 4, DHL_CC_PIC_SHIFT = 8, } DHL_CC_DATA_SHIFT; typedef enum { DHL_CC_PRGSEQ_MASK = 1, DHL_CC_PRGFR_MASK = 1, DHL_CC_TOPFL_MASK = 1, DHL_CC_RPTFL_MASK = 1, DHL_CC_PIC_MASK = 0xFF, } DHL_CC_DATA_MASK; #if defined __cplusplus extern "C" { #endif /****************************************************************************** * DTV - Common APIs ******************************************************************************/ DHL_RESULT DHL_DTV_Open(void); DHL_RESULT DHL_DTV_Init(void); DHL_RESULT DHL_DTV_StartAV(DS_U16 uVidPID, DS_U16 uAudPID, DS_U16 uPcrPID, DHL_AUD_STREAMTYPE AudStreamType); DHL_RESULT DHL_DTV_StopAV(void); DHL_RESULT DHL_DTV_Close(void); DHL_RESULT DHL_DTV_PresetCallback(void *pCallBack, DHL_DTV_CBTYPE CBType, DS_U32 ClientCntx); DHL_RESULT DHL_DTV_DoCallback(DHL_DTV_CBTYPE CBType, void *Arg); DHL_RESULT DHL_DTV_Pause(void); DHL_RESULT DHL_DTV_Resume(void); DS_BOOL DHL_DTV_IsAVStarted(void); DHL_RESULT DHL_DTV_IsAvAlive(DS_BOOL *bVideo, DS_BOOL *bAudio); DHL_RESULT DHL_DTV_IsAvAliveExt(DS_BOOL *bVideo, DS_BOOL *bAudio, DS_U32 uVidWaitingTick, DS_U32 uAudWaitingTick); void DHL_DTV_SetStillPicture( DS_BOOL bStill ); DS_BOOL DHL_DTV_GetStillPicture(void); /****************************************************************************** * DTV - Video APIs ******************************************************************************/ DHL_RESULT DHL_DTV_StartVideo(DS_U16 uVidPID, DS_U16 uPcrPID); DHL_RESULT DHL_DTV_StartVideoEx2(DS_U16 uVidPID, DS_U16 uPcrPID,DS_U8 Stream_Type); DHL_RESULT DHL_DTV_StartVideo2(DS_U16 uVidPID, DS_U16 uPcrPID,DS_U16 uAudPID); DHL_RESULT DHL_DTV_StopVideo(void); DHL_RESULT DHL_DTV_GetSrcVideoInfo(P_DHL_DTV_SRCVID_INFO pSrcInfo); DS_BOOL DHL_DTV_IsVideoStarted(void); /****************************************************************************** * DTV - Audio APIs ******************************************************************************/ DHL_RESULT DHL_DTV_StartAudio(DS_U16 uAudPID, DS_U16 uPcrPID, DHL_AUD_STREAMTYPE AudStreamType, DS_BOOL bAudOnlyCh); DHL_RESULT DHL_DTV_StopAudio(void); DHL_RESULT DHL_DTV_SetAudioDynamicRange( DS_BOOL dynrngOn ); DHL_RESULT DHL_DTV_GetAudioDynamicRange( DS_U32* pRangeHi, DS_U32* pRangeLow ); DHL_RESULT DHL_DTV_GetAudioInfoAc3( P_DHL_DTV_AC3_STATUS pAc3Info ); DHL_RESULT DHL_DTV_GetAudioInfoMpeg( P_DHL_DTV_MPEG_STATUS pMpegInfo ); void DHL_DTV_DumpAudioInfoAc3( void ); DS_BOOL DHL_DTV_IsAudioStarted(void); /****************************************************************************** * DTV - Userdata APIs ******************************************************************************/ DHL_RESULT DHL_DTV_InitCC(void); DHL_RESULT DHL_DTV_EnableCC(void); DHL_RESULT DHL_DTV_DisableCC(void); DHL_RESULT DHL_DTV_CloseCC(void); /****************************************************************************** * PES filter APIs ******************************************************************************/ DHL_RESULT DHL_DTV_PresetPESCallback( DHL_DTV_PES_CALLBACK cbFunc ); DHL_RESULT DHL_DTV_StartPESFilter(DS_U16 uPESPid); DHL_RESULT DHL_DTV_StopPESFilter(DS_U16 uPESPid, DS_BOOL bAll); #if defined __cplusplus } #endif #endif /* _DSTHAL_DTV_H_ */