/******************************************************************** * * Dmw_Channel.h - header for Dmw_Channel sources * * Channel Decoding Module (DMC) header file * * Copyright 2004 Digital STREAM Technology, Inc. * All Rights Reserved * * $Id: DMW_Channel.h, v?? cafrii Exp $ * ********************************************************************/ #ifndef DMW_CHANNEL_H #define DMW_CHANNEL_H #ifdef __cplusplus extern "C" { #endif #include "DMW_Platform.h" #include "DHL_AVCAP.h" #include "DHL_FE.h" #include "DMW_Status.h" #include "DMW_ChannelDemux.h" #include "DMW_Dummy.h" //----------------------------------------------------------------- // HAL // //----------- // ä³Î ŸÀÔ // typedef enum { ChannelType_Air = 0, // Áö»óÆÄ ä³Î ŸÀÔ. ChannelType_Cable = 1, // ÄÉÀ̺í ä³Î ŸÀÔ. } ChannelType; // RF number¸¦ frequency·Î ÇØ¼®ÇÒ ¶§ ¾î´À ŸÀÔÀ̳Ŀ¡ µû¶ó ½ÇÁ¦ Á֯ļö °ªÀÌ ´Ù¸£°Ô ³ª¿Â´Ù. // ±× ¿ÜÀÇ ¸ðµç ÀÛ¾÷Àº ä³Î ŸÀÔ°ú °ÅÀÇ ¹«°üÇÏ´Ù. extern ChannelType g_CurChannelType; // ÇöÀç ä³Î À¯Çü. 0: AIR, 1: Cable // Air¿Í CableÀÌ °øÁ¸ÇÒ ¼ö´Â ¾ø´Ù. (ÇϳªÀÇ RF ¹øÈ£¸¦ ³õ°í ÇØ¼® ¹æ¹ýÀÌ ´Þ¶óÁö¹Ç·Î..) // // ÀÌ º¯¼ö¸¦ Á÷Á¢ ¼öÁ¤ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. // const typeÀ̹ǷΠÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î´Â ¼öÁ¤ÇÒ ¼ö ¾ø´Ù. // ²À ÃʱâÈ­ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù. // // cafrii, 030323 // compilerÀÇ optimization ¹®Á¦·Î const¸¦ ´Ù½Ã »èÁ¦ÇÔ. #define ChannelTypeString(type) ( \ (type) == ChannelType_Air ? "Air" : \ (type) == ChannelType_Cable ? "Cable" : "??") //-------------- // Á֯ļö Ç¥ÁØ extern tDHL_FreqStd g_CableSystem; // // g_CurChannelTypeÀÌ AirÀÎ °æ¿ì¿¡´Â ÀÌ °ªÀº FREQ_AIR À̾î¾ß ÇÑ´Ù. // #define FreqStdString(s) ((s)==0 ? "FreqAir" : (s)==1 ? "FreqCable" : (s)==2 ? "FreqIRC" : (s)==3 ? "FreqHRC" : "Freq??") //----------- // ¸ðµâ·¹ÀÌ¼Ç Å¸ÀÔ // typedef enum { // cafrii 041104 add // report Àü¿ë Modulation_Invalid = -1, // request/report °â¿ë Modulation_NTSC = 0, Modulation_8VSB = 1, Modulation_64QAM = 2, Modulation_256QAM = 3, // request Àü¿ë Modulation_CableAuto = 4, Modulation_QAM = 5, // OREN°ú °°ÀÌ firmware¿¡¼­ ÀÚµ¿ detectÇÏ´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù. } ModulationType; // DMW ChannelMW¿¡¼­´Â ModulationMode, ServiceType ¸ðµÎ °°Àº Àǹ̷Π»ç¿ëÇÑ´Ù. // #define ServiceTypeString(type) ( \ type == Modulation_NTSC ? "NTSC" : \ type == Modulation_8VSB ? "8VSB" : \ type == Modulation_64QAM ? "64QAM" : \ type == Modulation_256QAM ? "256QAM" : \ type == Modulation_CableAuto ? "CableAuto" : \ type == Modulation_QAM ? "QAM" : "??") #define ModulationTypeString(t) ServiceTypeString(t) // cafrii 050316 add // // NTSC Tuning ½Ã¿¡ »ç¿ëµÉ Tuner Á֯ļö ¼³Á¤ ¸ðµå // // FULL Search ¸ðµå´Â Analog Autoscan½Ã CableSystem Auto-detect ¿ëÀ¸·Î¸¸ »ç¿ëÀ» Á¦ÇÑÇÑ´Ù. // ÀÌ ¸ðµå´Â TunerSetChannel ¿¡´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. // // µðÁöÅÐ Æ©´× ½Ã¿¡´Â ÀÌ ¸ðµå°ªÀº ¸ðµÎ ¹«½ÃµÇ¸ç Ç×»ó TUNE_FIXED ¹æ½ÄÀ¸·Î Æ©´×µÈ´Ù. // typedef enum { FREQTUNE_FIXED = 0, // ÁöÁ¤ÇÑ Á֯ļö·Î¸¸ ¼³Á¤ (RF, offset). default mode FREQTUNE_SHORT_SEARCH = 1, // Short Search : ÁöÁ¤ÇÑ Á֯ļö (RF, offset) ÁÖº¯ ¿µ¿ª °Ë»ö //FREQTUNE_FULL_SEARCH = 2, // Full Search : offsetÀ» ¹«½ÃÇϰí Full range °Ë»ö } FreqTuneMode; //-------------- // °¢Á¾ timeout variables // cafrii 050415 add extern int g_Timeout_SignalLock; extern int g_Timeout_AnalogSignalLock; extern int g_Timeout_VctLoading; extern int g_Timeout_PatLoading; extern int g_Timeout_PmtLoading; #define DMC_CHECK_HEAP_SIZE 0 // cafrii 060831 add, // for memory leak test // °¢Á¾ callback, event µîÀÇ Ã³¸® ÀÛ¾÷½Ã¸¶´Ù // heap »óŸ¦ °è¼Ó Ã¼Å©ÇØ¼­ µð¹ö±× â¿¡ Ç¥½Ã.. #if 0 ____Types____() #endif typedef BOOL (*DMC_FN_CHECK)(void); // cancel check function typedef void (*DMC_FN_COMPLETED)(STATUS status, UINT32 userParam, void *pAdditionalParam); // general CompleteFunction #define TLVideoContext UINT32 typedef void (*DMC_FN_USERDATA)(TLVideoContext *); // CC User data callback typedef void (*DMC_FN_NOTIFY)(UINT32, UINT32); // Dmc notification callback function type typedef STATUS (*DMC_FN_DPC)(UINT32, UINT32, UINT32, UINT32); // Dmc DPC callback functiontype #if 0 ____DMW_HAL____() #endif //-------------- // HAL API for middle ware codes. // ModulationType DMW_HAL_TunerDemod2Modulation(tDHL_Demod demod); tDHL_Demod DMW_HAL_Modulation2TunerDemod(ModulationType mode); BOOL DMW_HAL_DetectAnalogVideoChannel(void); STATUS DMW_HAL_SetChannelStandard(tDHL_FreqStd std); STATUS DMW_HAL_TunerScanSetChannel(UINT32 ch, ModulationType type, INT32* pOffset, FreqTuneMode mode, DMC_FN_CHECK chkfn); STATUS DMW_HAL_TunerSetChannel (UINT32 ch, ModulationType type, INT32 offset, FreqTuneMode mode, DMC_FN_CHECK chkfn); STATUS DMW_HAL_TunerSetFrequency(UINT32 freqInKHz, ModulationType mode, BOOL (*chkfn)()); STATUS DMW_HAL_AfcSearchMultiple(int nFreq, UINT32 *aFreq, int timeout, DMC_FN_CHECK ckfn); BOOL DMW_HAL_DetectNIMChannel(void); int DMW_HAL_GetSignalStrength(void); float DMW_HAL_GetSNR(void); int DMW_HAL_GetCurrentRF(void); // cafrii 060630 add void DMW_HAL_ResetLastRF(void); // cafrii 060714 add ModulationType DMW_HAL_GetModulationMode(void); int DMW_HAL_GetFDCLockStatus(void); int DMW_HAL_GetFDCSignalStrength(void); float DMW_HAL_GetFDCSNR(void); void DMW_HAL_RegisterChannelHalSymbols(void); #if 0 ____FreqTable____() #endif //------------------------------ // ä³Î Á֯ļö Å×À̺í. DMW_ChannelFreq.c // #define HIGHEST_AIR_CHANNEL 83 #define HIGHEST_CABLE_CHANNEL 135 extern UINT32 FindCenterFrequency(int RF, INT32 freqOffset, tDHL_FreqStd std); // // cafrii 050316 add // // ÁÖ¾îÁø RF ä³Î ¹øÈ£¿¡ ÇØ´çÇÏ´Â center frequency¸¦ ¸®ÅÏÇÑ´Ù. ´ÜÀ§´Â Hz // freqOffsetÀ» ÁöÁ¤ÇÏ¸é ±× offset ºÐÀÌ ¹Ý¿µµÇ¾î ¸®ÅϵȴÙ. // // ÀÔ·ÂÇÑ °ª¿¡ ¹®Á¦°¡ ÀÖÀ¸¸é 0À» ¸®ÅÏ. // extern int FindAirRF(UINT32 freq, INT32 *freq_offset); extern int FindCableRF(UINT32 freq, INT32 *freq_offset); extern int FindMultiStandardRF(UINT32 freq, INT32 *freq_offset, tDHL_FreqStd std); // // ÁÖ¾îÁø Á֯ļö °ª¿¡ ÇØ´çÇÏ´Â RF ä³Î ¹øÈ£(Á¤¼ö°ª)¸¦ ¸®ÅÏÇÑ´Ù. // freq: // VSBÀÎ °æ¿ì freq´Â pilot tone Á֯ļöÀÌ´Ù. // 6MHz bandÀÇ lower-edge Á֯ļö + 310KHz // ¾Æ³¯·Î±×ÀÎ °æ¿ì´Â picture carrier // center freq - 1.75MHz == lower-edge + 1.25MHz // freq_offset: // freq_offsetÀº ¾Æ³¯·Î±×ÀÎ °æ¿ì¿¡¸¸ »ç¿ëÇÏ´Â °ÍÀ¸·Î¼­, // Å×ÀÌºí »óÀÇ picture carrier¿ÍÀÇ Â÷ÀÌ °ªÀ» ¸®ÅÏÇÑ´Ù. // // return °ª: // ¹ß°ßµÈ RF ä³Î ¹øÈ£. ¹ß°ßµÇÁö ¾ÊÀ¸¸é -1À» ¸®ÅÏÇÑ´Ù. //----------------------------------------------------------------- // // Dmc_ChangeDisplayXXX()¿¡ »ç¿ëµÇ´Â »ó¼öµé.. // Color constant // typedef enum { VOUT_YPBPR = 1, VOUT_MONITOR = 2, VOUT_RGB = 3, } VOUT_COLOR; // Format constant // typedef enum { VOUT_NATURAL = 0, VOUT_480I = 1, VOUT_480P = 2, VOUT_720P = 4, VOUT_1080I = 8, VOUT_480I_SC = 10, // S-Video+CVBS output VOUT_480I_CC = 11, // YPbPr+CVBS output VOUT_1366_768P = 12, // LVDS } VOUT_FORMAT; // Screen ratio constant // typedef enum { VOUT_WIDE = 0, VOUT_NARROW = 1, } VOUT_RATIO; typedef enum { VAUX_NONE = 0, // No Aux VAUX_VG = 1, // Standard Aux, video and graphics VAUX_VONLY = 1, // Standard Aux, video only } VOUT_AUX; #if 0 ____DMW_PROGRAM____() #endif //------------------------------------------------------------------ // ProgramInfo ±¸Á¶Ã¼ typedef enum TUNE_METHOD_t { TUNE_METHOD_NONE = 0, TUNE_METHOD_ByPIDs = 1, TUNE_METHOD_ByCVCT = 2, TUNE_METHOD_ByTVCT = 3, TUNE_METHOD_ByVCT = 4, TUNE_METHOD_ByPSI = 5, TUNE_METHOD_ByUser = 6, //TUNE_METHOD_By1394 = ?? } TUNE_METHOD; #define TuneMethodString(m) ( \ (m)==TUNE_METHOD_ByPIDs ? "By PIDs" : \ (m)==TUNE_METHOD_ByCVCT ? "By CVCT" : \ (m)==TUNE_METHOD_ByTVCT ? "By TVCT" : \ (m)==TUNE_METHOD_ByVCT ? "By xVCT" : \ (m)==TUNE_METHOD_ByPSI ? "By PSI" : \ (m)==TUNE_METHOD_ByUser ? "By User" : "Unknown") // ÇöÀç ½ÃûÁßÀÎ ÇÁ·Î±×·¥ ¹× AV decoding¿¡ ´ëÇÑ Á¤º¸. // typedef struct ProgramAVInfo_t { BOOLEAN active; BOOLEAN analog; // FALSE if digital // input port // tDHL_CapVideoInput input_video; tDHL_CapAudioInput input_audio; UINT32 rf; // RF channel number ModulationType mod; // digital only parameters // TUNE_METHOD method; // 1:PIDs, 2:CVCT, 3:TVCT, 4:PSI UINT32 audio_pid; // Audio PID UINT32 video_pid; // Video PID UINT32 pcr_pid; // PCR PID tDHL_AudioCodingType audio_type; tDHL_VideoCodingType video_type; int major, minor; // by xVCT. int program_number; // by PSI. program number in PAT/PMT // source format info // BOOL seq_hdr_valid; // TRUE if seq_hdr is valid tDHL_VideoSeqHdr seq_hdr; // video parameters // BOOL video_freezed; // TRUE if video is freezed now.. BOOL video_hidden; // TRUE if video is hidden now.. UINT32 video_scrambled_count; UINT32 audio_scrambled_count; // PSI control parameters // MPEG_PAT *pat; MPEG_PMT *pmt; tDHL_PSI_ControlHandle patPsiCtl; tDHL_PSI_ControlHandle pmtPsiCtl; #if USE_CH_MW_ALL_PMT_DOWNLOAD // Àüü ÇÁ·Î±×·¥ÀÇ pmt array. pmtÀÇ ¼ø¼­´Â pat¿¡ ÀÖ´Â ¼ø¼­¿Í ÀÏÄ¡ÇØ¾ß ÇÔ. MPEG_PMT **pmtList; // ÇöÀç ½Ãû ÁßÀÌ ¾Æ´Ñ ´Ù¸¥ ä³ÎÀÇ pmt¸¦ ¹Þ±â À§ÇÑ monitor handle tDHL_PSI_ControlHandle pmtPsiCtl2; #endif // User parameters // UINT32 userParam; // cafrii 060804 add } ProgramAVInfo; #if 0 ____TuneParam____() #endif //----------------------------------------------------------- // TuneParam ±¸Á¶Ã¼´Â DmcTask ³»ºÎ¿¡¼­ ä³Î Æ©´×À» ÇÒ ¶§ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦ // Æ÷ÇÔÇϰí ÀÖ´Ù. // // MW ÇÔ¼ö ³»ºÎ¿¡¼­¸¸ »ç¿ëµÇ¸ç, Application task¿¡¼­ Dmc task·Î // Á¤º¸¸¦ Àü´ÞÇÒ¶§ »ç¿ëµÈ´Ù. // // ¶Ç´Â DmcTask ³»ºÎÀûÀ¸·Î Çʿ信 ÀÇÇØ¼­ ¸¸µç´Ù. // // ChannelTuneFlag // cafrii 031231 change // CTF_Mask_Tuning ³»ÀÇ °ªµéÀº ÀÌÁ¦ ´õÀÌ»ó bit flag°¡ ¾Æ´Ï¶ó enumeration °ªµéÀÌ´Ù. // bitwise AND ¿¬»êÀÚ¸¦ »ç¿ëÇØ¼­ checkÇÏ¸é ¾ÈµÇ°í ²À maskingÇØ¼­ == ¿¬»êÀÚ¸¦ »ç¿ëÇϱ⠹ٶ÷. // #define CTF_Automatic 0 // 0 : Automatic. if xVCT info is invalid, use PSI info. // CVCT -> (TVCT) -> PSI. #define CTF_VCTOnly 1 // 0 : Do not use PSI channel info. VCT only. #define CTF_PSIOnly 2 // 1 : Do not use VCT info. Use only PSI channel info. #define CTF_SemiAutomatic 3 // 3 : Weak automatic change to PSI mode. // VCT¸¦ ¸ø ¹Þ°Å³ª (NoVCT), ¹ÞÀº VCT°¡ À߸øµÇ¾ú°Å³ª (InvalidVCT) // ã´Â ä³ÎÀÌ ¾øÀ¸¸é (ChannelNotFound) ÀÚµ¿À¸·Î PSI·Î ³Ñ¾î°¨. // ¸ðµç PSIP °ü·Ã Á¶°ÇÀº Á¤»óÀε¥, Video DecodingÀÌ ½ÇÆÐÇϸé (VideoError) // ÀÚµ¿À¸·Î PSI·Î ³Ñ¾î°¡Áö´Â ¾Ê´Â´Ù. // RetryMode¿¡¼­´Â º° Àǹ̰¡ ¾ø´Â flagÀÌ´Ù. Philips ¿ä±¸»çÇ׿¡ ÀÇÇØ ¸¸µé¾úÀ½. #define CTF_Mask_Tuning 0x3 #define CTF_SkipQamModulation 0x4 // cafrii 070608 add // ÀϺΠQAMÀ» Áö¿øÇÏÁö ¾Ê´Â platform¿¡¼­´Â VSB¸¸ supportÇÔ. #define CTF_UseVideoFlatten 0x8 // Use flattening function when stop/start video context. // ¾ÆÁ÷Àº ÀÌ Ç÷¡±×¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. // ±×³É 1394¿¡¼­´Â flattenÀ» ¸·¾Æ¹ö·È´Ù. #define CTF_RetryMainChannel 0x10 #define CTF_RetryOtherChannel 0x20 // // ÀÌ µÎ Ç÷¡±×´Â VCT ±â¹ÝÀÇ Tuning (Automatic, SemiAuto Æ÷ÇÔ) ¿¡¼­ »ç¿ëµÊ. // // RetryMainChannel : // VCTÀÇ specific tuning ¹æ½ÄÀ¸·Î ä³Î Æ©´× ÈÄ ¼º°øÇÏÁö ¸øÇßÀ»¶§ ´ëǥä³Î Æ©´×À¸·Î 1ȸ Àç½Ãµµ.. // ex: RfTune(RF 20, 14-2, RetryMainChannel) ·Î callÇÑ °æ¿ì // ¸ÕÀú 14-2·Î specific tuningÀ» tryÇÏ°í ½ÇÆÐÇÏ¸é ±× PTC³»¿¡¼­ ´ëǥä³Î Æ©´×. // ÁÖ·Î »ç¿ëÀÚ°¡ 14.2¿Í °°ÀÌ digit key¸¦ ´©¸¥ °æ¿ì¿¡ »ç¿ëµÊ. // // RetryOtherChannel : // VCT ±â¹Ý Æ©´×¿¡ ½ÇÆÐÇÒ °æ¿ì ´Ù½Ã ´ÙÀ½ ä³Î·Î retry¸¦ ÇÑ´Ù. // major-minor ¸¦ 0-0À¸·Î ÁöÁ¤Çϸé unspecified tuning¸ðµå¿¡¼­ retry°¡ µÇ¾î // °¡Àå ³·Àº ä³ÎºÎÅÍ Çϳª¾¿ try.. // specific tuning ¸ðµå¿¡¼­µµ »ç¿ë°¡´É. // ex: RfTune(14-3, RetryOther) ·Î ÁöÁ¤Çϸé 14-3, 14-4ÀÇ ¼ø¼­·Î ÁøÇà. // // °Ë»ö ¼ø¼­´Â °¡Àå ³·Àº Major/minor ä³ÎºÎÅÍ.. // ä³ÎÀÌ ¾ø°Å³ª ¿¡·¯°¡ ³ª¸é ±×´ÙÀ½ minor ä³Î·Î retry. // RetryMainChannel°ú µ¿½Ã¿¡ »ç¿ëµÉ ¼öµµ ÀÖ´Ù. // // VCT tableÀÇ TSID¿Í ´Ù¸¥ ä³Î(remote channel)Àº ¹«Á¶°Ç Á¦¿ÜÇÑ´Ù. (¼³·É family ä³ÎÀ̶óµµ..) // Family channel¸¸À» ´ë»óÀ¸·Î Æ©´×ÇÏ°í ½ÍÀ¸¸é SkipNonFamilyChannel flag »ç¿ëÇÏ¸é µÊ. // µÎ Ç÷¡±× µ¿½Ã »ç¿ë °¡´É.. // ex: RfTune(RF 20, 14-2, RetryMain, RetryOther, SkipNonFamily) // ¸ÕÀú 14-2 ½Ãµµ. ½ÇÆÐÇϸé MainChannel ½Ãµµ (14-1ÀÌ table¿¡ ÀÖÀ» °æ¿ì 14-1 ½Ãµµ) // Main ä³Î ½ÇÆÐÇϸé 14-3 ÀÌÈĺÎÅÍ ¶Ç ½Ãµµ.. // 13-1°ú °°Àº ä³ÎÀÌ ÀÌ PTC¿¡ À־ ¹«½Ã (13-1Àº family°¡ ¾Æ´Ô) // #define CTF_RetryMainProgram 0x40 // ¾ÆÁ÷ Áö¿øÇÏÁö ¾Ê°í ÀÖÀ½. ±× Àǹ̰¡ ¸íÈ®ÇÏÁö ¾Ê¾Æ¼­.. #define CTF_RetryOtherProgram 0x80 // PSI 󸮿¡ »ç¿ëµÈ´Ù. // RetryMainProgram : // ÁöÁ¤ÇÑ ÇÁ·Î±×·¥À» Æ©´× ½ÃµµÇÑ ÈÄ ¹®Á¦°¡ ÀÖÀ» °æ¿ì ´ëÇ¥ÇÁ·Î±×·¥ Æ©´×À» 1ȸ Àç½Ãµµ. // RetryOtherProgram : // ÇÁ·Î±×·¥ Æ©´×¿¡ ¿¡·¯°¡ »ý±â¸é ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î retry.. // // ä³ÎÀ» tryÇÏ´Â ¼ø¼­´Â PAT array¿¡ ³ªÅ¸³­ index ¼ø¼­ÀÌ´Ù. // ´ëÇ¥ ÇÁ·Î±×·¥Àº ù¹øÂ° ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù. //#define CTF_TryAnyProgram CTF_RetryOtherProgram // À̸§À» º¯°æÇÏ¿´À½. // backward compatibility¸¦ À§Çؼ­ TryAnyProgramµµ ±×³É ³öµÎÀÚ. #define CTF_SkipNonFamilyChannel 0x100 // Family ä³ÎÀ̶õ Major ¹øÈ£°¡ ÀÏÄ¡ÇÏ´Â channel ±×·ìÀ» ÀǹÌÇÑ´Ù. // ÀÌ ¸ðµå¿¡¼­´Â API call ÀÎÀÚ·Î ÁöÁ¤ÇÑ Major¿Í µ¿ÀÏÇÑ Ã¤³Î¸¸ °Ë»ö. // // ÀÌ ¿É¼ÇÀº CTF_RetryOtherChannelÀ» »ç¿ëÇÒ °æ¿ì¿¡¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. // #define CTF_DontRetryTVCTOnCable 0x200 // Cable ȯ°æ¿¡¼­ CVCT ¼ö½Å¿¡ ½ÇÆÐÇÒ °æ¿ì TVCT·Î // ÁÖÀÇ! CVCT°¡ ÀÏ´Ü ¼ö½ÅÀÌ µÈ ÀÌÈÄÀÇ ¿¡·¯(¿¹:syntax »óÀÇ ¿¡·¯)¿¡ ´ëÇØ¼­´Â Ç×»ó retry¸¦ ¾ÈÇÑ´Ù. // CVCT°¡ ¼ö½ÅÀÌ ¾Æ¿¹ ¾ÈµÈ °æ¿ì¿¡´Â ÀÌ Ç÷¡±×°¡ SET°¡ ¾Æ´Ï¸é retry¸¦ ÇÑ´Ù. // // ÀÏ´Ü RfTune¿¡¼­¸¸ Àû¿ëÇÔ. // UCM¿¡ Tvct/Cvct ±¸º° Á¤º¸°¡ ¾øÀ¸¹Ç·Î UidTune¿¡¼­´Â Àû¿ëÇϱⰡ Á» ¾Ö¸ÅÇÔ. #define CTF_RetryAnalogIfSignalUnlock 0x400 // ¸¸¾à digital signalÀÌ lockÀÌ ¾ÈµÇ¸é NTSC·Î Æ©´×À» ÇÏ´Â ¸ðµå. // ÀÏ´Ü caller´Â TuneParam->typeÀº digital·Î ÇØ¼­ TuningÇÔ¼ö¸¦ callÇØ¾ß ÇÑ´Ù. // ¸¸¾à digital lockÀÌ ¾ÈµÇ¸é analog·Î ÀÚµ¿ ÀüȯÀÌ µÈ´Ù. // APP´Â analog·Î ÀÚµ¿ Àüȯ µÇ¾ú´ÂÁöÀÇ ¿©ºÎ¸¦ µî·ÏµÈ callbackÀ» ÅëÇØ¼­ ¾Ë¼ö ÀÖ´Ù. #define CTF_TunerAutoFreqAdjust 0x800 // Tuner frequency ¼³Á¤½Ã¿¡ auto adjust¸¦ ÇÒ°ÍÀÎÁöÀÇ ¿©ºÎ. // SetÀ̸é auto adjust¸¦ ÇÑ´Ù. // ÀÚ¼¼ÇÑ ³»¿ëÀº Tuner DriverÇÔ¼ö ÂüÁ¶. //#define CTF_DontUseAppBannerCallback 0x1000 // TRUEÀ̸é AppBannerCallbackÀ» ºÎ¸£Áö ¾Ê´Â´Ù. // ÀϹÝÀûÀ¸·Î UID tuneÀ» »ç¿ëÇÒ °æ¿ì¿¡´Â ¹Ì¸® banner¸¦ º¸¿©ÁÖ°í // callback¿¡¼­ banner¸¦ º¸¿©ÁÖÁö´Â ¾Ê´Â´Ù. #define CTF_ShowHiddenChannelAlso 0x2000 // cafrii 040114 add // TRUEÀ̸é VCT¿¡¼­ hiddenÀ¸·Î ó¸®µÈ ä³Îµµ µ¿ÀÏÇÏ°Ô ÀÏ¹Ý Ã¤³Îó·³ Æ©´×À» ÇÑ´Ù. // µðÆúÆ®´Â FALSEÀ̸ç ÀÌ °æ¿ì¿¡´Â ´Ù¸¥ Ç÷¡±×¿¡ µû¶ó µ¿ÀÛÀÌ ´Þ¶óÁø´Ù. // Retry ¸ðµåÀÌ¸é ±× ´ÙÀ½ ä³Î·Î °Ç³Ê¶Ù°í, // NoRetry ¸ðµåÀ̸é statusNotFound ¿¡·¯ 󸮸¦ ÇÑ´Ù. // ¾ÆÁ÷ ±¸ÇöÁß... //#define CTF_UpdateChannelDB 0x4000 // TuningÀ» Çϸ鼭 »õ·Ó°Ô ¹ß°ßµÈ ä³ÎµéÀº ±×¶§±×¶§ DB¿¡ update¸¦ ÇÔ. // ÁÖ·Î DRF Æ©´×¿¡ »ç¿ëµÈ´Ù. // ÀÌ Ã¤³Î µ¥ÀÌÅÍ´Â "ÀÓ½Ã" À̱⠶§¹®¿¡ persistentÇÏ¸é ¾ÈµÉµí.. ¾î¶»°Ô volatile·Î ÇÒ±î.. // »õ·Ó°Ô updateµÈ DB entry´Â callbackÀ» ÅëÇØ caller¿¡°Ô reportµÈ´Ù. (new ¶Ç´Â modified) // #define CTF_TunerSetOnly 0x8000 // cafrii 040831 add // Æ©³ÊÀÇ Á֯ļö ¼³Á¤, Demodulator ¼³Á¤ ±îÁö¸¸ ¼öÇàÇÑ´Ù. // POD µ¿ÀÛ ¸ðµå¿¡¼­ ChannelForceTune ¿¡¼­ »ç¿ëµÈ´Ù. // #define CTF_ForceSetTuner 0x10000 // cafrii 060630 add // ÀϹÝÀûÀ¸·Î µ¿ÀÏ RF·Î ÀÌ¹Ì tuner¼³Á¤ÀÌ µÇ¾î ÀÖ´Â °æ¿ì tuner ¼³Á¤ skipÇϴµ¥, // ÀÌ flag°¡ setÀ̸é Ç×»ó °­Á¦·Î tuner setÀ» ¼öÇàÇÑ´Ù. #define CTF_SkipPrescanPidInfo 0x20000 // cafrii 041202 add // set À̸é prescan PID Á¤º¸¸¦ »ç¿ëÇÏÁö ¾Ê°í Ç×»ó VCT/PSI ·ÎºÎÅÍ »õ·Î ÀоîµéÀδÙ. // #define CTF_UseQamAutoMode 0x40000 // cafrii 060724 add // QAM auto mode¸¦ Áö¿øÇÏ´Â demodulatorÀÎ °æ¿ì // DEMOD_QAM_AUTO¸¦ ÀÌ¿ëÇØ¼­ Æ©´×À» ÇÑ´Ù. #define CTF_DontUseVctRecover 0x80000 // cafrii 070201 add // Institutional TVÀÇ °æ¿ì field¿Í ´Þ¸® invalid vctÀÇ °¡´É¼ºÀÌ ³·°í // descrambler µ¿ÀÛÀ» À§Çؼ­ ¹Ýµå½Ã Á¤È®ÇÑ pmt°¡ ÇÊ¿äÇϱ⠶§¹®¿¡ // vct recover ±â´ÉÀ» »ç¿ëÇÏÁö ¾Êµµ·Ï ÇÑ´Ù. // TuneParam // 1. AV Decoding¿¡ ÇÊ¿äÇÑ Request Parameter. RfTuneÀÇ ÇÔ¼ö ÀÎÀÚ·Î applicationÀÌ Á¦°ø. // 2. TuneCallbackÀ» ÅëÇØ¼­ tuningÀÇ °á°ú°¡ ³Ñ°ÜÁú¶§ Dmc code°¡ app·Î Á¦°øÇÔ. typedef struct TuneParam_t { //------------ User Request parameters ---------------------------- // Tuner setting.. int rf; ModulationType type; // Tuner service_type. 0:NTSC, 1:VSB, 2:64QAM, 3:256QAM BOOL tuneRequired; // // --> cafrii 060630 delete, // ÀÌ º¯¼ö´Â ´õÀÌ»ó »ç¿ëµÇÁö ¾Ê´Â´Ù. // // if you want to set tuner hardware also, set this TRUE. // unless, 'tuner setting' will be skipped. // tuningÀ» ÇÏÁö ¾Ê´Â´Ù¸é type °ªÀº ¾Æ³¯·Î±×ÀÎÁö, µðÁöÅÐ ÀÎÁö¸¸ ±¸º°Çϴµ¥ »ç¿ëµÈ´Ù. // ±×·¯³ª rf °ªÀº ³»ºÎÀûÀ¸·Î ±â¾ïµÇ´Â °ªÀ̹ǷΠ¼³·É »ç¿ëµÇÁö ¾Ê´õ¶óµµ ¹Ýµå½Ã ¿Ã¹Ù¸¥ °ªÀ» ÁöÁ¤ÇØÁÖÀÚ. INT32 freqOffset; // cafrii 050315 change name // frequency offset from RF number UINT32 flag; // tune preference flag. ½ÇÁ¦·Î ±× ¿ªÇÒÀº º°·Î ¾øÀ½. // // Rf tuneÀº xVCT->PSI ¼ø¼­·Î preference°¡ Á¤ÇØÁ® ÀÖÀ¸¹Ç·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù. // Uid tuneÀº xVCT À̰ųª PSI À̰ųª µÑ Áß¿¡ Çϳª¸¸ °¡´ÉÇϵµ·Ï °íÁ¤µÇ¾î ÀÖ´Ù. // (CTF_VCTOnly ¶Ç´Â CTF_PSIOnly) // Smart tune¿¡¼­´Â ÀÌ º¯¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù. // major number°¡ 0À̸é PSI tuneÀ» ÀǹÌÇϵµ·Ï µÇ¾î ÀÖÀ½. // by xVCT UINT16 major, minor; // xVCT channel info. // CVCT first. (if cable) // and if fail or Air, TVCT later. // if tuning is failed at last, following action will be decided according to flag. // by PSI UINT16 progNumber; // PAT/PMT program info. // if progNumber is zero, use first program in PAT. // Video/Audio decoding.. UINT32 pcrPid, vidPid, audPid; // pre-scanned PID info. // if you want to skip pids info, just set to 0 for all of these. tDHL_VideoCodingType vidType; tDHL_AudioCodingType audType; // cafrii 061114 add // driver¿¡¼­ AC3¿Í MPEG audio ±¸ºÐÇÏÁö ¸øÇÑ´Ù¸é º°µµ·Î app¿¡¼­ // Á¤º¸¸¦ ³Ñ°ÜÁà¾ß ÇÑ´Ù. #if 0 //---------------- internal -------------------------------------- // // ÀÌÇÏ Çʵå´Â DMC task¿¡¼­ AV decoding ÀÛ¾÷¿¡ ÇÊ¿äÇÑ ³»ºÎ »óÅ º¯¼ö¸¦ ÀúÀåÇÏ´Â °ø°£ÀÌ´Ù. MPEG_PAT *pat; MPEG_PMT *pmt; xvctPtr_t vctPtr; VideoStreamDescriptor *vidDesc; tDHL_AudioCodingType audType; #endif } TuneParam; typedef struct CaptureParam_t { tDHL_CapVideoInput input_video; tDHL_CapAudioInput input_audio; } CaptureParam; #if 0 ____CompleteCallback____() #endif //----------------------------- // // UID TuneÀ¸·Î ä³Î Æ©´×½Ã TuneCallbackÀ¸·Î ³Ñ°ÜÁö´Â Param // typedef struct AppRfTuneCallbackParam_t { ProgramAVInfo *program; // last tune status. struct xvct *vct; MPEG_PAT *pat; MPEG_PMT *pmt; const TuneParam *tuneParam; // »ç¿ëÀÚ°¡ tuning¿¡ ³Ñ°ÜÁØ ±× pointer´Â ¾Æ´Ï´Ù. // ÀϺΠflow logic¿¡ ÀÇÇØ¼­ ÃÖÃÊ ³»¿ë°ú ´Þ¶óÁ³À» ¼öµµ ÀÖ´Ù. // callback ÇÔ¼ö°¡ ¸®ÅÏµÈ ÀÌÈÄ¿¡´Â ÀÌ Æ÷ÀÎÅÍ´Â ´õÀÌ»ó À¯È¿ÇÏÁö ¾Ê´Ù. // applicationÀº ÀÌ ³»¿ëÀ» Àý´ë·Î º¯°æÇÏ¸é ¾ÈµÈ´Ù. } AppRfTuneCallbackParam; typedef AppRfTuneCallbackParam AppUidTuneCallbackParam; // // UID Tune ¹æ½ÄÀº »ç¶óÁ³Áö¸¸ ±âÁ¸ÀÇ structure´Â ±×´ë·Î À¯ÁöÇÑ´Ù. // typedef void (*DMC_FN_TUNE_COMPLETED)(STATUS status, UINT32 userParam, AppRfTuneCallbackParam *param); // // tune commandÀÇ °æ¿ì¿¡ Ưº°ÇÏ°Ô »ç¿ëµÇ´Â function type // #if 0 ____NotifyCallback____() #endif //----------------------------------------------------------------- // °¢Á¾ Notification Event ±¸Á¶Ã¼µé.. // cafrii 070322 remove.. // FormatChange, TimingChange µîÀº ÀÌ¹Ì ¿À·¡ ÀüºÎÅÍ »ç¿ëÇÏÁö ¾Ê´Â Á¤º¸µéÀÓ.. // #if 0 // FormatChangeParam: // DMC_NOTIFY_QueryChangeTiming notification À̺¥Æ®¿Í ÇÔ²² ³Ñ°ÜÁö´Â // parameter #define FORMAT_CHANGE_AT_RUNTIME 1 #define FORMAT_CHANGE_AT_VIDEOSTART 2 // channel change, video start, etc... // // FormatChangeParam::reason ¿¡ »ç¿ëµÇ´Â °ª. typedef struct { int reason; // [IN] 1: running change 2: new channel BOOL bSourceFormatChanged; // [IN] TRUE if source format is changed BOOL analog; // [IN] TRUE if current video is analog const TLVideoDisplay *display; // [IN] reference: current display const DetailedVideoTiming *timing; // [IN] reference: current timing TLVideoContext *context; // [IN] reference: current VideoContext AuxVideoSetting aux; // [IN] reference: current aux setting tDHL_DispARC adjustment; // [IN] reference: current adjustment tDHL_VideoSeqHdr *lastSeqHdr; // [IN] reference: last MPEG sequence header // you can find new sequence header from 'context' // if analog context, this is NULL BOOL changeNow; // [OUT] TRUE if app want to change timing right now! const DetailedVideoTiming *returnTiming; // [OUT] the timing app want. const TLVideoDisplay *returnDisplay; // [OUT] the display app want. AuxVideoSetting returnAux; // [OUT] the aux app want. tDHL_DispARC returnAdjustment; // [OUT] AR adjustment } FormatChangeParam; // TimingChangeCompleteParam: // DMC_NOTIFY_TimingChangeComplete notification À̺¥Æ®¿Í ÇÔ²² ³Ñ°ÜÁö´Â // parameter // // ÀÌ À̺¥Æ®´Â Timing Change Query¿¡¼­ ApplicationÀÌ changeNow¸¦ ¸®ÅÏÇϸé // Ç×»ó ºÒ·ÁÁø´Ù. // timingÀÌ Á¤¸»·Î º¯°æµÇ¾ú´ÂÁö ¾Æ´ÑÁöÀÇ Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù. // // timing°ú´Â °ü°è¾ø´Â parameter (tDHL_DispARC) °°Àº Á¤º¸´Â // ½ÇÁ¦·Î Àû¿ëÀÌ µÇ¾ú´ÂÁö ¾Æ´ÑÁö¸¦ ¾Ë ¼ö´Â ¾ø´Ù. // ¿À·ÎÁö Main°ú AuxÀÇ display timing¿¡ °üÇØ¼­¸¸ Á¤º¸¸¦ ÁØ´Ù. // typedef struct { STATUS status; // [IN] °¡Àå ¸¶Áö¸·¿¡ ¹ß»ýÇÑ ¿¡·¯. BOOL changed; // [IN] timingÀÌ º¯°æ µÇ¾ú´Â°¡? // timingÀº º¯°æµÇ¾úÁö¸¸ ´Ù¸¥ ¿¡·¯°¡ ¹ß»ýÇßÀ» ¼öµµ ÀÖÀ¸¸ç, // timingÀÌ º¯°æµÇÁö ¾Ê¾ÒÀ» ¼öµµ ÀÖ´Ù. const TLVideoDisplay *display; // [IN] ÇöÀç display const DetailedVideoTiming *timing; // [IN] ÇöÀç timing // Note! // ¸¸¾à timing(resolution)ÀÌ º¯°æµÇÁö ¾Ê¾Ò´Ù¸é ±âÁ¸ÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù. // »õ·Î¿î timingÀ¸·Î º¯°æµÇ¾ú´ÂÁö´Â Á¤È®È÷ ¾Ë ¼ö´Â ¾ø´Ù. // } TimingChangeCompleteParam; #endif // 0 // cafrii 060609 add // ScreenAdjustmentParam: // DMC_NOTIFY_ScreenAdjustment À̺¥Æ®¿Í ÇÔ²² Àü´ÞµÇ´Â param // // typedef struct { // input: BOOL bSourceWide; BOOL bDisplayWide; // output: // HAL api´Â hd, sd º°µµ·Î arc Àû¿ëÀÌ Áö¿øµÈ´Ù. (¹°·Ð platform¿¡ µû¶ó Áö¿ø Á¤µµ´Â Â÷À̰¡ ³²) tDHL_DispARC adjustment_hd; tDHL_DispARC adjustment_sd; // if adjustment == ARA_USER_SPECIFIC, coordination info required. // cafrii 070102, no support ARA in MW level. // app can use ARA directly by using driver callback. //TL_RECT cord; DHL_Rect rect; // cafrii 060928 add BOOL bKeepCurrent; // cafrii 080929 } ScreenAdjustmentParam; // PSIChangeNotifyInfo: // DMC_NOTIFY_PATChanged, DMC_NOTIFY_PMTChanged À̺¥Æ®¿Í ÇÔ²² ³Ñ°ÜÁö´Â // parameter // // PAT change eventÀÇ °æ¿ì, »ç¿ëÀÚ´Â ¾î¶² programÀ» decodingÇÒ °ÍÀÎÁö // ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. // PAT change event´Â ½ÇÁ¦·Î PAT processingÀ» Çϱâ Àü¿¡ ºÒ¸®¸ç // program_index Çʵ带 ÅëÇØ¼­ programÀ» ¼±ÅÃÇÏ°Ô µÈ´Ù. // // PMT change eventÀÏ °æ¿ì¿¡´Â »ç¿ëÀÚ´Â // // typedef struct { BOOL pmtchanged; // [IN] 0 : pat change, 1 : pmt change MPEG_PAT *pat; // [IN] new PAT MPEG_PMT *pmt; // [IN] new PMT // cafrii 060804 add UINT32 userParam; // [IN] user parameter passed at channel tuning // usually channel id info (UID or similar) // cafrii 060804 add const ProgramAVInfo *av; // [IN] current AV info. do not change values inside. // AV mutex is locked state. // first PSI´Â ÀÚµ¿ÀûÀ¸·Î °É·¯Á®¼­ reportµÇÁö ¾Ê±â ¶§¹®¿¡ // user°¡ ÀÌ flag¸¦ ½Å°æ¾µ ÇÊ¿ä ¾øÀ½. //BOOL first; // [IN] TRUE if this is first PSI after channel tuning. // normally, this first PSI should be ignored. // cafrii 060303 // user°¡ ignore ÇÒ ¼ö ÀÖ´Â optionÀº »èÁ¦ÇÔ. ´õÀÌ»ó Áö¿øÇÏÁö ¾ÊÀ½. //BOOL ignore; // [OUT] TRUE if app want to ignore this PSI. // PAT : throw new pat away, and do not start PMT monitoring. // PMT : throw new pmt away, and do not restart video. int program_index; // [OUT] PAT only. // The program index (not program number) you want to play. // subject to change!! } PSIChangeNotifyInfo; // cafrii 110331 add // argument of DMC_NOTIFY_AllPsiReceived // typedef struct { const ProgramAVInfo *av; // current AV info. do not change values inside. } AllPsiRxNotifyInfo; //------------------------------ // DMW_NOTIFY_MajorChangeEvent // typedef struct MajorChangeEventParam_t { BOOL ignore; // [OUT] 0: if app want to ignore this major change. 1: leave all thing to DMC. } MajorChangeEventParam; typedef struct AudioDecodeStartParam_t { UINT16 audPid; // [IN] Audio PID.. it may be 0 when NO AUDIO channel. UINT16 pcrPid; // [IN] PCR PID tDHL_AudioCodingType audType; // [IN] int mode; // [IN] MOCHA_ATSC_INPUT or MOCHA_NTSC_INPUT STATUS result; // [OUT] if result is statusNotImpl, DMC MW do default action. // default is statusNotImpl. // if result is not statusOK, then Tuning will failed. } AudioDecodeStartParam; typedef struct AudioDecodeStopParam_t { int mode; // [IN] MOCHA_ATSC_INPUT or MOCHA_NTSC_INPUT STATUS result; // [OUT] if result is statusNotImpl, DMC MW do default action. // default is statusNotImpl. // if result is not statusOK, then Tuning will failed. } AudioDecodeStopParam; typedef struct AudioPidSelectParam_t { MPEG_PMT *pmt; // pmt->streams[x].stream_type À» º¸°í Audio streamÀ» ¼±ÅÃ. (MPEG-1, 2, AAC, ..) // language´Â descriptorÁß¿¡¼­ ISO 639 Language descriptor¸¦ º¸°í ¼±ÅÃ. xvctChannelPtr_t vctChannel; // channel->descriptor_length, channel->descriptors¸¦ ÀÌ¿ëÇÏ¿© SLD Á¤º¸ ÃßÃâ. UINT16 returnAudioPid; tDHL_AudioCodingType returnAudioType; } AudioPidSelectParam; typedef struct VideoPidSelectParam_t { MPEG_PMT *pmt; xvctChannelPtr_t vctChannel; UINT16 returnVideoPid; tDHL_VideoCodingType returnVideoType; } VideoPidSelectParam; typedef struct { UINT16 vid_pid; UINT16 aud_pid; UINT16 pcr_pid; UINT16 pmt_pid; } DecodingPidReadyParam; // arzhna, 100203 // pod Á¤º¸¸¦ ¾ò¾î¿À±â À§ÇÑ struct typedef struct { BOOL isPodInserted; } PodStatusParam; //------------------------------ // // °¢Á¾ Notify À̺¥Æ® // typedef enum DMC_NOTIFY_Event_t { //--------------------------- //DMC_NOTIFY_QueryChangeTiming = 101, // // DMC ÂÊ¿¡¼­ ¹Ù·Î timingÀ» º¯°æÇÒ °ÍÀÎÁö¸¦ query ÇÑ´Ù. // changeNow °ªÀÌ TRUEÀÌ¸é º¯°æÀ» ÇÑ´Ù. // returnTiming °ªÀÌ non-NULLÀ̸é app ¿¡¼­ ¿ä±¸ÇÑ ±× ŸÀ̹ÖÀ» »ç¿ëÇϰí, // NULLÀ̸é MW¿¡¼­ Á÷Á¢ timingÀ» º¯°æÇÑ´Ù. // Parameter: // [0] FormatChangeParam * //DMC_NOTIFY_TimingChangeComplete, // // source format º¯°æ µîÀÇ ÀÌÀ¯·Î resolution º¯°æÀÌ ¿Ï·áµÇ¾ú´Ù. // // Parameter: // [0] TimingChangeCompleteParam * // DMC_NOTIFY_ScreenAdjustment = 103, // Parameter: // [0] ScreenAdjustmentParam * //--------------------------- DMC_NOTIFY_PATChanged = 201, DMC_NOTIFY_PMTChanged, // Parameter: // [0] PSIChangeNotifyInfo * DMC_NOTIFY_PATChangeError, DMC_NOTIFY_PMTChangeError, DMC_NOTIFY_AllPsiReceived, // ¸ðµç pmt°¡ ´Ù ¹Þ¾ÆÁ³À½À» ¾Ë¸². // Parameter: // [0] AllPsiRxNotifyInfo * //--------------------------- DMW_NOTIFY_MajorChangeEvent = 211, // Parameter: // [0] MajorChangeEventParam * //--------------------------- DMW_NOTIFY_AudioDecodeStart = 221, // Audio decodingÀÌ ½ÃÀÛµÉ ¶§ callµÊ. // ¾Æ¹«°Íµµ ÇÏÁö ¾ÊÀ¸¸é µðÆúÆ® µ¿ÀÛÀ» ÇÔ. (Dmc_AudioStart call) // ¸¸¾à ƯÁ¤ 󸮸¦ Çϱ⸦ ¿øÇÏ¸é ¼öÇà ÈÄ¿¡ result¸¦ setting. // Parameter: // [0] AudioDecodeStartParam * DMW_NOTIFY_AudioDecodeStop = 222, // Audio decodingÀÌ ³¡³¯¶§ callµÊ. // Parameter: // [0] AudioDecodeStopParam * DMW_NOTIFY_SelectAudio = 223, // Audio ProgramÀ» ¼±ÅÃÇÒ ¶§, // Parameter: // [0] AudioPidSelectParam * DMW_NOTIFY_SelectVideo = 224, // Video ProgramÀ» ¼±ÅÃÇÒ ¶§, // Parameter: // [0] VideoPidSelectParam * //--------------------------- DMW_NOTIFY_VideoFreezeEndEvent = 231, // Parameter: // [0] BOOL *bProcessed: default is FALSE. // default action is Mute Off. // If you process mute off by yourself, set this flag TRUE. DMW_NOTIFY_AudioInfo = 240, // Parameter: // none DMW_NOTIFY_DecodingPidReady = 241, // Parameter: // [0] DecodingPidReadyParam * // //--------------------------- DMC_NOTIFY_ErrorInVideo = 301, // // Video °ü·ÃÇÏ¿© ¿¡·¯°¡ ¹ß»ýÇÏ¿© È­¸é¿¡ ¹®Á¦°¡ »ý±è. // »ç¿ëÀÚÀÇ Á¶ÀÛ¿¡ ÀÇÇÏ¿© º¹±¸°¡ °¡´ÉÇÒ ¼ö ÀÖÀ½. DMC_NOTIFY_CriticalError, // // ½Ã½ºÅÛ ¿¡·¯°¡ ¹ß»ý. // ¸®ºÎÆÃÀÌ ÇÊ¿äÇÔ. //--------------------------- DMC_NOTIFY_CaPmt = 401, // // Channel Tune ȤÀº PMT Change µîÀ¸·Î º¯°æµÈ PMT¸¦ // Cable Card¿¡ Àü´ÞÇØ¾ßÇÔ // CableCard°¡ ¾ø´Â project¿¡¼­´Â ÀÌ À̺¥Æ®¸¦ ó¸® ÇÏÁö ¾Ê´Â´Ù. DMC_NOTIFY_IsPodInserted, // // Channel Tune ȤÀº PMT Change µîÀ¸·Î º¯°æµÈ PMT¸¦ // Cable Card¿¡ Àü´ÞÇØ¾ßÇÔ // CableCard°¡ ¾ø´Â project¿¡¼­´Â ÀÌ À̺¥Æ®¸¦ ó¸® ÇÏÁö ¾Ê´Â´Ù. } DMC_NOTIFY_Event; #ifdef __DEFINE_DMC_STRING_FN__ // Dmc_Channel_Task.c ¿¡¼­´Â ¾Æ·¡ ÇÔ¼ö¸¦ Á¤ÀǸ¦ Çϸç, ´Ù¸¥ source¿¡¼­´Â ¼±¾ðÀ» ÇÑ´Ù. // ±¸Çö (definition)À» À̰÷¿¡ µÎ´Â ÀÌÀ¯´Â enum definitionÀÌ À̰÷¿¡ Àֱ⠶§¹®.. const char *Dmc_NotifyEventString(int ev) { return ( //(ev) == DMC_NOTIFY_QueryChangeTiming ? "DnfQueryChangeTiming" : //(ev) == DMC_NOTIFY_TimingChangeComplete ? "DnfTimingChangeComplete" : (ev) == DMC_NOTIFY_ScreenAdjustment ? "DnfScreenAdjust" : (ev) == DMC_NOTIFY_PATChanged ? "DnfPATChanged" : (ev) == DMC_NOTIFY_PMTChanged ? "DnfPMTChanged" : (ev) == DMC_NOTIFY_AllPsiReceived ? "DnfAllPsiRx" : (ev) == DMC_NOTIFY_PMTChangeError ? "DnfPMTChangeError" : (ev) == DMW_NOTIFY_MajorChangeEvent ? "DnfMajorChangeEvent" : (ev) == DMW_NOTIFY_AudioDecodeStart ? "DnfAudioDecodeStart" : (ev) == DMW_NOTIFY_AudioDecodeStop ? "DnfAudioDecodeStop" : (ev) == DMW_NOTIFY_SelectAudio ? "DnfSelectAudio" : (ev) == DMW_NOTIFY_SelectVideo ? "DnfSelectVideo" : (ev) == DMW_NOTIFY_VideoFreezeEndEvent ? "DnfVideoFreezeEndEvent" : (ev) == DMW_NOTIFY_AudioInfo ? "DnfAudioInfo" : (ev) == DMW_NOTIFY_DecodingPidReady ? "DnfDecodingPidReady" : (ev) == DMC_NOTIFY_ErrorInVideo ? "DnfErrorInVideo" : (ev) == DMC_NOTIFY_CriticalError ? "DnfCriticalError" : (ev) == DMC_NOTIFY_CaPmt ? "DnfCaPmt" : (ev) == DMC_NOTIFY_IsPodInserted ? "DnfIsPodInserted" : "Dnf??" ); } #else // ÀÏ¹Ý ´Ù¸¥ module¿¡¼­´Â ¼±¾ð¸¸ Çϵµ·Ï ÇÑ´Ù. // const char *Dmc_NotifyEventString(int ev); #endif //------------------------------- // °¢Á¾ ÃʱâÈ­ ¹× µî·Ï ÇÔ¼ö STATUS Dmc_InitChannelTask(void); void Dmc_EndChannelTask(void); //------------------------------- // ä³Î º¯°æ ÇÔ¼ö #define ONE_PART_CHANNEL_INDICATOR 1024 // minor ¹øÈ£ ÀÚ¸®¿¡ ÀÌ °ªÀÌ µé¾î ÀÖÀ¸¸é majorÀÇ °ªÀ» OnePartChannel ¹øÈ£·Î ÇØ¼®ÇÏ¿© Æ©´×À» ÇÑ´Ù. /* major minor +-----------------+ +-----------------+ 0000 0011 1111 xxxx 0000 00xx xxxx xxxx (low 10 bits) nnnn nn nnnn nnnn (total 14 bits, 16383 max) */ #define IsOnePartChannelNumber(major) ((major) >= 0x3f0) #define ConvertToOnePartChannelNumber(major,minor) \ ((((major) & 0x00F)<<10) + ((minor) & 1023)) // ex: // g_UCM[x].Major = ConvertToOnePartChannelNumber(major, minor); // g_UCM[x].Minor = ONE_PART_CHANNEL_INDICATOR; #define ConvertToTwoPartChannelNumber(ch,major,minor) \ (((major) = 0x3f0 + (((ch)>>10) & 0xf)), ((minor) = ((ch) & 0x3ff))) // ex: // ConvertToTwoPartChannelNumber(g_UCM[x].Major, major, minor); // Dmc_ChangeRfChannel(major, minor, ...); // unified access to VCT major/minor, cafrii 040727 add // // example) major = MajorNumberInCVCT(&cvct->channel[0]); // minor = MinorNumberInCVCT(&cvct->channel[0]); // #define MajorNumberInCVCT(ch) (IsOnePartChannelNumber((ch)->major_channel_number) ? \ ConvertToOnePartChannelNumber((ch)->major_channel_number, (ch)->minor_channel_number) : \ (ch)->major_channel_number) #define MinorNumberInCVCT(ch) (IsOnePartChannelNumber((ch)->major_channel_number) ? \ ONE_PART_CHANNEL_INDICATOR : (ch)->minor_channel_number) #define MajorNumberInTVCT(ch) ((ch)->major_channel_number) #define MinorNumberInTVCT(ch) ((ch)->minor_channel_number) #if 0 ____APIs____() #endif #if 0 ____Tune_APIs____() #endif STATUS Dmc_ChangeRfChannelByTuneParam(TuneParam *param, BOOL bWaitForCompletion, void *fn, UINT32 userparam); // // Change channel by tuneParam. STATUS Dmc_ChangeRfChannel(int rf, ModulationType type, BOOL bWaitForCompletion, void *fn, UINT32 userparam); // // Change channel of 'rf' and 'type'. // it works without UCM DB. // tune policy is 'CTF_Automatic' in which mode we scan xVCT -> PSI. // STATUS Dmc_ChangeRfChannel2(int rf, ModulationType type, int pPid, int vPid, int aPid, int major, int minor, int progNumber, BOOL bWaitForCompletion, void *fn, UINT32 userparam); // // STATUS Dmc_ChangeExtInput(tDHL_CapVideoInput video, tDHL_CapAudioInput audio, BOOL bWaitForCompletion); // // change to external input // STATUS Dmc_StopVideo(void); // // Stop All video (and associated audio). // Can be used all channel/input type. (Analog/Digital/1394) STATUS Dmc_RestartVideo(void); STATUS Dmc_FreezeVideo(UINT32 bFreeze, BOOL bWaitComplete); STATUS Dmc_HideVideo(UINT32 bHide, BOOL bWaitComplete); STATUS Dmc_ChangeAudioStream(UINT32 audioPID, UINT32 pcrPID, tDHL_AudioCodingType audioType); // cafrii 070412 add more arguments STATUS Dmc_EnqueueDPC(DMC_FN_DPC dpcfn, UINT32 param1, UINT32 param2, UINT32 param3, UINT32 param4, BOOL bWaitComplete); BOOL Dmc_CheckCancel(void); // // Check if current message (TRUE returned if cancelled) // // this function is useful in APP callback task. // App can use this function to check current msg is cancelled or not. // // NOTE! Do not call this function in arbitrary task except DMC task. // If called from arbitrary task, it will return FALSE. //------------------------------- // Utility functions #define AuxVideoSetting void* STATUS Dmc_ChangeDisplay(VOUT_COLOR color, VOUT_FORMAT format, VOUT_RATIO ratio, tDHL_DispARC ScrAdj, AuxVideoSetting AuxType); // // Changes display and timing. // 'color', 'format', 'Ratio_4x3' is one of VOUT_XXX constants. // 'ScrAdj' is one of tDHL_DispARC enumeration values. // default value is DEFAULT_ADJUSTMENT. // If invalid adjustment option is used, default value will be used instead. // 'AuxType' is one of VAUX_XXX constants. // // This function is working synchronously. STATUS Dmc_ChangeVideoAdjustment(tDHL_DispARC adj_hd, tDHL_DispARC adj_sd); //-------- // Following functions are convenient functions to use Dmc_ChangeDisplayEx. // int Dmc_WhichATSCFormat(tDHL_VideoSeqHdr *seq); // // This function find out which ATSC format current input MPEG stream belongs to. // It returns the stream number of ATSC Sarnoff 36 stream. DHL_OS_TASK_ID Dmc_GetCurrentTaskID(void); // // Get Current Task ID. BOOL Dmc_IsDmcTask(void); // // Return TRUE if current task is DMC task tDHL_TSD *Dmc_GetCurrentTsd(void); // // Get Current active TSD. DMC_FN_NOTIFY Dmc_RegisterNotificationCallback(DMC_FN_NOTIFY callback); // notification callback. // °¢Á¾ º¯°æ Á¤º¸°¡ ¹ß»ýÇϸé callbackÀ» callÇÑ´Ù. // unregisterÇÏ·Á¸é NULLÀ» ÁöÁ¤. void DMC_RegisterVideoCallback(BOOL bset); // video°ü·Ã callbackÀÇ ¼³Á¤/ÇØÁö¸¦ À§ÇÑ ÇÔ¼ö // autoscanÇÒ ¶§ ºÒÇÊ¿äÇÑ callbackÀÌ È£ÃâµÇ¾î¼­ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦¸¦ Â÷´ÜÇÔ UINT32 Dmc_GetSystemRunningTime(void); // cafrii 060720 add STATUS Dmc_ChangeAudioStream(UINT32 audioPID, UINT32 pcrPID, tDHL_AudioCodingType audioType); //cafrii 070830 add // // restart audio only. STATUS Dmc_ChangeVideoStream(UINT32 videoPID, UINT32 pcrPID, tDHL_VideoCodingType videoType); //cafrii 070830 add. // // restart video only. //----------------------------------------------------------------- #if 0 ____ChannelAV____() #endif // Dmc_ChannelAV.c //------------------------------ // PSI Á¤º¸ ÂüÁ¶ //extern MPEG_PAT *dmc_pat; //extern MPEG_PMT *dmc_pmt; //void Dmc_LockPsiMutex(BOOL bLock); // Rule about psi table access: // 1. dmc_pat/dmc_pat¸¦ ÂüÁ¶ÇÏ´Â ¸ðµç ÀÓÀÇÀÇ Å½ºÅ©´Â lock µÈ »óÅ¿¡¼­ Á¢±ÙÇØ¾ß ÇÑ´Ù. // 2. DMC ŽºÅ©´Â dmc_pat/dmc_pat¸¦ º¯°æÇÒ °æ¿ì lock µÈ »óÅ¿¡¼­ º¯°æÇØ¾ß ÇÑ´Ù. // 3. dmc_p?tPsiCtlÀº read only¿ëµµ·Î¸¸ »ç¿ëÇÏ¿©¾ß Çϸç, // 4. ¿ª½Ã ÂüÁ¶¸¦ Çϱâ À§Çؼ­´Â lockµÈ »óÅ¿¡¼­ Á¢±ÙÇØ¾ß ÇÑ´Ù. ProgramAVInfo *Dmc_LockAVMutex(void); void Dmc_UnlockAVMutex(void); void Dmc_GetCurrentProgramInfo(ProgramAVInfo *program); // ÇöÀç ½ÃûÁßÀÎ È­¸éÀÌ Á¤º¸. // ƯÈ÷ RF·Î Æ©´×ÇÑ °æ¿ì ¾î¶² »óÅÂÀÎÁö ¾Æ´Âµ¥ À¯¿ëÇÏ´Ù. int Dmc_GetCurrentProgramNumber(void); // ÇöÀç ½ÃûÁßÀÎ program number¸¦ ¸®ÅÏ. // ProgramInfo¿¡ ÀÖ´Â °ª°ú´Â ¾à°£ ´Ù¸¦ ¼ö ÀÖ´Ù. // ProgramInfo¿¡ ÀÖ´Â °ªµéÀº ¸ðµÎ ¸¶Áö¸·À¸·Î DecodingÀÌ µ¿ÀÛÇÏ¿´À» ½ÃÁ¡¿¡¼­ÀÇ °ªÀ̸ç, // Dmc_GetCurrentProgramNumber()°¡ ¸®ÅÏÇÏ´Â °ªÀº ÇöÀçÀÇ program_numberÀÌ´Ù. // ¸¸¾à ÇöÀç Video°¡ Stop »óŶó¸é, program_number´Â µðÆúÆ® °ª(-1)À» ¸®ÅÏÇÑ´Ù. BOOL Dmc_GetVideoSequenceHeader(tDHL_VideoSeqHdr *seq); // // Get Current sequence header. // Return FALSE if Sequence header is not available now. #if !USE_EPG_MW_PSI_DOWNLOAD STATUS Dmc_PausePsiMonitor(UINT32 bPause); // // Pause/Resume PSI monitor (PAT, PMT) // // If this function is called in DMC callback task, // 'bWaitCompletion' is ignored and working synchronously. #endif void Dmc_PrintProgramInfo(int dbglevel); DMC_FN_NOTIFY Dmc_RegisterDecodeStartCallback(DMC_FN_NOTIFY callback); // 1394 PTS set callback // callbackÀÇ param1Àº program_number, param2´Â bIgnoredInDmc.. // PMT°¡ »õ·Î ¼ö½ÅµÉ ¶§¸¶´Ù ºÒ¸®´Â callback DMC_FN_NOTIFY Dmc_RegisterDecodeStopCallback(DMC_FN_NOTIFY callback); // VideoStopÀÌ µÉ¶§¸¶´Ù ºÒ¸®´Â callback // ÇöÀç argument´Â ¸ðµÎ undefined void Dmc_RegisterChannelSymbols(void); #ifdef __cplusplus } #endif #endif // DMW_CHANNEL_H /******************************************************************** 1.06 2005/4/15 timeout variables extern 1.05 2005/3/28 DMW_HAL_AfcSearchMultiple ¿¡ timeout param Ãß°¡ 1.04 2005/3/16 NtscFreqOffset->freqOffset À̸§ º¯°æ NTSC FineTuneÀ» À§ÇÑ FreqTuneMode Ãß°¡ 1.03 2004/12/06 DMW_HAL_TunerSetFrequency Ãß°¡ 1.02 2004/12/02 CTF_SkipPrescanPidInfo Ãß°¡ 1.01 2004/12/01 AppBannerParam¿¡ program number Ãß°¡ 1.00 2004/11/? History °ü¸® ½ÃÀÛ 040831 add CTF_TunerSetOnly 040528 add EnqueDPC add userparam in channelTuneCallback move ChannelDemux APIs to its own header dmc_p?tPsiCtl export 040114 add flag of hidden channel processing ********************************************************************/