sipsiprv.h
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:16k
源码类别:

DVD

开发平台:

C/C++

  1. #if !defined(SIPSIP_H)
  2. #define SIPSIP_H
  3. #include "gendef.h"
  4. typedef struct
  5. {
  6. UINT32 handle;
  7. KB_SIPatStruct* pstPat;
  8. UINT8 nType;
  9. INT8 nVersionNumber;
  10. INT8 nCurrVersionNumber;
  11. UINT8 nUsedFlag;
  12. }PATINFO;
  13. typedef struct
  14. {
  15. UINT32 handle;
  16. UINT16 nNitPid;
  17. KB_SINitStruct* pstNit;
  18. UINT8 nType;
  19. INT8 nVersionNumber;
  20. INT8 nCurrVersionNumber;
  21. UINT8 nUsedFlag;
  22. }NITINFO;
  23. typedef struct
  24. {
  25. UINT32 handle;
  26. UINT16 nProgramMapPid;
  27. UINT16 nSvcNO;
  28. KB_SIPmtStruct* pstPmt;
  29. UINT8 nType;
  30. INT8 nVersionNumber;
  31. INT8 nCurrVersionNumber;
  32. UINT8 nUsedFlag; 
  33. }PMTINFO;
  34. typedef struct
  35. {
  36. UINT32  handle;
  37. INT32  nSvcID;
  38. INT16  nMaxServiceNum;
  39. KB_SISdtStruct*  pstSdt;
  40. UINT8  nType;
  41. INT8  nVersionNumber;
  42. INT16  nServiceNum;
  43. INT8  nCurrVersionNumber;
  44. UINT8  nUsedFlag;
  45. }SDTINFO;
  46. typedef struct
  47. {
  48. UINT32  handle;
  49. INT32  nBouquetId;
  50. KB_SIBatStruct*  pstBat;
  51. INT8  nBatNumber;
  52. UINT8  nType;
  53. INT8  nVersionNumber;
  54. INT8  nCurrVersionNumber;
  55. UINT8  nUsedFlag;
  56. }BATINFO;
  57. typedef struct
  58. {
  59.     KB_SIEitPF* pstEitPresent;
  60. KB_SIEitPF* pstEitFollow;
  61. UINT32 handle;
  62. INT32 nSvcID;
  63.     INT16 nTableId;
  64. UINT8 nType;
  65. INT8 nVersionNumber;
  66. INT8 nCurrVersionNumber;
  67. UINT8 nUsedFlag;
  68. }EITPFINFO;
  69. typedef struct
  70. {
  71. UINT32 handle;
  72. INT32 nSvcID;
  73. KB_SIEitSch* pstEinSchInfo;
  74. INT8 nTableDone[2];
  75. INT8 nCurrVersionNumber;
  76. INT8 nReceivedFlag[64*8]; 
  77. UINT8 nUsedFlag; 
  78. }EITSCHINFO;
  79. typedef struct
  80. {
  81. UINT32 handle;
  82. INT16 nServiceNum;
  83. UINT16 nSvcID[KB_SI_MAX_EIT_SERVICE_NUM];
  84. KB_SIMultiEitSchedule* pstEinSchInfo;
  85. INT8 nTableDone[KB_SI_MAX_EIT_SERVICE_NUM][2];
  86. INT8 nCurrVersionNumber;
  87. INT8 CurrVerNo[KB_SI_MAX_EIT_SERVICE_NUM];
  88. INT8 nReceivedFlag[KB_SI_MAX_EIT_SERVICE_NUM][64*4];
  89. UINT8 nUsedFlag;
  90. }MULTEITSCHINFO;
  91. typedef struct
  92. {
  93. UINT32 handle;
  94. time_t* ptCurrentTime;
  95. UINT8 nUsedFlag;
  96. }TDTINFO;
  97. typedef struct
  98. {
  99. UINT32 handle;
  100. KB_SITot* pTot;
  101. UINT8 nUsedFlag;
  102. }TOTINFO;
  103. typedef struct
  104. {
  105. UINT32 handle;
  106. KB_SICatStruct* pstCat;
  107. UINT8 nType;
  108. INT8 nVersionNumber;
  109. INT8 nCurrVersionNumber;
  110. UINT8 nUsedFlag;
  111. }CATINFO;
  112. typedef struct
  113. {
  114. UINT32 handle;
  115. INT16 nMaxEventStatusNum;
  116. KB_SIRstStruct* pstRst;
  117. INT16 nEventStatusNum;
  118. UINT8 nUsedFlag;
  119. }RSTINFO;
  120. typedef struct
  121. {
  122.    UINT32  whichChannel;
  123.    BOOL    checkCRC;
  124.    UINT8*  outputBuffer; 
  125.    UINT32  skipLength;
  126.    UINT32  copyLength;
  127.    void*   tag;
  128. } T_DMX_Notify;
  129. typedef struct {
  130. UINT32 valid;
  131. UINT32 channelId;
  132. UINT32 subTableId;
  133. } T_ChannelToSubtable;
  134. typedef struct
  135. {
  136. UINT32 handle;
  137.     KB_SIEitSchTimeShift* ptTimeShift;
  138. INT32 nSvcID;
  139.     INT16 nTableId[1];
  140. INT8 nTableDone[1];
  141. INT8 nCurrVersionNumber;
  142. INT8 nReceivedFlag[64*4];
  143. UINT8 nUsedFlag;
  144. }T_EIT_SCHEDULE_TIME_SHIFT_PARA;
  145. enum
  146. {
  147.     SI_UNKNOWN_ERROR = -11,          /* -11 */
  148. SI_NO_FREE_SUBTABLES,            /* -10 */
  149. SI_PROGRAM_NOT_FOUND,            /* -9  */
  150. SI_MEMORY_FULL,                  /* -8  */
  151. SI_NO_AVAILABLE_CHANNELS,        /* -7  */
  152. SI_NO_AVAILABLE_FILTERS,         /* -6  */
  153. SI_INVALID_SECTION_DATA_ID,      /* -5  */
  154.     SI_OSP_ERROR,                    /* -4  */
  155.     
  156. SI_OK = 0,
  157. SI_PROGRAM_EVENT_FOUND           /*  1  */
  158. };
  159. #define SI_NO_EIT_PF_FILTERS (30)
  160. #define SI_NO_EIT_PF_TABLES_QUEUE (SI_NO_EIT_PF_FILTERS)
  161. #define SI_NO_EIT_SCHEDULE_TIME_SHIFT_FILTERS KB_SI_EIT_SCHEDULE_TIME_SHIFT_SOFT_FILTER_COUNT
  162. #define SI_EIT_SCHEDULE_SHIFT_FILTER_START_NUMBER (KB_SI_EIT_SCHEDULE_SOFT_FILTER_COUNT + SI_NO_EIT_PF_FILTERS)
  163. #define SI_EIT_SCHEDULE_SHIFT_FILTER_END_NUMBER (SI_EIT_SCHEDULE_SHIFT_FILTER_START_NUMBER + SI_NO_EIT_SCHEDULE_TIME_SHIFT_FILTERS)
  164. #define SI_NO_EIT_FILTERS (KB_SI_EIT_SCHEDULE_SOFT_FILTER_COUNT + SI_NO_EIT_PF_FILTERS) 
  165.                                  + (SI_NO_EIT_SCHEDULE_TIME_SHIFT_FILTERS)
  166. #define SI_NO_PMT_TABLES (2)
  167. #define SI_NO_PMT_TABLES_QUEUE (2)
  168. #define SI_NO_PMT_FILTERS (2)
  169. // SDT使用filter 0, BAT使用filter 1
  170. // PAT+NIT+SDT+(SI_NO_PMT_TABLES+SI_NO_PMT_FILTERS-1)+SI_NO_EIT_FILTERS+CAT+TDT+RST+BAT
  171. #define SI_DMX_NO_FILTERS     (8 + (SI_NO_PMT_TABLES + SI_NO_PMT_FILTERS - 1) + SI_NO_EIT_FILTERS) + 1 /*dummy*/
  172. // PAT+NIT+SDT+EIT+CAT+TDT+RST+TOT+SI_NO_PMT_TABLES
  173. #define SI_DMX_NO_CHANNELS    (8 + SI_NO_PMT_TABLES)
  174. #define SI_MAX_SUB_TABLES     SI_DMX_NO_CHANNELS
  175. /*
  176. ** Specify the number of resource available
  177. */
  178. #define SI_MAX_SECTION_SMALL_DATA   (80)    
  179. #define SI_MAX_SECTION_LARGE_DATA   (40)
  180. #define SI_MAX_SECTION_DATA (SI_MAX_SECTION_SMALL_DATA + SI_MAX_SECTION_LARGE_DATA)
  181. #define SI_MAX_SECTION_PER_TABLE    (256)
  182. #define SI_DMX_BUFFER_SIZE    (1024*4)
  183. /*
  184. ** Public Type definitions
  185. */
  186. typedef INT32 T_SubTableID;
  187. typedef struct
  188. {
  189. UINT32       length;          /* The length of valid data in data[] */
  190. UINT8        *data;
  191. T_SubTableID subTableID;      /* reference back to associated table */
  192. UINT32       filterNumber;    /* Reference back to the filter which passed this section */
  193. }MepgData;
  194. typedef struct
  195. {
  196. INT32  total;                 /* Total number of sections. */
  197. INT32  received;              /* Current number of recieved sections */
  198. UINT8  version;               /* Current version of sections */
  199. UINT16 tableIDExt;            /* Current extended table ID of sections */
  200. /* Pointer to the individual section data. */
  201. MepgData *sectionData[SI_MAX_SECTION_PER_TABLE];
  202. }T_SubTableData;
  203. typedef INT32 ((*T_TimeoutCallback)(UINT32));
  204. typedef struct
  205. {
  206. UINT32 enabled;
  207.     UINT32 used;        /* 使用该成员变量解决handle不匹配的问题 */
  208.     
  209. INT32  tableID;    /* Use -1 to indicate no filtering */
  210. INT32  tableIDExt; /* Use -1 to indicate no table extension */
  211. INT32  version;    /* Use -1 to indicate no versioning */
  212. INT32  timeout;    /* How long left for this filter (in SI Ticks) */
  213. UINT32 handle;     /* Unique ID associated with this request. */
  214. UINT32 filterID;       /* The ID of the demux filter */
  215. UINT32 filterNumber;   /* The number of this filter in the channel */
  216. T_SubTableData data;  /* Data which has passed this filter */
  217. T_SubTableID subTableID; /* Which sub table uses this filter */
  218. T_TimeoutCallback timeoutCallback;
  219. } T_SubTableFilter;
  220. typedef struct
  221. {
  222. /* Common to all filters */
  223. INT32  PID;              /* Must be set to a valid PID; */
  224. UINT32 channelID;        /* The ID of the demux channel */
  225. INT32  multipleSections; /* Standard SubTable format or not */
  226. /* Intial values for the filters. */
  227. INT32  tableID;          /* Use -1 to indicate no filtering */
  228. INT32  tableIDExt;       /* Use -1 to indicate no table extension */
  229. INT32  timeout;          /* Timeout for the filter */
  230. /* The filters */
  231. UINT32 noFilters;        /* The requested number of filters */
  232. UINT32 channelStarted;
  233. } T_SubTableDetails;
  234. typedef void ((*T_SubTableCallback)(T_SubTableID, UINT32, UINT32));
  235. typedef void ((*T_SectionCallback)(MepgData*));
  236. typedef void ((*T_SetupCallback)(T_SubTableID, UINT32, INT32, UINT32));
  237. typedef struct
  238. {
  239. T_SubTableDetails details;
  240. T_SubTableFilter *filter;    /* Pointer to the array of filters */
  241.     
  242. T_SectionCallback sectionCallback;
  243. T_SubTableCallback  tableCallback;
  244. T_SetupCallback setupCallback;
  245. } T_SubTable;
  246. typedef enum
  247. {
  248. SI_MSG_COPY,
  249. SI_MSG_COMPLETED,
  250. SI_MSG_TIMER_TICK,
  251. MSG_SI_PAT_RECEIVE,
  252. MSG_SI_PAT_STOP_RECEIVE,
  253. MSG_SI_NIT_RECEIVE,
  254. MSG_SI_NIT_STOP_RECEIVE,
  255. MSG_SI_PMT_RECEIVE,
  256. MSG_SI_PMT_STOP_RECEIVE,
  257. MSG_SI_SDT_RECEIVE,
  258. MSG_SI_SDT_STOP_RECEIVE,
  259. MSG_SI_BAT_RECEIVE,
  260. MSG_SI_BAT_STOP_RECEIVE,
  261. MSG_SI_EIT_PF_RECEIVE,
  262. MSG_SI_EIT_PF_STOP_RECEIVE,
  263. MSG_SI_EIT_SCHEDULE_RECEIVE,
  264. MSG_SI_EIT_SCHEDULE_STOP_RECEIVE,
  265. MSG_SI_TDT_RECEIVE,
  266. MSG_SI_TDT_STOP_RECEIVE,
  267. MSG_SI_CAT_RECEIVE,
  268. MSG_SI_CAT_STOP_RECEIVE,
  269. MSG_SI_RST_RECEIVE,
  270. MSG_SI_RST_STOP_RECEIVE,
  271. MSG_SI_MULTI_EIT_SCHEDULE_RECEIVE,
  272. MSG_SI_MULTI_EIT_SCHEDULE_STOP_RECEIVE,
  273. MSG_SI_TOT_RECEIVE,
  274. MSG_SI_TOT_STOP_RECEIVE,
  275.     MSG_SI_EIT_SCHEDULE_SHIFT_RECEIVE,
  276. MSG_SI_EIT_SCHEDULE_SHIFT_STOP_RECEIVE
  277. } T_SIMessageType;
  278. typedef struct
  279. {
  280. T_SIMessageType type;
  281. MepgData *sectionData;
  282. UINT32 handle;
  283. UINT32 filterNumber;
  284. }T_SIMessage;
  285. #define SI_SERVICE_TYPE_DTV 0x01
  286. #define KB_FILTER_SI_VIDEO_STREAM              0x02
  287. #define KB_FILTER_SI_AUDIO_STREAM              0x03
  288. #define KB_FILTER_SI_HIERACHY                  0x04
  289. #define KB_FILTER_SI_REGISTRATION              0x05
  290. #define KB_FILTER_SI_DATA_STREAM_ALIGNMENT     0x06
  291. #define KB_FILTER_SI_TARGET_BACKGROUND_GRID    0x07
  292. #define KB_FILTER_SI_VIDEO_WINDOW              0x08
  293. #define KB_FILTER_SI_CA                        0x09
  294. #define KB_FILTER_SI_LANGUAGE                  0x0A /* PMT */
  295. #define KB_FILTER_SI_SYSTEM_CLOCK              0x0B
  296. #define KB_FILTER_SI_MULTIPLEX_BUFFER_USAGE    0x0C
  297. #define KB_FILTER_SI_COPYRIGHT                 0x0D /* PMT */
  298. #define KB_FILTER_SI_MAXIMUM_BITRATE           0x0E
  299. #define KB_FILTER_SI_PRIVATE_DATA_INDICATOR    0x0F
  300. #define KB_FILTER_SI_SMOOTHING_BUFFER          0x10
  301. #define KB_FILTER_SI_STD                       0x11
  302. #define KB_FILTER_SI_IBP                       0x12
  303. //描述符tag
  304. #define KB_FILTER_SI_NETWORK_NAME              0x40
  305. #define KB_FILTER_SI_SERVICE_LIST              0x41
  306. #define KB_FILTER_SI_STUFFING                  0x42 /* EIT, SDT */
  307. #define KB_FILTER_SI_SATELLITE_DELIVERY        0x43
  308. #define KB_FILTER_SI_CABLE_DELIVERY            0x44
  309. #define KB_FILTER_SI_BOUQUET_NAME              0x47 /* SDT */
  310. #define KB_FILTER_SI_SERVICE                   0x48 /* SDT */
  311. #define KB_FILTER_SI_COUNTRY_AVAILABILITY      0x49 /* SDT */
  312. #define KB_FILTER_SI_LINKAGE                   0x4A /* EIT, SDT */
  313. #define KB_FILTER_SI_NVOD_REFERENCE            0x4B /* SDT */
  314. #define KB_FILTER_SI_TIME_SHIFTED_SERVICE      0x4C /* SDT */
  315. #define KB_FILTER_SI_SHORT_EVENT               0x4D /* EIT */
  316. #define KB_FILTER_SI_EXTENDED_EVENT            0x4E /* EIT */
  317. #define KB_FILTER_SI_TIME_SHIFTED_EVENT        0x4F /* EIT */
  318. #define KB_FILTER_SI_COMPONENT                 0x50 /* EIT */
  319. #define KB_FILTER_SI_MOSAIC                    0x51 /* SDT, PMT */
  320. #define KB_FILTER_SI_STREAM_IDENTIFIER         0x52 /* PMT */
  321. #define KB_FILTER_SI_CA_IDENTIFIER             0x53 /* EIT, SDT */
  322. #define KB_FILTER_SI_CONTENT                   0x54 /* EIT */
  323. #define KB_FILTER_SI_PARENTAL_RATING           0x55 /* EIT */
  324. #define KB_FILTER_SI_TELETEXT                  0x56 /* PMT */
  325. #define KB_FILTER_SI_TELEPHONE                 0x57 /* EIT, SDT */
  326. #define KB_FILTER_SI_LOCAL_TIME_OFFSET         0x58 /* TOT */
  327. #define KB_FILTER_SI_SUBTITLING                0x59 /* PMT */
  328. #define KB_FILTER_SI_TERRESTRIAL_DELIVERY      0x5A
  329. #define KB_FILTER_SI_MULTILINGUAL_NETWORK_NAME 0x5B
  330. #define KB_FILTER_SI_MULTILINGUAL_BOUQUET_NAME 0x5C
  331. #define KB_FILTER_SI_MULTILINGUAL_SERVICE_NAME 0x5D /* SDT */
  332. #define KB_FILTER_SI_MULTILINGUAL_COMPONENT    0x5E /* EIT */
  333. #define KB_FILTER_SI_PRIVATE_DATA_SPECIFIER    0x5F /* EIT, SDT, PMT */
  334. #define KB_FILTER_SI_SERVICE_MOVE              0x60 /* PMT */
  335. #define KB_FILTER_SI_SHORT_SMOOTHING_BUFFER    0x61 /* EIT */
  336. #define KB_FILTER_SI_FREQUENCY_LIST            0x62
  337. #define KB_FILTER_SI_PARTIAL_TRANSPORT_STREAM  0x63
  338. #define KB_FILTER_SI_DATA_BROADCAST            0x64 /* EIT, SDT */
  339. #define KB_FILTER_SI_CA_SYSTEM                 0x65 /* PMT */
  340. #define KB_FILTER_SI_DATA_BROADCAST_ID         0x66 /* PMT */
  341. #define DMX_AVAILABLE 0
  342. #define DMX_ERROR  -1
  343. #define DMX_CRC_CHECKED -2
  344. typedef struct
  345. {
  346. UINT32  size;
  347. UINT32* buffer;
  348. UINT32* end;
  349. UINT32* position;
  350. } SIFIFO;
  351. enum
  352. {
  353. LIFO_FULL = -10,
  354. LIFO_EMPTY,
  355. LIFO_OK = 0
  356. };
  357. static INT32 SIAlloc(void);
  358. static void SIFree(void);
  359. static INT32 SISubTableInitialize(void);
  360. static INT32 SISubTableDestroy(void);
  361. static T_SubTableID SISubTableCreate(T_SubTableDetails*, T_SectionCallback, T_SubTableCallback, T_TimeoutCallback, T_SetupCallback);
  362. static INT32 SIFreeSectionData(MepgData *section);
  363. static void SIFilterStopHelper(UINT32 channelID, T_SubTableFilter *filter);
  364. static void SIFilterStop(UINT32 channelID, T_SubTableFilter *filter);
  365. static void SIFilterDetach(UINT32 channelID, T_SubTableFilter *filter);
  366. static void SISubTableStop(T_SubTableID);
  367. static void SISubTableStart(T_SubTableID subTableID, UINT32 filterNumber, INT32 version, UINT32 handle);
  368. static BOOL SIHandleNewSection(UINT8* headerMPEGSection, T_DMX_Notify* notifyData);
  369. static void SISectionCopied(INT32 condition, UINT8* buffer, UINT32 length, void* tag);
  370. static void SITask(void);
  371. static void SISendTimerMessage(void);
  372. static void SIHandleTimerTick(void);
  373. static void SIStoreText(UINT8 *dst, UINT8 *src, UINT32 length);
  374. static INT32 LIFOInitialize(SIFIFO* lifo);
  375. static INT32 LIFOPush(SIFIFO* lifo, UINT32 newItem);
  376. static INT32 LIFOPop(SIFIFO* lifo, UINT32* item);
  377. static INT32 SIGetPAT(void);
  378. static INT32 SIGetNIT(void);
  379. static INT32 SIGetPmt(INT32 nPendingNo);
  380. static INT32 SIGetSDT(void);
  381. static INT32 SIGetBat(void);
  382. static INT32 SIGetEitPF(INT32 nPendingNo);
  383. static INT32 SIGetEitSCH(UINT32 nPendingNo);
  384. static INT32 SIGetMultEitSCH(void);
  385. static INT32 SIGetTDT(void);
  386. static INT32 SIGetCAT(void);
  387. static INT32 SIGetRst(void);
  388. static INT32 SIGetTOT(void);
  389. static INT32 SIStopPAT(void);
  390. static INT32 SIStopNIT(void);
  391. static INT32 SIStopPmt(INT32 nSvcID);
  392. static INT32 SIStopSdt(void);
  393. static INT32 SIStopBat(void);
  394. static INT32 SIStopEitSCH(INT32 nSvcID);
  395. static INT32 SIStopMultEitSCH(void);
  396. static INT32 SIStopTDT(void);
  397. static INT32 SIStopCAT(void);
  398. static INT32 SIStopRst(void);
  399. static INT32 SIStopTOT(void);
  400. static void SIParsePAT(MepgData* section);
  401. static void SIParseNIT(MepgData* section);
  402. static void SIParsePMT(MepgData* section);
  403. static void SIParseSDT(MepgData* section);
  404. static void SIParseEit(MepgData* section);
  405. static void SIParseCAT(MepgData* section);
  406. static void SIParseTDT(MepgData* section);
  407. static void SIParseRST(MepgData* section);
  408. static void SIParseTOT(MepgData* section);
  409. static INT32 SIParseTime(UINT8* pInData, time_t* pOutTime);
  410. static INT32 SIParseDuration(UINT8* pInData, UINT32* pOutDuration);
  411. static void SINITDescs(UINT8* pInData, INT32 dataLen, KB_SINitStruct* pstNit);
  412. static void SIPMTDescs(UINT8* pInData, INT32 dataLen, KB_SIPmtStruct* pstPmt, INT32 inLoop);
  413. static void SISDTDescs(UINT8* pInData, INT32 dataLen, KB_SISdtStruct* pstSdt);
  414. static void SIBATDescs(UINT8* pInData, INT32 dataLen, KB_SIBatStruct* pstBat, INT32 inLoop);
  415. static void SIEitPFDescs( UINT8* pInData, INT32 dataLen, KB_SIEitPF* pstEvent);
  416. static void SIEitSCHDescs( UINT8* pInData, INT32 dataLen, KB_SIEitSchEvent* pstEvent);
  417. static void SICATDescs(UINT8* pInData, INT32 dataLen, KB_SICatStruct* pstCat);
  418. static void SIHandlePat(T_SubTableID subTableID, UINT32 filterNumber, UINT32 handle);
  419. static void SIHandleNit(T_SubTableID subTableID, UINT32 filterNumber, UINT32 handle);
  420. static void SIHandlePmt(T_SubTableID subTableID, UINT32 filterNumber, UINT32 handle);
  421. static void SIHandleSdt(T_SubTableID subTableID, UINT32 filterNumber, UINT32 handle);
  422. static void SIHandleEit(T_SubTableID subTableID, UINT32 filterNumber, UINT32 handle);
  423. static void SIHandleCat(T_SubTableID subTableID, UINT32 filterNumber, UINT32 handle);
  424. static INT32 SIHandlePatTimeout(UINT32 filterID);
  425. static INT32 SIHandleNitTimeout(UINT32 filterID);
  426. static INT32 SIHandlePmtTimeout(UINT32 filterID);
  427. static INT32 SIHandleSdtTimeout(UINT32 filterID);
  428. static INT32 SIHandleEitTimeout(UINT32 filterID);
  429. static INT32 SIHandleTdtTimeout(UINT32 filterID);
  430. static INT32 SIHandleCatTimeout(UINT32 filterID);
  431. static INT32 SIHandleTotTimeout(UINT32 filterID);
  432. static void SIGetEitSCHShift(UINT32 nPendingNo, UINT32 nSvcID);
  433. static INT32 SIStopEitSCHShift(INT32 nSvcID, INT32 nTableId);
  434. static void SISectionEinSchInfo(MepgData *section);
  435. static INT32 SIStopEitSCHShiftEX(INT32 nSvcID, INT32 nTableId);
  436. static void SISectionEinSchInfoShift(MepgData *section);
  437. static void SISectionEITScheduleShiftDescriptors(UINT8* pInData, 
  438.                                                  INT32 dataLen, 
  439.                                                  KB_SIEitSchTimeShiftNode* pstEvent);
  440. #endif