source: svn/trunk/newcon3bcm2_21bu/dst/dhl/api/include/DHL_PSI.h

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 8.3 KB
Line 
1/**
2        @file
3                DHL_PSI.h
4
5        @brief
6                MPEG section filter API for SI/PSI/PSIP reception
7
8        Copyright 2006~2010 Digital STREAM Technology, Inc.
9        All Rights Reserved
10*/
11
12
13#ifndef __DHL_PSI_H__
14#define __DHL_PSI_H__
15
16
17#include "DHL_Demux.h"
18
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
24
25
26#if COMMENT
27____Overview____(){}
28#endif
29
30
31
32
33#if COMMENT
34____Config____(){}
35#endif
36
37
38#define FILTER_MAX_BYTE 16  /* section filter¿¡¼­ ¼³Á¤ÇÒ ¼ö ÀÖ´Â ÃÖ´ë ¹ÙÀÌÆ® ¼ö */
39        // etm id ±îÁö¸¸ Æ÷ÇÔÇÏ¸é µÇ´Ï±î 13 byte ¸é µÈ´Ù.       --> BK: 13-> FILTER_SIZE(=16)@bsettop_smessage_rave.c
40
41
42#if COMMENT
43____Types____(){}
44#endif
45
46/** @brief
47        PSI ¼ö½Å ¹× callbackÀÌ ºÒ¸®´Â ´ÜÀ§.
48
49        DHL_PSI_StartMonitor() APIÀÇ ÀÎÀÚ·Î »ç¿ëµÈ´Ù.
50
51        ¿©·¯ ¼½¼ÇÀÌ ÇϳªÀÇ Å×À̺íÀ» ÀÌ·ç´Â °æ¿ì (PAT, VCT µî)
52        »ö¼Ç ´ÜÀ§ÀÇ ¼ö½ÅÀ» ÇÒÁö, Å×ÀÌºí ´ÜÀ§ÀÇ ¼ö½ÅÀ» ÇÒÁö ÁöÁ¤ÇÑ´Ù.
53
54        ÇϳªÀÇ ¼½¼ÇÀ¸·Î¸¸ ±¸¼ºµÈ Å×À̺íÀÇ °æ¿ì (PMT, STT, ETT µî)
55        ePSIMODE_TABLE Àº Àǹ̰¡ ¾ø´Ù.
56*/
57typedef enum {
58        ePSIMODE_SECTION, ///< section ´ÜÀ§ ¼ö½Å ¹× callback.
59        ePSIMODE_TABLE,   ///< table ´ÜÀ§ÀÇ ¼ö½Å ¹× callback.
60} tDHL_PSI_Mode;
61
62
63/** @brief
64        µ¿ÀÏÇÑ ¼½¼ÇÀÌ ¼ö½ÅµÇ´Â °æ¿ìÀÇ µ¿ÀÛ ÁöÁ¤.
65
66        DHL_PSI_StartMonitor() APIÀÇ ÀÎÀÚ·Î »ç¿ëµÈ´Ù.
67*/
68typedef enum {
69        ePSIUPDATE_ONESHOT=1, ///< 1ȸ¸¸ callback Çϰí Áß´Ü.
70        ePSIUPDATE_VERCHANGE, ///< ¹öÀüÀÌ º¯°æµÉ ¶§ ¸¶´Ù callback.
71        ePSIUPDATE_CRCCHANGE, ///< CRC°¡ º¯°æµÇ¸é (³»¿ëÀÌ ¹Ù²î¸é) callback.
72        ePSIUPDATE_CONTINEOUS, ///< ¼ö½ÅµÇ´Â ¸ðµç ¼½¼Ç(Å×À̺í) ¸¶´Ù callback.
73} tDHL_PSI_Update;
74
75
76/** @brief
77        ¼½¼Ç ÇÊÅÍ ¸¶½ºÅ© ÆÐÅÏ
78
79        DHL_PSI_StartMonitor() APIÀÇ ÀÎÀÚ·Î »ç¿ëµÈ´Ù.
80
81        SoC Çϵå¿þ¾î¿¡ µû¶ó µÎ¹øÂ° ¹× ¼¼¹øÂ° ¹ÙÀÌÆ® ÇÊÅ͸µÀº
82        Áö¿øÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù.
83        °¡´ÉÇϸé ÀÌ ºÎºÐÀÇ ÇÊÅÍ´Â »ç¿ëÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
84
85        DHL¿¡¼­ ¿ä±¸ÇÏ´Â ÇÊÅÍ ÆÐÅÏÀÇ ÃÖ´ë ±æÀÌ´Â FILTER_MAX_BYTE ÀÌ´Ù.
86        (2,3¹øÂ° ¹ÙÀÌÆ® Æ÷ÇÔ)
87       
88        STT ¼ö½ÅÇÏ´Â °æ¿ìÀÇ ¿¹:
89                - data = { cd, 00, 00, 00, 00, 00, ..}
90                - mask = { ff, 00, 00, 00, 00, 00, ..}
91                - mode = { ff, 00, 00, 00, 00, 00, ..}
92               
93        PMT program number 1 ¼ö½Å ¿¹:
94                - data = { 02, 00, 00, 00, 01, 00, ..}
95                - mask = { ff, 00, 00, ff, ff, 00, ..}
96                - mode = { ff, 00, 00, ff, ff, 00, ..}
97
98        PAT version 3À» Á¦¿ÜÇÑ ´Ù¸¥ ¹öÀü ¼ö½ÅÇÏ´Â °æ¿ìÀÇ ¿¹:
99                - data = { 00, 00, 00, 00, 00, 06, ..}
100                - mask = { ff, 00, 00, 00, 00, 3e, ..}
101                - mode = { ff, 00, 00, 00, 00, 00, ..}
102       
103*/
104typedef struct 
105{       
106#if 1//BRCM
107        UINT8 mask[FILTER_MAX_BYTE];  // compare if mask bit is 0. if same, it is matched.
108        UINT8 coef[FILTER_MAX_BYTE];
109        UINT8 excl[FILTER_MAX_BYTE];  // compare
110#else
111        UINT8 data[FILTER_MAX_BYTE];    ///< ºñ±³s bit data
112        UINT8 mask[FILTER_MAX_BYTE];    ///< mask bitÀÌ 1ÀÌ¸é ºñ±³¸¦ ¼öÇà, 0ÀÌ¸é ¹«½Ã(mode bit°ª ¹«½Ã)
113        UINT8 mode[FILTER_MAX_BYTE];   
114#endif
115        /**<
116        mode bitÀÌ 1ÀÎ °÷Àº ºñ±³µÈ bits°¡ Çϳª¶óµµ ´Ù¸£¸é ¹«½Ã,
117        ÇÑ ¹ÙÀÌÆ® ³»¿¡¼­ mode bitÀÌ 0ÀÌ °÷Àº ºñ±³µÈ bits°¡ ¸ðµÎ °°À¸¸é ¹«½Ã.   
118
119        @todo
120        not equal filter°¡ ¹ÙÀÌÆ® ´ÜÀ§¸¦ ³Ñ¾î¼­´Â °æ¿ì (¿¹: 16bits ¿£Æ®¸®°¡ Àִµ¥ 16bits Àüü¿¡ not equal filter¸¦ °É°í ½ÍÀº °æ¿ì)´Â
121        ÇöÀç Áö¿øÇÏÁö ¾Ê°í, »ç¿ëµÇ´Â °÷µµ ¾øÀ½.
122        Çâ ÈÄ ÇÊ¿äÇÏ°Ô µÇ¸é º°µµÀÇ ´ëÀÀÀÌ ÇÊ¿äÇÔ.
123        */
124
125} tDHL_PSI_Filter;
126
127
128/** @brief Äݹé À̺¥Æ® ŸÀÔ
129
130        tDHL_PSI_EventProc Äݹé°ú ÇÔ²² Àü´ÞµÇ´Â À̺¥Æ® Á¾·ù.   
131*/
132typedef enum {
133        ePSIEVENT_NOEVENT=0,
134
135        ePSIEVENT_DATARECEIVED, ///< µ¥ÀÌÅͰ¡ ¼ö½ÅµÇ¾úÀ½.
136       
137        ePSIEVENT_DUP3PACKET=0x10,
138        ePSIEVENT_LOSTPACKET,
139        ePSIEVENT_DISCONTINUITY,
140        ePSIEVENT_SPLICINGPOINT,
141        ePSIEVENT_SYNCERR,
142        ePSIEVENT_SCRAMBLEDERROR,
143       
144        ePSIEVENT_MEMORYERROR,
145        ePSIEVENT_SECTIONTOOBIG,
146        ePSIEVENT_CRCERROR,
147        ePSIEVENT_VERSIONCHANGED,
148        ePSIEVENT_CRCUNCHANGED,
149        ePSIEVENT_MAXSECTIONOVERFLOW,
150        ePSIEVENT_LASTSECTIONOVERFLOW,
151        ePSIEVENT_FIFOFULLEVENT,
152        ePSIEVENT_KILLUSRTASK,
153} tDHL_PSI_Event;
154
155
156/** @brief
157        »ç¿ëÀÚ¿¡°Ô ¹ÝȯµÇ´Â PSI ÇÊÅÍ ÇÚµé.
158
159        DHL_PSI_StartMonitor() API¿¡¼­ ¸¸µé¾îÁö°í,
160        DHL_PSI_StopMonitor() API¿¡¼­ free µÈ´Ù.       
161*/
162typedef UINT32 tDHL_PSI_ControlHandle;
163 
164
165/** @brief
166        °¢Á¾ À̺¥Æ®(µ¥ÀÌÅÍ ¼ö½Å ¶Ç´Â ¿¡·¯) °¡ ¹ß»ýµÉ ¶§ È£ÃâµÇ´Â Äݹé ÇÔ¼ö ÇÁ·ÎÅäŸÀÔ.
167       
168        DHL_PSI_StartMonitor() API È£Ãâ½Ã¿¡ caller°¡ ÁöÁ¤ÇÑ´Ù.
169*/
170typedef void (*tDHL_PSI_EventProc)(tDHL_PSI_Event event, tDHL_PSI_ControlHandle handle, UINT32 userParam);
171
172
173
174
175/**
176        tDHL_PSI_DataArray ¾ÈÀÇ ¼½¼Ç Æ÷ÀÎÅÍ ¹è¿­ÀÇ Å©±â.
177       
178        ±Ô°Ý »ó sectionÀº ÃÖ´ë 256°³ ±îÁö ±¸¼ºµÉ ¼ö ÀÖÀ¸³ª,
179        º¸ÅëÀº ¼ö °³ ³»¿ÜÀ̹ǷΠÀÌ Á¤µµ¸¸ ÀâÀ¸¸é µÈ´Ù.
180
181        ÁÖÀÇ:
182                DHL ³»ºÎ¿¡¼­´Â tDHL_PSI_DataArray array Å©±â¸¦ ÇÊ¿äÇÑ ¸¸Å­ µ¿ÀûÀ¸·Î
183                ¾Ë¸Â°Ô ÇÒ´çÇÒ Çʿ䰡 ÀÖÀ½.
184*/
185#define DYNARRAY_SECTPTR        10              /* Debugger thinks there is this many anreies */
186
187/** @brief
188        ¼ö½ÅµÈ ¼½¼Ç µ¥ÀÌÅ͸¦ »ç¿ëÀÚ¿¡°Ô Àü´ÞÇϱâ À§ÇÑ µ¥ÀÌÅÍ ¹è¿­ ±¸Á¶.
189
190        ¼½¼Ç ¸ðµå·Î ¼ö½ÅÇÑ °æ¿ì¶ó¸é ÇϳªÀÇ ¼½¼Ç¸¸ Àü´ÞµÇÁö¸¸,
191        Å×ÀÌºí ¸ðµå·Î ¼ö½ÅÇÑ °æ¿ì¶ó¸é ¼½¼ÇµéÀÇ ÁýÇÕÀÌ array ÇüÅ·ΠÀü´ÞµÈ´Ù.
192*/
193typedef struct
194{
195        tDHL_PSI_ControlHandle handle;   /* request ID                     */
196        UINT16     pid;                         /* pid which this section came from */
197        INT32      numSections;     /* number of section              */
198        INT32      maxSections;         /* max number of sections structure can hold */
199        UINT8     *sectPtr[DYNARRAY_SECTPTR]; /* dynamic array of 1 or more section pointers */
200} tDHL_PSI_DataArray;
201
202
203
204
205#if COMMENT
206____Defines____(){}
207#endif
208
209
210
211
212
213#if COMMENT
214____API____(){}
215#endif
216
217
218/** @brief
219        ¼ö½ÅµÈ psi µ¥ÀÌÅ͸¦ °¡Á®¿Â´Ù.
220*/
221DHL_RESULT DHL_PSI_ReadPSIData(tDHL_PSI_ControlHandle handle, tDHL_PSI_DataArray **ppData);
222
223/** @brief
224        ó¸® (»ç¿ë)ÀÌ ³¡³­ psi data array¸¦ ¸Þ¸ð¸®¿¡¼­ ÇØÁ¦ÇÑ´Ù.
225*/
226void DHL_PSI_FreePSIData(tDHL_PSI_DataArray *pData);
227
228
229/**
230        @name ÇÊÅÍ ¸¶½ºÅ© ÆÐÅÏ »ý¼º utility ÇÔ¼öµé.
231        @{
232*/
233
234/**     @brief ¼½¼Ç ¼ö½Å¿¡ »ç¿ëµÉ ÇÊÅÍ ÆÐÅÏ µ¥ÀÌÅ͸¦ ÁغñÇÑ´Ù.
235
236        ÇÊÅÍ µ¥ÀÌÅÍ´Â Heap¿¡ µ¿ÀûÀ¸·Î ÇÒ´çÇÑ´Ù.
237
238        ÇÊÅÍ ÃʱⰪÀº all pass filter »óÅ·Π¸¸µé¾îÁø´Ù.
239        ÇÏÁö¸¸ µðÅçÆ® »óÅ·Π¼öÁ¤¾øÀÌ »ç¿ëÇÏ´Â °æ¿ì´Â ¾øÀ» °ÍÀÓ.
240       
241        @param[out] ppFilter  ¸¸µé¾îÁø ÇÊÅÍ µ¥ÀÌÅÍ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅÍ.
242*/
243DHL_RESULT DHL_PSI_AllocGenericFilter(tDHL_PSI_Filter **ppFilter);
244
245/** @brief table id·Î ÇÊÅÍ ¸¶½ºÅ© ÆÐÅÏÀ» ±¸¼ºÇÑ´Ù.
246*/
247DHL_RESULT DHL_PSI_AllocFilterWithTid(tDHL_PSI_Filter **ppFilter, UINT8 tid, BOOL curnext_indicator);
248
249/** @brief table id¿Í tid extensionÀ¸·Î ÇÊÅÍ ¸¶½ºÅ© ÆÐÅÏÀ» ±¸¼ºÇÑ´Ù.
250*/
251DHL_RESULT DHL_PSI_AllocFilterWithTidEx(tDHL_PSI_Filter **ppFilter, UINT8 tid, UINT16 tidExtension, 
252                                 BOOL curnext_indicator);
253
254/** @brief ÇÊÅÍ ÆÐÅÏ µ¥ÀÌÅ͸¦ freeÇÑ´Ù.
255
256        Alloc ÇÏ¿´À¸³ª ´õ ÀÌ»ó »ç¿ëÇÏÁö ¾Ê°Ô µÈ ÇÊÅÍ µ¥ÀÌÅ͸¦
257        ¸Þ¸ð¸®¿¡¼­ ÇØÁ¦ÇÑ´Ù.
258
259        ÁÖÀÇ 1)
260        DHL_PSI_StartMonitor °¡ ¼º°øÀûÀ¸·Î È£ÃâµÇ¾î tDHL_PSI_ControlHandle ¿¡
261        µî·ÏµÈ filter´Â DHL_PSI_StopMonitor ÀÌ ºÒ¸®¸é¼­ °°ÀÌ ÇØÁ¦ µÇ¹Ç·Î,
262        º°µµ·Î DHL_PSI_FreeFilter ¸¦ ºÎ¸£Áö ¾Ê¾Æµµ µÈ´Ù.
263       
264        ÁÖÀÇ 2)
265        DHL_OS_Free ó·³ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅ͸¦ pass ÇÏ´Â°Ô ¾Æ´Ï¶ó, Æ÷ÀÎÅ͸¦ pass ÇÑ´Ù.
266        »ç¿ë¿¡ ÁÖÀÇÇÒ °Í!
267
268        @param[in] pFilter  ÇØÁ¦ÇÒ ÇÊÅÍ µ¥ÀÌÅÍ Æ÷ÀÎÅÍ.
269*/
270void DHL_PSI_FreeFilter(tDHL_PSI_Filter *pFilter);
271
272/*@}*/
273
274
275
276/** @brief
277        PSI ¼ö½ÅÀ» ½ÃÀÛÇÑ´Ù.
278
279        µ¥ÀÌÅͰ¡ ¼ö½ÅµÇ°í, callbackÀÌ È£ÃâµÉ Á¶°ÇÀÌ µÇ¸é eventProcÀÌ È£ÃâµÈ´Ù.
280
281        caller´Â retPSIControlÀ» ±â¾ïÇØ µÎ¾î¾ß ÇÑ´Ù. ³ªÁß¿¡ stop ÇÒ ¶§ ÇÊ¿äÇÔ.
282       
283
284        @param[in]  tsd         TS ÀÔ·Â Æ÷Æ® ½Äº°ÀÚ
285        @param[in]  pid         ¼½¼Ç/Å×À̺íÀÌ Æ÷ÇÔµÈ pid
286        @param[in]  psiMode     ¼½¼Ç/Å×ÀÌºí µ¥ÀÌÅÍ ¼ö½Å ´ÜÀ§
287        @param[in]  updateMode  µ¿ÀÏÇÑ µ¥ÀÌÅÍ ¼ö½Å¿¡ ´ëÇÑ µ¿ÀÛ ¸ðµå
288        @param[in]  prefList    ÇÊÅÍ ¸¶½ºÅ© ÆÐÅÏ
289        @param[in]  maxData     
290        @param[in]  maxSections  ¼½¼Ç ÃÖ´ë °¹¼ö
291        @param[in]  eventProc     Äݹé ÇÔ¼ö
292        @param[in]  userParam     »ç¿ëÀÚ ÆÄ¶ó¹ÌÅÍ
293        @param[out] pHandle      »õ·Ó°Ô ÇÒ´ç µÈ psi ÇÊÅÍ ÇÚµé.
294*/
295DHL_RESULT DHL_PSI_StartMonitor(tDHL_TSD tsd, 
296                         UINT16 pid,
297                         tDHL_PSI_Mode psiMode,
298                         tDHL_PSI_Update updateMode,
299                         tDHL_PSI_Filter *prefList,
300                         UINT16 maxData,
301                         UINT16 maxSections,
302                         tDHL_PSI_EventProc eventProc,
303                         UINT32 userParam,
304                         tDHL_PSI_ControlHandle *pHandle);
305
306
307/** @brief
308        PSI ¼ö½ÅÀ» Áß´ÜÇÑ´Ù.
309
310        ³»ºÎ¿¡ µ¿ÀÛ ÁßÀÌ´ø ¸ðµç ÀÛ¾÷À» Áß´ÜÇÑ´Ù.
311        ¾ÆÁ÷ ¸¶¹«¸® µÇÁö ¾ÊÀº ¼½¼Ç ¸Þ¸ð¸®µéÀº ¸ðµÎ free µÈ´Ù.
312
313        ÀÌ ÈÄ¿¡ ´õÀÌ»ó psiCtlÀ» »ç¿ëÇÏ¸é ¾ÈµÈ´Ù.
314
315        @param[in] handle  Á¤Áö/ÇØÁ¦ ÇÒ psi ÇÚµé.
316*/
317void DHL_PSI_StopMonitor(tDHL_PSI_ControlHandle handle);
318
319
320
321DHL_RESULT DHL_PSI_Init(void);
322
323
324DHL_RESULT DHL_PSI_Uninit(void);
325
326
327#ifdef __cplusplus
328} /* extern "C" */
329#endif
330
331
332
333#endif  /* __DHL_PSI_H__ */
334
Note: See TracBrowser for help on using the repository browser.