source: svn/newcon3bcm2_21bu/dst/dmw/src/Channel/DMW_Channel.h @ 76

Last change on this file since 76 was 76, checked in by megakiss, 10 years ago

1W 대기전력을 만족시키기 위하여 POWEROFF시 튜너를 Standby 상태로 함

  • Property svn:executable set to *
File size: 39.9 KB
Line 
1/********************************************************************
2 *
3 * Dmw_Channel.h - header for Dmw_Channel sources
4 *
5 *   Channel Decoding Module (DMC) header file
6 *
7 * Copyright 2004 Digital STREAM Technology, Inc.
8 * All Rights Reserved
9 *
10 * $Id: DMW_Channel.h, v?? cafrii Exp $
11 *
12 ********************************************************************/
13
14#ifndef DMW_CHANNEL_H
15#define DMW_CHANNEL_H
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21
22#include "DMW_Platform.h"
23
24
25#include "DHL_AVCAP.h"
26#include "DHL_FE.h"
27
28#include "DMW_Status.h"
29
30#include "DMW_ChannelDemux.h"
31
32#include "DMW_Dummy.h"
33
34
35//-----------------------------------------------------------------
36// HAL
37//
38
39
40//-----------
41// ä³Î ŸÀÔ
42//
43typedef enum {
44        ChannelType_Air = 0,    // Áö»óÆÄ ä³Î ŸÀÔ.
45        ChannelType_Cable = 1,  // ÄÉÀ̺í ä³Î ŸÀÔ.
46
47} ChannelType;
48        // RF number¸¦ frequency·Î ÇØ¼®ÇÒ ¶§ ¾î´À ŸÀÔÀ̳Ŀ¡ µû¶ó ½ÇÁ¦ Á֯ļö °ªÀÌ ´Ù¸£°Ô ³ª¿Â´Ù.
49        // ±× ¿ÜÀÇ ¸ðµç ÀÛ¾÷Àº ä³Î ŸÀÔ°ú °ÅÀÇ ¹«°üÇÏ´Ù.
50       
51       
52extern ChannelType g_CurChannelType;
53        // ÇöÀç ä³Î À¯Çü.  0: AIR,  1: Cable
54        // Air¿Í CableÀÌ °øÁ¸ÇÒ ¼ö´Â ¾ø´Ù. (ÇϳªÀÇ RF ¹øÈ£¸¦ ³õ°í ÇØ¼® ¹æ¹ýÀÌ ´Þ¶óÁö¹Ç·Î..)
55        //
56        // ÀÌ º¯¼ö¸¦ Á÷Á¢ ¼öÁ¤ÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
57        // const typeÀ̹ǷΠÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î´Â ¼öÁ¤ÇÒ ¼ö ¾ø´Ù.
58        // ²À ÃʱâÈ­ ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù.
59        //
60        // cafrii, 030323
61        // compilerÀÇ optimization ¹®Á¦·Î const¸¦ ´Ù½Ã »èÁ¦ÇÔ.
62
63#define ChannelTypeString(type) ( \
64                (type) == ChannelType_Air ? "Air" : \
65                (type) == ChannelType_Cable ? "Cable" : "??")
66       
67//--------------
68// Á֯ļö Ç¥ÁØ
69
70extern tDHL_FreqStd g_CableSystem;
71        //
72        // g_CurChannelTypeÀÌ AirÀÎ °æ¿ì¿¡´Â ÀÌ °ªÀº FREQ_AIR À̾î¾ß ÇÑ´Ù.
73        //
74
75#define FreqStdString(s) ((s)==0 ? "FreqAir" : (s)==1 ? "FreqCable" : (s)==2 ? "FreqIRC" : (s)==3 ? "FreqHRC" : "Freq??")
76
77
78
79//-----------
80// ¸ðµâ·¹ÀÌ¼Ç Å¸ÀÔ
81//
82typedef enum {  // cafrii 041104 add
83
84        // report Àü¿ë
85        Modulation_Invalid   = -1,
86
87        // request/report °â¿ë 
88        Modulation_NTSC      = 0,
89        Modulation_8VSB      = 1,
90        Modulation_64QAM     = 2,
91        Modulation_256QAM    = 3,
92
93        // request Àü¿ë
94        Modulation_CableAuto = 4,
95        Modulation_QAM       = 5, // OREN°ú °°ÀÌ firmware¿¡¼­ ÀÚµ¿ detectÇÏ´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù.
96       
97} ModulationType;       
98
99// DMW ChannelMW¿¡¼­´Â ModulationMode, ServiceType ¸ðµÎ °°Àº Àǹ̷Π»ç¿ëÇÑ´Ù.
100//
101#define ServiceTypeString(type) ( \
102                        type == Modulation_NTSC ? "NTSC" : \
103                        type == Modulation_8VSB ? "8VSB" : \
104                        type == Modulation_64QAM ? "64QAM" : \
105                        type == Modulation_256QAM ? "256QAM" : \
106                        type == Modulation_CableAuto ? "CableAuto" : \
107                        type == Modulation_QAM ? "QAM" : "??")
108
109
110#define ModulationTypeString(t) ServiceTypeString(t)
111
112
113// cafrii 050316 add
114//
115// NTSC Tuning ½Ã¿¡ »ç¿ëµÉ Tuner Á֯ļö ¼³Á¤ ¸ðµå
116//
117// FULL Search ¸ðµå´Â Analog Autoscan½Ã CableSystem Auto-detect ¿ëÀ¸·Î¸¸ »ç¿ëÀ» Á¦ÇÑÇÑ´Ù.
118// ÀÌ ¸ðµå´Â TunerSetChannel ¿¡´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.
119//
120// µðÁöÅÐ Æ©´× ½Ã¿¡´Â ÀÌ ¸ðµå°ªÀº ¸ðµÎ ¹«½ÃµÇ¸ç Ç×»ó TUNE_FIXED ¹æ½ÄÀ¸·Î Æ©´×µÈ´Ù.
121//
122typedef enum 
123{
124        FREQTUNE_FIXED        = 0,  // ÁöÁ¤ÇÑ Á֯ļö·Î¸¸ ¼³Á¤ (RF, offset).  default mode
125        FREQTUNE_SHORT_SEARCH = 1,  // Short Search : ÁöÁ¤ÇÑ Á֯ļö (RF, offset) ÁÖº¯ ¿µ¿ª °Ë»ö
126        //FREQTUNE_FULL_SEARCH  = 2,  // Full Search  : offsetÀ» ¹«½ÃÇϰí Full range °Ë»ö
127       
128} FreqTuneMode;
129
130
131
132
133//--------------
134// °¢Á¾ timeout variables
135// cafrii 050415 add
136
137extern int g_Timeout_SignalLock;
138extern int g_Timeout_AnalogSignalLock;
139extern int g_Timeout_VctLoading;
140extern int g_Timeout_PatLoading;
141extern int g_Timeout_PmtLoading;
142
143
144
145
146
147
148#define DMC_CHECK_HEAP_SIZE 0
149        // cafrii 060831 add,
150        //  for memory leak test
151        //  °¢Á¾ callback, event µîÀÇ Ã³¸® ÀÛ¾÷½Ã¸¶´Ù
152        //  heap »óŸ¦ °è¼Ó Ã¼Å©ÇØ¼­ µð¹ö±× â¿¡ Ç¥½Ã..
153
154
155
156#if 0
157____Types____()
158#endif
159
160
161typedef BOOL (*DMC_FN_CHECK)(void);
162        // cancel check function
163
164typedef void (*DMC_FN_COMPLETED)(STATUS status, UINT32 userParam, void *pAdditionalParam);
165        // general CompleteFunction
166
167#define TLVideoContext                  UINT32
168typedef void (*DMC_FN_USERDATA)(TLVideoContext *);
169        // CC User data callback
170       
171typedef void (*DMC_FN_NOTIFY)(UINT32, UINT32);
172        // Dmc notification callback function type
173       
174typedef STATUS (*DMC_FN_DPC)(UINT32, UINT32, UINT32, UINT32);
175        // Dmc DPC callback functiontype
176
177
178
179#if 0
180____DMW_HAL____()
181#endif
182
183
184//--------------
185// HAL API for middle ware codes.
186//
187
188
189ModulationType DMW_HAL_TunerDemod2Modulation(tDHL_Demod demod);
190tDHL_Demod DMW_HAL_Modulation2TunerDemod(ModulationType mode);
191
192BOOL    DMW_HAL_DetectAnalogVideoChannel(void);
193
194STATUS  DMW_HAL_SetChannelStandard(tDHL_FreqStd std);
195
196
197STATUS  DMW_HAL_TunerScanSetChannel(UINT32 ch, ModulationType type, 
198                                        INT32* pOffset, FreqTuneMode mode, DMC_FN_CHECK chkfn);
199STATUS  DMW_HAL_TunerSetChannel    (UINT32 ch, ModulationType type, 
200                                        INT32  offset,  FreqTuneMode mode, DMC_FN_CHECK chkfn);
201
202STATUS  DMW_HAL_TunerSetFrequency(UINT32 freqInKHz, ModulationType mode,  BOOL (*chkfn)());
203
204STATUS DMW_HAL_AfcSearchMultiple(int nFreq, UINT32 *aFreq, int timeout, 
205                                                        DMC_FN_CHECK ckfn);
206
207
208BOOL    DMW_HAL_DetectNIMChannel(void);
209int     DMW_HAL_GetSignalStrength(void);
210float   DMW_HAL_GetSNR(void);
211
212int DMW_HAL_GetCurrentRF(void); // cafrii 060630 add
213void DMW_HAL_ResetLastRF(void);  // cafrii 060714 add
214ModulationType DMW_HAL_GetModulationMode(void);
215
216
217int   DMW_HAL_GetFDCLockStatus(void);
218int   DMW_HAL_GetFDCSignalStrength(void);
219float DMW_HAL_GetFDCSNR(void);
220
221
222void DMW_HAL_RegisterChannelHalSymbols(void);
223
224
225
226
227#if 0
228____FreqTable____()
229#endif
230
231
232//------------------------------
233// ä³Î Á֯ļö Å×À̺í.  DMW_ChannelFreq.c
234//
235#define HIGHEST_AIR_CHANNEL   83
236#define HIGHEST_CABLE_CHANNEL 135
237
238
239extern UINT32 FindCenterFrequency(int RF, INT32 freqOffset, tDHL_FreqStd std);
240        //
241        // cafrii 050316 add
242        //
243        // ÁÖ¾îÁø RF ä³Î ¹øÈ£¿¡ ÇØ´çÇÏ´Â center frequency¸¦ ¸®ÅÏÇÑ´Ù. ´ÜÀ§´Â Hz
244        // freqOffsetÀ» ÁöÁ¤ÇÏ¸é ±× offset ºÐÀÌ ¹Ý¿µµÇ¾î ¸®ÅϵȴÙ.
245        //
246        // ÀÔ·ÂÇÑ °ª¿¡ ¹®Á¦°¡ ÀÖÀ¸¸é 0À» ¸®ÅÏ.
247        //
248
249extern int FindAirRF(UINT32 freq, INT32 *freq_offset);
250extern int FindCableRF(UINT32 freq, INT32 *freq_offset);
251extern int FindMultiStandardRF(UINT32 freq, INT32 *freq_offset, 
252                                                tDHL_FreqStd std);
253        //
254        // ÁÖ¾îÁø Á֯ļö °ª¿¡ ÇØ´çÇÏ´Â RF ä³Î ¹øÈ£(Á¤¼ö°ª)¸¦ ¸®ÅÏÇÑ´Ù.
255        // freq:
256        //   VSBÀÎ °æ¿ì freq´Â pilot tone Á֯ļöÀÌ´Ù.
257        //     6MHz bandÀÇ lower-edge Á֯ļö + 310KHz
258        //   ¾Æ³¯·Î±×ÀÎ °æ¿ì´Â picture carrier
259        //     center freq - 1.75MHz == lower-edge + 1.25MHz
260        // freq_offset:
261        //   freq_offsetÀº ¾Æ³¯·Î±×ÀÎ °æ¿ì¿¡¸¸ »ç¿ëÇÏ´Â °ÍÀ¸·Î¼­,
262        //   Å×ÀÌºí »óÀÇ picture carrier¿ÍÀÇ Â÷ÀÌ °ªÀ» ¸®ÅÏÇÑ´Ù.
263        //
264        // return °ª:
265        //   ¹ß°ßµÈ RF ä³Î ¹øÈ£. ¹ß°ßµÇÁö ¾ÊÀ¸¸é -1À» ¸®ÅÏÇÑ´Ù.
266
267
268
269
270
271
272
273
274
275//-----------------------------------------------------------------
276//
277//  Dmc_ChangeDisplayXXX()¿¡ »ç¿ëµÇ´Â »ó¼öµé..
278
279// Color constant
280//
281
282typedef enum
283{
284        VOUT_YPBPR              = 1,
285        VOUT_MONITOR    = 2,
286        VOUT_RGB                = 3,
287       
288} VOUT_COLOR;
289
290// Format constant
291//
292
293typedef enum
294{
295        VOUT_NATURAL    = 0,
296        VOUT_480I       = 1,
297        VOUT_480P       = 2,
298        VOUT_720P       = 4,
299        VOUT_1080I      = 8,
300        VOUT_480I_SC    = 10, // S-Video+CVBS output
301        VOUT_480I_CC    = 11, // YPbPr+CVBS output
302        VOUT_1366_768P  = 12, // LVDS
303
304} VOUT_FORMAT;
305
306
307// Screen ratio constant
308//
309typedef enum
310{
311        VOUT_WIDE               = 0,
312        VOUT_NARROW             = 1,
313       
314} VOUT_RATIO;
315
316
317typedef enum
318{
319        VAUX_NONE       = 0,  // No Aux
320        VAUX_VG                 = 1,  // Standard Aux, video and graphics
321        VAUX_VONLY              = 1,  // Standard Aux, video only
322
323} VOUT_AUX;
324
325
326#if 0
327____DMW_PROGRAM____()
328#endif
329
330
331//------------------------------------------------------------------
332//  ProgramInfo ±¸Á¶Ã¼
333
334 
335typedef enum TUNE_METHOD_t
336{
337        TUNE_METHOD_NONE = 0,
338        TUNE_METHOD_ByPIDs = 1,
339        TUNE_METHOD_ByCVCT = 2,
340        TUNE_METHOD_ByTVCT = 3,
341        TUNE_METHOD_ByVCT  = 4,
342        TUNE_METHOD_ByPSI = 5,
343        TUNE_METHOD_ByUser = 6,
344        //TUNE_METHOD_By1394 = ??
345       
346} TUNE_METHOD;
347
348#define TuneMethodString(m) ( \
349        (m)==TUNE_METHOD_ByPIDs ? "By PIDs" : \
350        (m)==TUNE_METHOD_ByCVCT ? "By CVCT" : \
351        (m)==TUNE_METHOD_ByTVCT ? "By TVCT" : \
352        (m)==TUNE_METHOD_ByVCT  ? "By xVCT" : \
353        (m)==TUNE_METHOD_ByPSI  ? "By PSI"  : \
354        (m)==TUNE_METHOD_ByUser ? "By User" : "Unknown")
355
356
357
358
359// ÇöÀç ½ÃûÁßÀÎ ÇÁ·Î±×·¥ ¹× AV decoding¿¡ ´ëÇÑ Á¤º¸.
360//
361typedef struct ProgramAVInfo_t
362{
363        BOOLEAN     active;
364        BOOLEAN     analog;         // FALSE if digital
365
366        // input port
367        //
368        tDHL_CapVideoInput input_video;
369        tDHL_CapAudioInput input_audio;
370
371        UINT32         rf;        // RF channel number
372        ModulationType mod;
373       
374        // digital only parameters
375        //
376        TUNE_METHOD method;         // 1:PIDs, 2:CVCT, 3:TVCT, 4:PSI
377       
378        UINT32      audio_pid;       // Audio PID
379        UINT32      video_pid;       // Video PID
380        UINT32      pcr_pid;         // PCR PID
381        tDHL_AudioCodingType   audio_type;
382        tDHL_VideoCodingType   video_type;
383
384        int         major, minor;    // by xVCT.
385        int         program_number;  // by PSI. program number in PAT/PMT
386
387        // source format info
388        //
389        BOOL seq_hdr_valid; // TRUE if seq_hdr is valid
390        tDHL_VideoSeqHdr seq_hdr;
391       
392        // video parameters
393        //
394        BOOL        video_freezed;  // TRUE if video is freezed now..
395        BOOL            video_hidden;   // TRUE if video is hidden now..
396
397        UINT32          video_scrambled_count;
398        UINT32          audio_scrambled_count;
399       
400        // PSI control parameters
401        //
402        MPEG_PAT   *pat;
403        MPEG_PMT   *pmt;
404
405        tDHL_PSI_ControlHandle patPsiCtl;
406        tDHL_PSI_ControlHandle pmtPsiCtl;
407       
408#if USE_CH_MW_ALL_PMT_DOWNLOAD
409        // Àüü ÇÁ·Î±×·¥ÀÇ pmt array. pmtÀÇ ¼ø¼­´Â pat¿¡ ÀÖ´Â ¼ø¼­¿Í ÀÏÄ¡ÇØ¾ß ÇÔ.
410        MPEG_PMT   **pmtList;
411        // ÇöÀç ½Ãû ÁßÀÌ ¾Æ´Ñ ´Ù¸¥ ä³ÎÀÇ pmt¸¦ ¹Þ±â À§ÇÑ monitor handle
412        tDHL_PSI_ControlHandle pmtPsiCtl2;
413#endif
414
415        // User parameters
416        //
417        UINT32 userParam;  // cafrii 060804 add
418       
419       
420} ProgramAVInfo;
421
422
423
424
425
426#if 0
427____TuneParam____()
428#endif
429
430//-----------------------------------------------------------
431
432// TuneParam ±¸Á¶Ã¼´Â DmcTask ³»ºÎ¿¡¼­ ä³Î Æ©´×À» ÇÒ ¶§ ÇÊ¿äÇÑ ¸ðµç Á¤º¸¸¦
433// Æ÷ÇÔÇϰí ÀÖ´Ù.
434//
435// MW ÇÔ¼ö ³»ºÎ¿¡¼­¸¸ »ç¿ëµÇ¸ç, Application task¿¡¼­ Dmc task·Î
436// Á¤º¸¸¦ Àü´ÞÇÒ¶§ »ç¿ëµÈ´Ù.
437//
438// ¶Ç´Â DmcTask ³»ºÎÀûÀ¸·Î Çʿ信 ÀÇÇØ¼­ ¸¸µç´Ù.
439//
440
441// ChannelTuneFlag
442// cafrii 031231 change
443// CTF_Mask_Tuning ³»ÀÇ °ªµéÀº ÀÌÁ¦ ´õÀÌ»ó bit flag°¡ ¾Æ´Ï¶ó enumeration °ªµéÀÌ´Ù.
444// bitwise AND ¿¬»êÀÚ¸¦ »ç¿ëÇØ¼­ checkÇÏ¸é ¾ÈµÇ°í ²À maskingÇØ¼­ == ¿¬»êÀÚ¸¦ »ç¿ëÇϱ⠹ٶ÷.
445//
446#define CTF_Automatic        0
447                // 0 : Automatic. if xVCT info is invalid, use PSI info.
448                //     CVCT -> (TVCT) -> PSI.
449#define CTF_VCTOnly          1
450                // 0 : Do not use PSI channel info. VCT only.
451#define CTF_PSIOnly          2
452                // 1 : Do not use VCT info. Use only PSI channel info.
453#define CTF_SemiAutomatic    3
454                // 3 : Weak automatic change to PSI mode.
455                // VCT¸¦ ¸ø ¹Þ°Å³ª (NoVCT), ¹ÞÀº VCT°¡ À߸øµÇ¾ú°Å³ª (InvalidVCT)
456                // ã´Â ä³ÎÀÌ ¾øÀ¸¸é (ChannelNotFound) ÀÚµ¿À¸·Î PSI·Î ³Ñ¾î°¨.
457                // ¸ðµç PSIP °ü·Ã Á¶°ÇÀº Á¤»óÀε¥, Video DecodingÀÌ ½ÇÆÐÇϸé (VideoError)
458                // ÀÚµ¿À¸·Î PSI·Î ³Ñ¾î°¡Áö´Â ¾Ê´Â´Ù.
459                // RetryMode¿¡¼­´Â º° Àǹ̰¡ ¾ø´Â flagÀÌ´Ù. Philips ¿ä±¸»çÇ׿¡ ÀÇÇØ ¸¸µé¾úÀ½.
460
461#define CTF_Mask_Tuning      0x3
462
463
464#define CTF_SkipQamModulation  0x4
465                // cafrii 070608 add
466                // ÀϺΠQAMÀ» Áö¿øÇÏÁö ¾Ê´Â platform¿¡¼­´Â VSB¸¸ supportÇÔ.
467               
468
469#define CTF_UseVideoFlatten  0x8
470                // Use flattening function when stop/start video context.
471                // ¾ÆÁ÷Àº ÀÌ Ç÷¡±×¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
472                // ±×³É 1394¿¡¼­´Â flattenÀ» ¸·¾Æ¹ö·È´Ù.
473
474#define CTF_RetryMainChannel    0x10
475#define CTF_RetryOtherChannel   0x20
476                //
477                // ÀÌ µÎ Ç÷¡±×´Â VCT ±â¹ÝÀÇ Tuning (Automatic, SemiAuto Æ÷ÇÔ) ¿¡¼­ »ç¿ëµÊ.
478                //
479                // RetryMainChannel :
480                //    VCTÀÇ specific tuning ¹æ½ÄÀ¸·Î ä³Î Æ©´× ÈÄ ¼º°øÇÏÁö ¸øÇßÀ»¶§ ´ëǥä³Î Æ©´×À¸·Î 1ȸ Àç½Ãµµ..
481                //    ex: RfTune(RF 20, 14-2, RetryMainChannel) ·Î callÇÑ °æ¿ì
482                //        ¸ÕÀú 14-2·Î specific tuningÀ» tryÇÏ°í ½ÇÆÐÇÏ¸é ±× PTC³»¿¡¼­ ´ëǥä³Î Æ©´×.
483                //    ÁÖ·Î »ç¿ëÀÚ°¡ 14.2¿Í °°ÀÌ digit key¸¦ ´©¸¥ °æ¿ì¿¡ »ç¿ëµÊ.
484                //
485                // RetryOtherChannel :
486                //    VCT ±â¹Ý Æ©´×¿¡ ½ÇÆÐÇÒ °æ¿ì ´Ù½Ã ´ÙÀ½ ä³Î·Î retry¸¦ ÇÑ´Ù.
487                //    major-minor ¸¦ 0-0À¸·Î ÁöÁ¤Çϸé unspecified tuning¸ðµå¿¡¼­ retry°¡ µÇ¾î
488                //    °¡Àå ³·Àº ä³ÎºÎÅÍ Çϳª¾¿ try..
489                //    specific tuning ¸ðµå¿¡¼­µµ »ç¿ë°¡´É.
490                //    ex: RfTune(14-3, RetryOther) ·Î ÁöÁ¤Çϸé 14-3, 14-4ÀÇ ¼ø¼­·Î ÁøÇà.
491                //
492                //    °Ë»ö ¼ø¼­´Â °¡Àå ³·Àº Major/minor ä³ÎºÎÅÍ..
493                //    ä³ÎÀÌ ¾ø°Å³ª ¿¡·¯°¡ ³ª¸é ±×´ÙÀ½ minor ä³Î·Î retry.
494                //    RetryMainChannel°ú µ¿½Ã¿¡ »ç¿ëµÉ ¼öµµ ÀÖ´Ù.
495                //
496                // VCT tableÀÇ TSID¿Í ´Ù¸¥ ä³Î(remote channel)Àº ¹«Á¶°Ç Á¦¿ÜÇÑ´Ù. (¼³·É family ä³ÎÀ̶óµµ..)
497                // Family channel¸¸À» ´ë»óÀ¸·Î Æ©´×ÇÏ°í ½ÍÀ¸¸é SkipNonFamilyChannel flag »ç¿ëÇÏ¸é µÊ.
498                // µÎ Ç÷¡±× µ¿½Ã »ç¿ë °¡´É..
499                //    ex: RfTune(RF 20, 14-2, RetryMain, RetryOther, SkipNonFamily)
500                //        ¸ÕÀú 14-2 ½Ãµµ. ½ÇÆÐÇϸé MainChannel ½Ãµµ (14-1ÀÌ table¿¡ ÀÖÀ» °æ¿ì 14-1 ½Ãµµ)
501                //        Main ä³Î ½ÇÆÐÇϸé 14-3 ÀÌÈĺÎÅÍ ¶Ç ½Ãµµ..
502                //        13-1°ú °°Àº ä³ÎÀÌ ÀÌ PTC¿¡ À־ ¹«½Ã (13-1Àº family°¡ ¾Æ´Ô)
503                //
504
505
506#define CTF_RetryMainProgram     0x40 // ¾ÆÁ÷ Áö¿øÇÏÁö ¾Ê°í ÀÖÀ½. ±× Àǹ̰¡ ¸íÈ®ÇÏÁö ¾Ê¾Æ¼­..
507#define CTF_RetryOtherProgram    0x80
508                // PSI 󸮿¡ »ç¿ëµÈ´Ù.
509                // RetryMainProgram :
510                //     ÁöÁ¤ÇÑ ÇÁ·Î±×·¥À» Æ©´× ½ÃµµÇÑ ÈÄ ¹®Á¦°¡ ÀÖÀ» °æ¿ì ´ëÇ¥ÇÁ·Î±×·¥ Æ©´×À» 1ȸ Àç½Ãµµ.
511                // RetryOtherProgram :
512                //     ÇÁ·Î±×·¥ Æ©´×¿¡ ¿¡·¯°¡ »ý±â¸é ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î retry..
513                //
514                // ä³ÎÀ» tryÇÏ´Â ¼ø¼­´Â PAT array¿¡ ³ªÅ¸³­ index ¼ø¼­ÀÌ´Ù.
515                // ´ëÇ¥ ÇÁ·Î±×·¥Àº ù¹øÂ° ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù.
516
517//#define CTF_TryAnyProgram   CTF_RetryOtherProgram   
518                // À̸§À» º¯°æÇÏ¿´À½.
519                // backward compatibility¸¦ À§Çؼ­ TryAnyProgramµµ ±×³É ³öµÎÀÚ.
520               
521#define CTF_SkipNonFamilyChannel 0x100
522                // Family ä³ÎÀ̶õ Major ¹øÈ£°¡ ÀÏÄ¡ÇÏ´Â channel ±×·ìÀ» ÀǹÌÇÑ´Ù.
523                // ÀÌ ¸ðµå¿¡¼­´Â API call ÀÎÀÚ·Î ÁöÁ¤ÇÑ Major¿Í µ¿ÀÏÇÑ Ã¤³Î¸¸ °Ë»ö.
524                //
525                // ÀÌ ¿É¼ÇÀº CTF_RetryOtherChannelÀ» »ç¿ëÇÒ °æ¿ì¿¡¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
526                //
527
528#define CTF_DontRetryTVCTOnCable 0x200
529                // Cable ȯ°æ¿¡¼­ CVCT ¼ö½Å¿¡ ½ÇÆÐÇÒ °æ¿ì TVCT·Î
530                // ÁÖÀÇ!  CVCT°¡ ÀÏ´Ü ¼ö½ÅÀÌ µÈ ÀÌÈÄÀÇ ¿¡·¯(¿¹:syntax »óÀÇ ¿¡·¯)¿¡ ´ëÇØ¼­´Â Ç×»ó retry¸¦ ¾ÈÇÑ´Ù.
531                //       CVCT°¡ ¼ö½ÅÀÌ ¾Æ¿¹ ¾ÈµÈ °æ¿ì¿¡´Â ÀÌ Ç÷¡±×°¡ SET°¡ ¾Æ´Ï¸é retry¸¦ ÇÑ´Ù.
532                //
533                // ÀÏ´Ü RfTune¿¡¼­¸¸ Àû¿ëÇÔ.
534                // UCM¿¡ Tvct/Cvct ±¸º° Á¤º¸°¡ ¾øÀ¸¹Ç·Î UidTune¿¡¼­´Â Àû¿ëÇϱⰡ Á» ¾Ö¸ÅÇÔ.
535
536#define CTF_RetryAnalogIfSignalUnlock 0x400
537                // ¸¸¾à digital signalÀÌ lockÀÌ ¾ÈµÇ¸é NTSC·Î Æ©´×À» ÇÏ´Â ¸ðµå.
538                // ÀÏ´Ü caller´Â TuneParam->typeÀº digital·Î ÇØ¼­ TuningÇÔ¼ö¸¦ callÇØ¾ß ÇÑ´Ù.
539                // ¸¸¾à digital lockÀÌ ¾ÈµÇ¸é analog·Î ÀÚµ¿ ÀüȯÀÌ µÈ´Ù.
540                // APP´Â analog·Î ÀÚµ¿ Àüȯ µÇ¾ú´ÂÁöÀÇ ¿©ºÎ¸¦ µî·ÏµÈ callbackÀ» ÅëÇØ¼­ ¾Ë¼ö ÀÖ´Ù.
541
542#define CTF_TunerAutoFreqAdjust 0x800
543                // Tuner frequency ¼³Á¤½Ã¿¡ auto adjust¸¦ ÇÒ°ÍÀÎÁöÀÇ ¿©ºÎ.
544                // SetÀ̸é auto adjust¸¦ ÇÑ´Ù.
545                // ÀÚ¼¼ÇÑ ³»¿ëÀº Tuner DriverÇÔ¼ö ÂüÁ¶.
546
547//#define CTF_DontUseAppBannerCallback 0x1000
548                // TRUEÀ̸é AppBannerCallbackÀ» ºÎ¸£Áö ¾Ê´Â´Ù.
549                // ÀϹÝÀûÀ¸·Î UID tuneÀ» »ç¿ëÇÒ °æ¿ì¿¡´Â ¹Ì¸® banner¸¦ º¸¿©ÁÖ°í
550                // callback¿¡¼­ banner¸¦ º¸¿©ÁÖÁö´Â ¾Ê´Â´Ù.
551
552#define CTF_ShowHiddenChannelAlso 0x2000
553                // cafrii 040114 add
554                // TRUEÀ̸é VCT¿¡¼­ hiddenÀ¸·Î ó¸®µÈ ä³Îµµ µ¿ÀÏÇÏ°Ô ÀÏ¹Ý Ã¤³Îó·³ Æ©´×À» ÇÑ´Ù.
555                // µðÆúÆ®´Â FALSEÀ̸ç ÀÌ °æ¿ì¿¡´Â ´Ù¸¥ Ç÷¡±×¿¡ µû¶ó µ¿ÀÛÀÌ ´Þ¶óÁø´Ù.
556                // Retry ¸ðµåÀÌ¸é ±× ´ÙÀ½ ä³Î·Î °Ç³Ê¶Ù°í,
557                // NoRetry ¸ðµåÀ̸é statusNotFound ¿¡·¯ 󸮸¦ ÇÑ´Ù.
558
559
560
561// ¾ÆÁ÷ ±¸ÇöÁß...
562//#define CTF_UpdateChannelDB 0x4000
563                // TuningÀ» Çϸ鼭 »õ·Ó°Ô ¹ß°ßµÈ ä³ÎµéÀº ±×¶§±×¶§ DB¿¡ update¸¦ ÇÔ.
564                // ÁÖ·Î DRF Æ©´×¿¡ »ç¿ëµÈ´Ù.
565                // ÀÌ Ã¤³Î µ¥ÀÌÅÍ´Â "ÀÓ½Ã" À̱⠶§¹®¿¡ persistentÇÏ¸é ¾ÈµÉµí.. ¾î¶»°Ô volatile·Î ÇÒ±î..
566                // »õ·Ó°Ô updateµÈ DB entry´Â callbackÀ» ÅëÇØ caller¿¡°Ô reportµÈ´Ù. (new ¶Ç´Â modified)
567                //
568
569
570#define CTF_TunerSetOnly  0x8000
571                // cafrii 040831 add
572                // Æ©³ÊÀÇ Á֯ļö ¼³Á¤, Demodulator ¼³Á¤ ±îÁö¸¸ ¼öÇàÇÑ´Ù.
573                // POD µ¿ÀÛ ¸ðµå¿¡¼­ ChannelForceTune ¿¡¼­ »ç¿ëµÈ´Ù.
574                //
575
576#define CTF_ForceSetTuner 0x10000
577                // cafrii 060630 add
578                // ÀϹÝÀûÀ¸·Î µ¿ÀÏ RF·Î ÀÌ¹Ì tuner¼³Á¤ÀÌ µÇ¾î ÀÖ´Â °æ¿ì tuner ¼³Á¤ skipÇϴµ¥,
579                // ÀÌ flag°¡ setÀ̸é Ç×»ó °­Á¦·Î tuner setÀ» ¼öÇàÇÑ´Ù.
580
581
582#define CTF_SkipPrescanPidInfo  0x20000
583                // cafrii 041202 add
584                // set À̸é prescan PID Á¤º¸¸¦ »ç¿ëÇÏÁö ¾Ê°í Ç×»ó VCT/PSI ·ÎºÎÅÍ »õ·Î ÀоîµéÀδÙ.
585                //
586
587#define CTF_UseQamAutoMode      0x40000
588                // cafrii 060724 add
589                // QAM auto mode¸¦ Áö¿øÇÏ´Â demodulatorÀÎ °æ¿ì
590                // DEMOD_QAM_AUTO¸¦ ÀÌ¿ëÇØ¼­ Æ©´×À» ÇÑ´Ù.
591
592
593#define CTF_DontUseVctRecover  0x80000
594                // cafrii 070201 add
595                // Institutional TVÀÇ °æ¿ì field¿Í ´Þ¸® invalid vctÀÇ °¡´É¼ºÀÌ ³·°í
596                // descrambler µ¿ÀÛÀ» À§Çؼ­ ¹Ýµå½Ã Á¤È®ÇÑ pmt°¡ ÇÊ¿äÇϱ⠶§¹®¿¡
597                // vct recover ±â´ÉÀ» »ç¿ëÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
598
599
600
601
602// TuneParam
603//   1. AV Decoding¿¡ ÇÊ¿äÇÑ Request Parameter. RfTuneÀÇ ÇÔ¼ö ÀÎÀÚ·Î applicationÀÌ Á¦°ø.
604//   2. TuneCallbackÀ» ÅëÇØ¼­ tuningÀÇ °á°ú°¡ ³Ñ°ÜÁú¶§ Dmc code°¡ app·Î Á¦°øÇÔ.
605
606typedef struct TuneParam_t
607{
608        //------------ User Request parameters ----------------------------
609        // Tuner setting..
610        int  rf;
611        ModulationType type;           // Tuner service_type. 0:NTSC, 1:VSB, 2:64QAM, 3:256QAM
612        BOOL tuneRequired;
613                //
614                // --> cafrii 060630 delete,
615                //    ÀÌ º¯¼ö´Â ´õÀÌ»ó »ç¿ëµÇÁö ¾Ê´Â´Ù.
616                //
617                // if you want to set tuner hardware also, set this TRUE.
618                // unless, 'tuner setting' will be skipped.
619                // tuningÀ» ÇÏÁö ¾Ê´Â´Ù¸é type °ªÀº ¾Æ³¯·Î±×ÀÎÁö, µðÁöÅÐ ÀÎÁö¸¸ ±¸º°Çϴµ¥ »ç¿ëµÈ´Ù.
620                // ±×·¯³ª rf °ªÀº ³»ºÎÀûÀ¸·Î ±â¾ïµÇ´Â °ªÀ̹ǷΠ¼³·É »ç¿ëµÇÁö ¾Ê´õ¶óµµ ¹Ýµå½Ã ¿Ã¹Ù¸¥ °ªÀ» ÁöÁ¤ÇØÁÖÀÚ.
621               
622        INT32  freqOffset;  // cafrii 050315 change name
623                // frequency offset from RF number
624               
625        UINT32 flag;
626                // tune preference flag. ½ÇÁ¦·Î ±× ¿ªÇÒÀº º°·Î ¾øÀ½.
627                //
628                // Rf tuneÀº xVCT->PSI ¼ø¼­·Î preference°¡ Á¤ÇØÁ® ÀÖÀ¸¹Ç·Î »ç¿ëÇÏÁö ¾Ê´Â´Ù.
629                // Uid tuneÀº xVCT À̰ųª PSI À̰ųª µÑ Áß¿¡ Çϳª¸¸ °¡´ÉÇϵµ·Ï °íÁ¤µÇ¾î ÀÖ´Ù.
630                //  (CTF_VCTOnly ¶Ç´Â CTF_PSIOnly)
631                // Smart tune¿¡¼­´Â ÀÌ º¯¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù.
632                //     major number°¡ 0À̸é PSI tuneÀ» ÀǹÌÇϵµ·Ï µÇ¾î ÀÖÀ½.
633
634// by xVCT
635        UINT16 major, minor;  // xVCT channel info.
636                // CVCT first. (if cable)
637                //    and if fail or Air, TVCT later.
638                // if tuning is failed at last, following action will be decided according to flag.
639
640// by PSI
641        UINT16 progNumber;  // PAT/PMT program info.
642                // if progNumber is zero, use first program in PAT.
643
644        // Video/Audio decoding..
645        UINT32 pcrPid, vidPid, audPid;  // pre-scanned PID info.
646                // if you want to skip pids info, just set to 0 for all of these.
647
648        tDHL_VideoCodingType vidType;
649
650        tDHL_AudioCodingType audType;
651                        // cafrii 061114 add
652                        // driver¿¡¼­ AC3¿Í MPEG audio ±¸ºÐÇÏÁö ¸øÇÑ´Ù¸é º°µµ·Î app¿¡¼­
653                        // Á¤º¸¸¦ ³Ñ°ÜÁà¾ß ÇÑ´Ù.
654
655
656#if 0
657        //---------------- internal --------------------------------------
658        //
659        // ÀÌÇÏ Çʵå´Â DMC task¿¡¼­ AV decoding ÀÛ¾÷¿¡ ÇÊ¿äÇÑ ³»ºÎ »óÅ º¯¼ö¸¦ ÀúÀåÇÏ´Â °ø°£ÀÌ´Ù.
660
661        MPEG_PAT *pat;
662        MPEG_PMT *pmt;
663        xvctPtr_t vctPtr;
664       
665        VideoStreamDescriptor *vidDesc;
666        tDHL_AudioCodingType audType;
667       
668#endif
669
670} TuneParam;
671
672
673
674typedef struct CaptureParam_t
675{
676        tDHL_CapVideoInput input_video; 
677        tDHL_CapAudioInput input_audio;
678       
679       
680} CaptureParam;
681
682
683
684
685
686#if 0
687____CompleteCallback____()
688#endif
689
690
691
692//-----------------------------
693//
694//  UID TuneÀ¸·Î ä³Î Æ©´×½Ã TuneCallbackÀ¸·Î ³Ñ°ÜÁö´Â Param
695// 
696
697typedef struct AppRfTuneCallbackParam_t
698{
699        ProgramAVInfo *program;   // last tune status.
700
701        struct xvct *vct;
702       
703        MPEG_PAT *pat;
704        MPEG_PMT *pmt;
705       
706        const TuneParam *tuneParam;
707                // »ç¿ëÀÚ°¡ tuning¿¡ ³Ñ°ÜÁØ ±× pointer´Â ¾Æ´Ï´Ù.
708                // ÀϺΠflow logic¿¡ ÀÇÇØ¼­ ÃÖÃÊ ³»¿ë°ú ´Þ¶óÁ³À» ¼öµµ ÀÖ´Ù.
709                // callback ÇÔ¼ö°¡ ¸®ÅÏµÈ ÀÌÈÄ¿¡´Â ÀÌ Æ÷ÀÎÅÍ´Â ´õÀÌ»ó À¯È¿ÇÏÁö ¾Ê´Ù.
710                // applicationÀº ÀÌ ³»¿ëÀ» Àý´ë·Î º¯°æÇÏ¸é ¾ÈµÈ´Ù.
711               
712} AppRfTuneCallbackParam;
713
714typedef AppRfTuneCallbackParam AppUidTuneCallbackParam;
715        //
716        // UID Tune ¹æ½ÄÀº »ç¶óÁ³Áö¸¸ ±âÁ¸ÀÇ structure´Â ±×´ë·Î À¯ÁöÇÑ´Ù.
717        //
718
719
720typedef void (*DMC_FN_TUNE_COMPLETED)(STATUS status, UINT32 userParam, 
721                                        AppRfTuneCallbackParam *param);
722        //
723        // tune commandÀÇ °æ¿ì¿¡ Ưº°ÇÏ°Ô »ç¿ëµÇ´Â function type
724        //
725
726
727
728
729
730#if 0
731____NotifyCallback____()
732#endif
733
734
735//-----------------------------------------------------------------
736//  °¢Á¾ Notification Event ±¸Á¶Ã¼µé..
737
738
739// cafrii 070322 remove..
740// FormatChange, TimingChange µîÀº ÀÌ¹Ì ¿À·¡ ÀüºÎÅÍ »ç¿ëÇÏÁö ¾Ê´Â Á¤º¸µéÀÓ..
741//
742#if 0 
743
744// FormatChangeParam:
745//    DMC_NOTIFY_QueryChangeTiming notification À̺¥Æ®¿Í ÇÔ²² ³Ñ°ÜÁö´Â
746//    parameter
747
748#define FORMAT_CHANGE_AT_RUNTIME    1
749#define FORMAT_CHANGE_AT_VIDEOSTART 2  // channel change, video start, etc...
750        //
751        // FormatChangeParam::reason ¿¡ »ç¿ëµÇ´Â °ª.
752
753typedef struct
754{
755        int reason;                // [IN]  1: running change  2: new channel
756        BOOL bSourceFormatChanged; // [IN]  TRUE if source format is changed
757        BOOL analog;               // [IN]  TRUE if current video is analog
758       
759        const TLVideoDisplay      *display;    // [IN] reference: current display
760        const DetailedVideoTiming *timing;     // [IN] reference: current timing
761        TLVideoContext            *context;    // [IN] reference: current VideoContext
762        AuxVideoSetting            aux;        // [IN] reference: current aux setting
763        tDHL_DispARC      adjustment; // [IN] reference: current adjustment
764
765        tDHL_VideoSeqHdr            *lastSeqHdr; // [IN] reference: last MPEG sequence header
766                                               // you can find new sequence header from 'context'
767                                               // if analog context, this is NULL
768
769        BOOL changeNow;       // [OUT] TRUE if app want to change timing right now!
770        const DetailedVideoTiming *returnTiming;    // [OUT] the timing app want.
771        const TLVideoDisplay      *returnDisplay;   // [OUT] the display app want.
772        AuxVideoSetting            returnAux;       // [OUT] the aux app want.
773        tDHL_DispARC      returnAdjustment; // [OUT] AR adjustment
774       
775} FormatChangeParam;
776
777
778// TimingChangeCompleteParam:
779//    DMC_NOTIFY_TimingChangeComplete notification À̺¥Æ®¿Í ÇÔ²² ³Ñ°ÜÁö´Â
780//    parameter
781//
782// ÀÌ À̺¥Æ®´Â Timing Change Query¿¡¼­ ApplicationÀÌ changeNow¸¦ ¸®ÅÏÇϸé
783// Ç×»ó ºÒ·ÁÁø´Ù.
784// timingÀÌ Á¤¸»·Î º¯°æµÇ¾ú´ÂÁö ¾Æ´ÑÁöÀÇ Á¤º¸¸¦ ¸®ÅÏÇÑ´Ù.
785//
786// timing°ú´Â °ü°è¾ø´Â parameter (tDHL_DispARC) °°Àº Á¤º¸´Â
787// ½ÇÁ¦·Î Àû¿ëÀÌ µÇ¾ú´ÂÁö ¾Æ´ÑÁö¸¦ ¾Ë ¼ö´Â ¾ø´Ù.
788// ¿À·ÎÁö  Main°ú AuxÀÇ display timing¿¡ °üÇØ¼­¸¸ Á¤º¸¸¦ ÁØ´Ù.
789//
790typedef struct
791{
792        STATUS status;    // [IN] °¡Àå ¸¶Áö¸·¿¡ ¹ß»ýÇÑ ¿¡·¯.
793        BOOL changed;     // [IN] timingÀÌ º¯°æ µÇ¾ú´Â°¡?
794       
795        // timingÀº º¯°æµÇ¾úÁö¸¸ ´Ù¸¥ ¿¡·¯°¡ ¹ß»ýÇßÀ» ¼öµµ ÀÖÀ¸¸ç,
796        // timingÀÌ º¯°æµÇÁö ¾Ê¾ÒÀ» ¼öµµ ÀÖ´Ù.
797       
798        const TLVideoDisplay *display;      // [IN] ÇöÀç display
799        const DetailedVideoTiming *timing;  // [IN] ÇöÀç timing
800       
801        // Note!
802        //  ¸¸¾à timing(resolution)ÀÌ º¯°æµÇÁö ¾Ê¾Ò´Ù¸é ±âÁ¸ÀÇ °ªÀ» ¸®ÅÏÇÑ´Ù.
803        //  »õ·Î¿î timingÀ¸·Î º¯°æµÇ¾ú´ÂÁö´Â Á¤È®È÷ ¾Ë ¼ö´Â ¾ø´Ù.
804        //
805
806} TimingChangeCompleteParam;
807
808#endif // 0
809 
810
811// cafrii 060609 add
812// ScreenAdjustmentParam:
813//   DMC_NOTIFY_ScreenAdjustment À̺¥Æ®¿Í ÇÔ²² Àü´ÞµÇ´Â param
814//
815//
816typedef struct
817{
818        // input:
819        BOOL bSourceWide;
820        BOOL bDisplayWide;
821
822        // output:
823        // HAL api´Â hd, sd º°µµ·Î arc Àû¿ëÀÌ Áö¿øµÈ´Ù. (¹°·Ð platform¿¡ µû¶ó Áö¿ø Á¤µµ´Â Â÷À̰¡ ³²)
824        tDHL_DispARC adjustment_hd;
825        tDHL_DispARC adjustment_sd;
826       
827        // if adjustment == ARA_USER_SPECIFIC, coordination info required.
828        // cafrii 070102, no support  ARA in MW level.
829        //    app can use ARA directly by using driver callback.
830        //TL_RECT cord;
831       
832        DHL_Rect rect;  // cafrii 060928 add
833
834        BOOL bKeepCurrent; // cafrii 080929
835
836} ScreenAdjustmentParam;
837
838
839
840// PSIChangeNotifyInfo:
841//    DMC_NOTIFY_PATChanged, DMC_NOTIFY_PMTChanged À̺¥Æ®¿Í ÇÔ²² ³Ñ°ÜÁö´Â
842//    parameter
843//
844// PAT change eventÀÇ °æ¿ì, »ç¿ëÀÚ´Â ¾î¶² programÀ» decodingÇÒ °ÍÀÎÁö
845//   ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
846//   PAT change event´Â ½ÇÁ¦·Î PAT processingÀ» Çϱâ Àü¿¡ ºÒ¸®¸ç
847//   program_index Çʵ带 ÅëÇØ¼­ programÀ» ¼±ÅÃÇÏ°Ô µÈ´Ù.
848//
849// PMT change eventÀÏ °æ¿ì¿¡´Â »ç¿ëÀÚ´Â
850//
851//
852typedef struct
853{
854        BOOL pmtchanged; // [IN] 0 : pat change, 1 : pmt change
855       
856        MPEG_PAT *pat;  // [IN] new PAT
857        MPEG_PMT *pmt;  // [IN] new PMT
858
859        // cafrii 060804 add
860        UINT32 userParam; // [IN] user parameter passed at channel tuning
861                           //       usually channel id info (UID or similar)
862
863        // cafrii 060804 add
864        const ProgramAVInfo *av; // [IN] current AV info. do not change values inside.
865                                  //      AV mutex is locked state.
866       
867        // first PSI´Â ÀÚµ¿ÀûÀ¸·Î °É·¯Á®¼­ reportµÇÁö ¾Ê±â ¶§¹®¿¡
868        // user°¡ ÀÌ flag¸¦ ½Å°æ¾µ ÇÊ¿ä ¾øÀ½.
869        //BOOL first;  // [IN] TRUE if this is first PSI after channel tuning.
870                     // normally, this first PSI should be ignored.
871                     
872        // cafrii 060303
873        // user°¡ ignore ÇÒ ¼ö ÀÖ´Â optionÀº »èÁ¦ÇÔ. ´õÀÌ»ó Áö¿øÇÏÁö ¾ÊÀ½.
874        //BOOL ignore;         // [OUT] TRUE if app want to ignore this PSI.
875                             //    PAT : throw new pat away, and do not start PMT monitoring.
876                             //    PMT : throw new pmt away, and do not restart video.
877                             
878        int  program_index;  // [OUT] PAT only.
879                             //       The program index (not program number) you want to play.
880                             //       subject to change!!
881       
882} PSIChangeNotifyInfo;
883
884// cafrii 110331 add
885// argument of DMC_NOTIFY_AllPsiReceived
886//
887typedef struct 
888{
889        const ProgramAVInfo *av; // current AV info. do not change values inside.
890       
891} AllPsiRxNotifyInfo;
892
893
894//------------------------------
895// DMW_NOTIFY_MajorChangeEvent
896//
897typedef struct MajorChangeEventParam_t
898{
899        BOOL ignore;  // [OUT] 0: if app want to ignore this major change. 1: leave all thing to DMC.
900
901
902} MajorChangeEventParam;
903
904
905typedef struct AudioDecodeStartParam_t
906{
907        UINT16 audPid;      // [IN] Audio PID.. it may be 0 when NO AUDIO channel.
908        UINT16 pcrPid;      // [IN] PCR PID
909        tDHL_AudioCodingType audType;  // [IN]
910       
911        int mode; // [IN] MOCHA_ATSC_INPUT  or MOCHA_NTSC_INPUT
912       
913        STATUS result;      // [OUT] if result is statusNotImpl, DMC MW do default action.
914                            //       default is statusNotImpl.
915                            //       if result is not statusOK, then Tuning will failed.
916                           
917} AudioDecodeStartParam;
918
919
920typedef struct AudioDecodeStopParam_t
921{
922        int mode; // [IN] MOCHA_ATSC_INPUT  or MOCHA_NTSC_INPUT
923       
924        STATUS result;      // [OUT] if result is statusNotImpl, DMC MW do default action.
925                            //       default is statusNotImpl.
926                            //       if result is not statusOK, then Tuning will failed.
927                           
928} AudioDecodeStopParam;
929
930
931typedef struct AudioPidSelectParam_t
932{
933        MPEG_PMT *pmt;
934                // pmt->streams[x].stream_type À» º¸°í Audio streamÀ» ¼±ÅÃ. (MPEG-1, 2, AAC, ..)
935                // language´Â descriptorÁß¿¡¼­ ISO 639 Language descriptor¸¦ º¸°í ¼±ÅÃ.
936        xvctChannelPtr_t vctChannel;
937                // channel->descriptor_length, channel->descriptors¸¦ ÀÌ¿ëÇÏ¿© SLD Á¤º¸ ÃßÃâ.
938               
939        UINT16 returnAudioPid;
940        tDHL_AudioCodingType returnAudioType;
941       
942} AudioPidSelectParam;
943
944
945typedef struct VideoPidSelectParam_t
946{
947        MPEG_PMT *pmt;
948        xvctChannelPtr_t vctChannel;
949               
950        UINT16 returnVideoPid;
951        tDHL_VideoCodingType returnVideoType;
952       
953} VideoPidSelectParam;
954
955
956typedef struct 
957{
958        UINT16 vid_pid;
959        UINT16 aud_pid;
960        UINT16 pcr_pid;
961        UINT16 pmt_pid;
962
963} DecodingPidReadyParam; 
964
965
966
967// arzhna, 100203
968// pod Á¤º¸¸¦ ¾ò¾î¿À±â À§ÇÑ struct
969typedef struct 
970{
971        BOOL isPodInserted;
972}  PodStatusParam;
973
974
975//------------------------------
976//
977// °¢Á¾ Notify À̺¥Æ®
978//
979
980typedef enum DMC_NOTIFY_Event_t
981{
982        //---------------------------
983        //DMC_NOTIFY_QueryChangeTiming = 101,
984        //
985        // DMC ÂÊ¿¡¼­ ¹Ù·Î timingÀ» º¯°æÇÒ °ÍÀÎÁö¸¦ query ÇÑ´Ù.
986        // changeNow °ªÀÌ TRUEÀÌ¸é º¯°æÀ» ÇÑ´Ù.
987        // returnTiming °ªÀÌ non-NULLÀ̸é app ¿¡¼­ ¿ä±¸ÇÑ ±× ŸÀ̹ÖÀ» »ç¿ëÇϰí,
988        //                  NULLÀ̸é MW¿¡¼­ Á÷Á¢ timingÀ» º¯°æÇÑ´Ù.
989        // Parameter:
990        //    [0] FormatChangeParam *
991
992        //DMC_NOTIFY_TimingChangeComplete,
993        //
994        // source format º¯°æ µîÀÇ ÀÌÀ¯·Î resolution º¯°æÀÌ ¿Ï·áµÇ¾ú´Ù.
995        //
996        // Parameter:
997        //    [0] TimingChangeCompleteParam *
998        //
999
1000        DMC_NOTIFY_ScreenAdjustment = 103,
1001        // Parameter:
1002        //    [0] ScreenAdjustmentParam *
1003       
1004        //---------------------------
1005        DMC_NOTIFY_PATChanged = 201,
1006        DMC_NOTIFY_PMTChanged,
1007        // Parameter:
1008        //    [0] PSIChangeNotifyInfo *
1009       
1010       
1011        DMC_NOTIFY_PATChangeError,
1012        DMC_NOTIFY_PMTChangeError,
1013
1014        DMC_NOTIFY_AllPsiReceived,
1015        // ¸ðµç pmt°¡ ´Ù ¹Þ¾ÆÁ³À½À» ¾Ë¸².
1016        // Parameter:
1017        //    [0] AllPsiRxNotifyInfo *
1018       
1019        //---------------------------
1020        DMW_NOTIFY_MajorChangeEvent = 211,
1021        // Parameter:
1022        //    [0] MajorChangeEventParam *
1023       
1024        //---------------------------
1025        DMW_NOTIFY_AudioDecodeStart = 221,
1026        // Audio decodingÀÌ ½ÃÀÛµÉ ¶§ callµÊ.
1027        // ¾Æ¹«°Íµµ ÇÏÁö ¾ÊÀ¸¸é µðÆúÆ® µ¿ÀÛÀ» ÇÔ. (Dmc_AudioStart call)
1028        // ¸¸¾à ƯÁ¤ 󸮸¦ Çϱ⸦ ¿øÇÏ¸é ¼öÇà ÈÄ¿¡ result¸¦ setting.
1029        // Parameter:
1030        //    [0] AudioDecodeStartParam *
1031       
1032        DMW_NOTIFY_AudioDecodeStop = 222,
1033        // Audio decodingÀÌ ³¡³¯¶§ callµÊ.
1034        // Parameter:
1035        //    [0] AudioDecodeStopParam *
1036
1037        DMW_NOTIFY_SelectAudio = 223,
1038        // Audio ProgramÀ» ¼±ÅÃÇÒ ¶§,
1039        // Parameter:
1040        //    [0] AudioPidSelectParam *
1041
1042        DMW_NOTIFY_SelectVideo = 224,
1043        // Video ProgramÀ» ¼±ÅÃÇÒ ¶§,
1044        // Parameter:
1045        //    [0] VideoPidSelectParam *
1046
1047        //---------------------------
1048        DMW_NOTIFY_VideoFreezeEndEvent = 231,
1049        // Parameter:
1050        //    [0] BOOL *bProcessed: default is FALSE.
1051        //        default action is Mute Off.
1052        //        If you process mute off by yourself, set this flag TRUE.
1053       
1054        DMW_NOTIFY_AudioInfo = 240,
1055        // Parameter:
1056        //    none
1057
1058        DMW_NOTIFY_DecodingPidReady = 241,
1059        // Parameter:
1060        //    [0] DecodingPidReadyParam *
1061        //
1062       
1063        //---------------------------
1064        DMC_NOTIFY_ErrorInVideo = 301,
1065        //
1066        // Video °ü·ÃÇÏ¿© ¿¡·¯°¡ ¹ß»ýÇÏ¿© È­¸é¿¡ ¹®Á¦°¡ »ý±è.
1067        // »ç¿ëÀÚÀÇ Á¶ÀÛ¿¡ ÀÇÇÏ¿© º¹±¸°¡ °¡´ÉÇÒ ¼ö ÀÖÀ½.
1068       
1069        DMC_NOTIFY_CriticalError,
1070        //
1071        // ½Ã½ºÅÛ ¿¡·¯°¡ ¹ß»ý.
1072        // ¸®ºÎÆÃÀÌ ÇÊ¿äÇÔ.
1073       
1074        //---------------------------
1075        DMC_NOTIFY_CaPmt = 401,
1076        //
1077        // Channel Tune ȤÀº PMT Change µîÀ¸·Î º¯°æµÈ PMT¸¦
1078        // Cable Card¿¡ Àü´ÞÇØ¾ßÇÔ
1079        // CableCard°¡ ¾ø´Â project¿¡¼­´Â ÀÌ À̺¥Æ®¸¦ ó¸® ÇÏÁö ¾Ê´Â´Ù.
1080
1081        DMC_NOTIFY_IsPodInserted,
1082        //
1083        // Channel Tune ȤÀº PMT Change µîÀ¸·Î º¯°æµÈ PMT¸¦
1084        // Cable Card¿¡ Àü´ÞÇØ¾ßÇÔ
1085        // CableCard°¡ ¾ø´Â project¿¡¼­´Â ÀÌ À̺¥Æ®¸¦ ó¸® ÇÏÁö ¾Ê´Â´Ù.
1086       
1087
1088} DMC_NOTIFY_Event;
1089
1090
1091#ifdef __DEFINE_DMC_STRING_FN__
1092
1093        // Dmc_Channel_Task.c ¿¡¼­´Â ¾Æ·¡ ÇÔ¼ö¸¦ Á¤ÀǸ¦ Çϸç, ´Ù¸¥ source¿¡¼­´Â ¼±¾ðÀ» ÇÑ´Ù.
1094        // ±¸Çö (definition)À» À̰÷¿¡ µÎ´Â ÀÌÀ¯´Â enum definitionÀÌ À̰÷¿¡ Àֱ⠶§¹®..
1095
1096const char *Dmc_NotifyEventString(int ev)
1097{
1098        return (
1099                //(ev) == DMC_NOTIFY_QueryChangeTiming ?    "DnfQueryChangeTiming" :
1100                //(ev) == DMC_NOTIFY_TimingChangeComplete ? "DnfTimingChangeComplete" :
1101                (ev) == DMC_NOTIFY_ScreenAdjustment ?     "DnfScreenAdjust" :
1102                (ev) == DMC_NOTIFY_PATChanged ?           "DnfPATChanged" :
1103                (ev) == DMC_NOTIFY_PMTChanged ?           "DnfPMTChanged" :
1104                (ev) == DMC_NOTIFY_AllPsiReceived ?       "DnfAllPsiRx" :
1105                (ev) == DMC_NOTIFY_PMTChangeError ?       "DnfPMTChangeError" :
1106                (ev) == DMW_NOTIFY_MajorChangeEvent ?     "DnfMajorChangeEvent" :
1107                (ev) == DMW_NOTIFY_AudioDecodeStart ?     "DnfAudioDecodeStart" :
1108                (ev) == DMW_NOTIFY_AudioDecodeStop ?      "DnfAudioDecodeStop" :
1109                (ev) == DMW_NOTIFY_SelectAudio ?          "DnfSelectAudio" :
1110                (ev) == DMW_NOTIFY_SelectVideo ?          "DnfSelectVideo" :
1111                (ev) == DMW_NOTIFY_VideoFreezeEndEvent ?  "DnfVideoFreezeEndEvent" :
1112                (ev) == DMW_NOTIFY_AudioInfo ?            "DnfAudioInfo" :
1113                (ev) == DMW_NOTIFY_DecodingPidReady ?     "DnfDecodingPidReady" :
1114                (ev) == DMC_NOTIFY_ErrorInVideo ?         "DnfErrorInVideo" :
1115                (ev) == DMC_NOTIFY_CriticalError ?        "DnfCriticalError" : 
1116                (ev) == DMC_NOTIFY_CaPmt ?                "DnfCaPmt" : 
1117                (ev) == DMC_NOTIFY_IsPodInserted ?        "DnfIsPodInserted" : 
1118                "Dnf??"
1119        );
1120}
1121
1122#else
1123        // ÀÏ¹Ý ´Ù¸¥ module¿¡¼­´Â ¼±¾ð¸¸ Çϵµ·Ï ÇÑ´Ù.
1124        //
1125        const char *Dmc_NotifyEventString(int ev);
1126
1127#endif
1128
1129
1130
1131
1132
1133
1134//-------------------------------
1135// °¢Á¾ ÃʱâÈ­ ¹× µî·Ï ÇÔ¼ö
1136
1137
1138
1139STATUS Dmc_InitChannelTask(void);
1140void Dmc_EndChannelTask(void);
1141
1142
1143
1144//-------------------------------
1145// ä³Î º¯°æ ÇÔ¼ö
1146
1147#define ONE_PART_CHANNEL_INDICATOR 1024
1148        // minor ¹øÈ£ ÀÚ¸®¿¡ ÀÌ °ªÀÌ µé¾î ÀÖÀ¸¸é majorÀÇ °ªÀ» OnePartChannel ¹øÈ£·Î ÇØ¼®ÇÏ¿© Æ©´×À» ÇÑ´Ù.
1149
1150/*
1151        major             minor
1152        +-----------------+  +-----------------+
1153        0000 0011 1111 xxxx  0000 00xx xxxx xxxx (low 10 bits)
1154                       nnnn         nn nnnn nnnn (total 14 bits, 16383 max)
1155*/
1156
1157#define IsOnePartChannelNumber(major) ((major) >= 0x3f0)
1158
1159#define ConvertToOnePartChannelNumber(major,minor) \
1160                ((((major) & 0x00F)<<10) + ((minor) & 1023))
1161        // ex:
1162        // g_UCM[x].Major = ConvertToOnePartChannelNumber(major, minor);
1163        // g_UCM[x].Minor = ONE_PART_CHANNEL_INDICATOR;
1164
1165#define ConvertToTwoPartChannelNumber(ch,major,minor) \
1166                (((major) = 0x3f0 + (((ch)>>10) & 0xf)), ((minor) = ((ch) & 0x3ff)))
1167        // ex:
1168        // ConvertToTwoPartChannelNumber(g_UCM[x].Major, major, minor);
1169        // Dmc_ChangeRfChannel(major, minor, ...);
1170
1171
1172
1173
1174
1175// unified access to VCT major/minor,  cafrii 040727 add
1176//
1177// example)  major = MajorNumberInCVCT(&cvct->channel[0]);
1178//           minor = MinorNumberInCVCT(&cvct->channel[0]);
1179//
1180#define MajorNumberInCVCT(ch)  (IsOnePartChannelNumber((ch)->major_channel_number) ? \
1181                               ConvertToOnePartChannelNumber((ch)->major_channel_number, (ch)->minor_channel_number) : \
1182                               (ch)->major_channel_number)
1183#define MinorNumberInCVCT(ch)  (IsOnePartChannelNumber((ch)->major_channel_number) ? \
1184                               ONE_PART_CHANNEL_INDICATOR : (ch)->minor_channel_number)
1185
1186#define MajorNumberInTVCT(ch)  ((ch)->major_channel_number)
1187#define MinorNumberInTVCT(ch)  ((ch)->minor_channel_number)
1188
1189
1190
1191
1192
1193
1194
1195
1196#if 0
1197____APIs____()
1198#endif
1199
1200
1201
1202
1203
1204#if 0
1205____Tune_APIs____()
1206#endif
1207
1208       
1209STATUS Dmc_ChangeRfChannelByTuneParam(TuneParam *param, BOOL bWaitForCompletion, void *fn, UINT32 userparam);
1210        //
1211        // Change channel by tuneParam.
1212
1213
1214STATUS Dmc_ChangeRfChannel(int rf, ModulationType type, BOOL bWaitForCompletion, void *fn, UINT32 userparam);
1215        //
1216        // Change channel of 'rf' and 'type'.
1217        // it works without UCM DB.
1218        // tune policy is 'CTF_Automatic' in which mode we scan xVCT -> PSI.
1219        //
1220
1221STATUS Dmc_ChangeRfChannel2(int rf, ModulationType type, int pPid, int vPid, int aPid, 
1222                int major, int minor, int progNumber, BOOL bWaitForCompletion, void *fn, UINT32 userparam);
1223        //
1224        //
1225
1226STATUS Dmc_ChangeExtInput(tDHL_CapVideoInput video, tDHL_CapAudioInput audio, 
1227                                                        BOOL bWaitForCompletion);
1228        //
1229        // change to external input
1230        //
1231
1232STATUS Dmc_StopVideo(void);
1233        //
1234        // Stop All video (and associated audio).
1235        // Can be used all channel/input type. (Analog/Digital/1394)
1236
1237
1238STATUS Dmc_RestartVideo(void);
1239
1240 
1241STATUS Dmc_FreezeVideo(UINT32 bFreeze, BOOL bWaitComplete);
1242
1243STATUS Dmc_HideVideo(UINT32 bHide, BOOL bWaitComplete);
1244       
1245STATUS Dmc_ChangeAudioStream(UINT32 audioPID, UINT32 pcrPID, tDHL_AudioCodingType audioType);
1246
1247
1248// cafrii 070412 add more arguments
1249STATUS Dmc_EnqueueDPC(DMC_FN_DPC dpcfn, UINT32 param1, UINT32 param2, UINT32 param3, UINT32 param4, BOOL bWaitComplete);
1250 
1251BOOL Dmc_CheckCancel(void);
1252        //
1253        // Check if current message (TRUE returned if cancelled)
1254        //
1255        // this function is useful in APP callback task.
1256        // App can use this function to check current msg is cancelled or not.
1257        //
1258        // NOTE! Do not call this function in arbitrary task except DMC task.
1259        //       If called from arbitrary task, it will return FALSE.
1260
1261
1262       
1263//-------------------------------
1264// Utility functions
1265
1266#define AuxVideoSetting void*
1267
1268STATUS Dmc_ChangeDisplay(VOUT_COLOR color, VOUT_FORMAT format, VOUT_RATIO ratio,
1269                                                  tDHL_DispARC ScrAdj, AuxVideoSetting AuxType);
1270        //
1271        // Changes display and timing.
1272        // 'color', 'format', 'Ratio_4x3' is one of VOUT_XXX constants.
1273        // 'ScrAdj' is one of tDHL_DispARC enumeration values.
1274        //   default value is DEFAULT_ADJUSTMENT.
1275        // If invalid adjustment option is used, default value will be used instead.
1276        // 'AuxType' is one of VAUX_XXX constants.
1277        //
1278        // This function is working synchronously.
1279                                                         
1280STATUS Dmc_ChangeVideoAdjustment(tDHL_DispARC adj_hd, tDHL_DispARC adj_sd);
1281
1282
1283//--------
1284// Following functions are convenient functions to use Dmc_ChangeDisplayEx.
1285//
1286
1287int Dmc_WhichATSCFormat(tDHL_VideoSeqHdr *seq);
1288        //
1289        // This function find out which ATSC format current input MPEG stream belongs to.
1290        // It returns the stream number of ATSC Sarnoff 36 stream.
1291
1292
1293
1294
1295DHL_OS_TASK_ID Dmc_GetCurrentTaskID(void);
1296        //
1297        // Get Current Task ID.
1298       
1299BOOL Dmc_IsDmcTask(void);
1300        //
1301        // Return TRUE if current task is DMC task
1302       
1303tDHL_TSD *Dmc_GetCurrentTsd(void);
1304        //
1305        // Get Current active TSD.
1306       
1307
1308DMC_FN_NOTIFY Dmc_RegisterNotificationCallback(DMC_FN_NOTIFY callback);
1309        // notification callback.
1310        // °¢Á¾ º¯°æ Á¤º¸°¡ ¹ß»ýÇϸé callbackÀ» callÇÑ´Ù.
1311        // unregisterÇÏ·Á¸é NULLÀ» ÁöÁ¤.
1312
1313void DMC_RegisterVideoCallback(BOOL bset);
1314        // video°ü·Ã callbackÀÇ ¼³Á¤/ÇØÁö¸¦ À§ÇÑ ÇÔ¼ö
1315        // autoscanÇÒ ¶§ ºÒÇÊ¿äÇÑ callbackÀÌ È£ÃâµÇ¾î¼­ ¹ß»ýÇÒ ¼ö ÀÖ´Â ¹®Á¦¸¦ Â÷´ÜÇÔ
1316
1317
1318UINT32 Dmc_GetSystemRunningTime(void); // cafrii 060720 add
1319
1320STATUS Dmc_ChangeAudioStream(UINT32 audioPID, UINT32 pcrPID, tDHL_AudioCodingType audioType); //cafrii 070830 add
1321        //
1322        // restart audio only.
1323       
1324STATUS Dmc_ChangeVideoStream(UINT32 videoPID, UINT32 pcrPID, tDHL_VideoCodingType videoType); //cafrii 070830 add.
1325        //
1326        // restart video only.
1327
1328//-----------------------------------------------------------------
1329
1330#if 0
1331____ChannelAV____()
1332#endif
1333
1334
1335// Dmc_ChannelAV.c
1336
1337
1338//------------------------------
1339// PSI Á¤º¸ ÂüÁ¶
1340
1341//extern MPEG_PAT   *dmc_pat;
1342//extern MPEG_PMT   *dmc_pmt;
1343
1344
1345//void Dmc_LockPsiMutex(BOOL bLock);
1346        // Rule about psi table access:
1347        // 1. dmc_pat/dmc_pat¸¦ ÂüÁ¶ÇÏ´Â ¸ðµç ÀÓÀÇÀÇ Å½ºÅ©´Â lock µÈ »óÅ¿¡¼­ Á¢±ÙÇØ¾ß ÇÑ´Ù.
1348        // 2. DMC ŽºÅ©´Â dmc_pat/dmc_pat¸¦ º¯°æÇÒ °æ¿ì lock µÈ »óÅ¿¡¼­ º¯°æÇØ¾ß ÇÑ´Ù.
1349        // 3. dmc_p?tPsiCtlÀº read only¿ëµµ·Î¸¸ »ç¿ëÇÏ¿©¾ß Çϸç,
1350        // 4. ¿ª½Ã ÂüÁ¶¸¦ Çϱâ À§Çؼ­´Â lockµÈ »óÅ¿¡¼­ Á¢±ÙÇØ¾ß ÇÑ´Ù.
1351
1352ProgramAVInfo *Dmc_LockAVMutex(void);
1353void Dmc_UnlockAVMutex(void);
1354
1355void Dmc_GetCurrentProgramInfo(ProgramAVInfo *program);
1356        // ÇöÀç ½ÃûÁßÀÎ È­¸éÀÌ Á¤º¸.
1357        // ƯÈ÷ RF·Î Æ©´×ÇÑ °æ¿ì ¾î¶² »óÅÂÀÎÁö ¾Æ´Âµ¥ À¯¿ëÇÏ´Ù.
1358
1359int Dmc_GetCurrentProgramNumber(void);
1360        // ÇöÀç ½ÃûÁßÀÎ program number¸¦ ¸®ÅÏ.
1361        // ProgramInfo¿¡ ÀÖ´Â °ª°ú´Â ¾à°£ ´Ù¸¦ ¼ö ÀÖ´Ù.
1362        // ProgramInfo¿¡ ÀÖ´Â °ªµéÀº ¸ðµÎ ¸¶Áö¸·À¸·Î DecodingÀÌ µ¿ÀÛÇÏ¿´À» ½ÃÁ¡¿¡¼­ÀÇ °ªÀ̸ç,
1363        // Dmc_GetCurrentProgramNumber()°¡ ¸®ÅÏÇÏ´Â °ªÀº ÇöÀçÀÇ program_numberÀÌ´Ù.
1364        // ¸¸¾à ÇöÀç Video°¡ Stop »óŶó¸é, program_number´Â µðÆúÆ® °ª(-1)À» ¸®ÅÏÇÑ´Ù.
1365
1366BOOL Dmc_GetVideoSequenceHeader(tDHL_VideoSeqHdr *seq);
1367        //
1368        // Get Current sequence header.
1369        // Return FALSE if Sequence header is not available now.
1370
1371#if !USE_EPG_MW_PSI_DOWNLOAD
1372STATUS Dmc_PausePsiMonitor(UINT32 bPause);
1373        //
1374        // Pause/Resume PSI monitor  (PAT, PMT)
1375        //
1376        // If this function is called in DMC callback task,
1377        //  'bWaitCompletion' is ignored and working synchronously.
1378#endif
1379
1380
1381void Dmc_PrintProgramInfo(int dbglevel);
1382
1383
1384
1385DMC_FN_NOTIFY Dmc_RegisterDecodeStartCallback(DMC_FN_NOTIFY callback);
1386        // 1394 PTS set callback
1387        // callbackÀÇ param1Àº program_number, param2´Â bIgnoredInDmc..
1388        // PMT°¡ »õ·Î ¼ö½ÅµÉ ¶§¸¶´Ù ºÒ¸®´Â callback
1389       
1390DMC_FN_NOTIFY Dmc_RegisterDecodeStopCallback(DMC_FN_NOTIFY callback);
1391        // VideoStopÀÌ µÉ¶§¸¶´Ù ºÒ¸®´Â callback
1392        // ÇöÀç argument´Â ¸ðµÎ undefined
1393
1394
1395
1396void Dmc_RegisterChannelSymbols(void);
1397
1398
1399
1400#ifdef __cplusplus
1401}
1402#endif
1403                                                 
1404#endif // DMW_CHANNEL_H
1405
1406/********************************************************************
1407
1408        1.06  2005/4/15  timeout variables extern
1409       
1410        1.05  2005/3/28  DMW_HAL_AfcSearchMultiple ¿¡ timeout param Ãß°¡
1411        1.04  2005/3/16  NtscFreqOffset->freqOffset À̸§ º¯°æ
1412                         NTSC FineTuneÀ» À§ÇÑ FreqTuneMode Ãß°¡
1413
1414        1.03  2004/12/06 DMW_HAL_TunerSetFrequency      Ãß°¡
1415        1.02  2004/12/02 CTF_SkipPrescanPidInfo Ãß°¡
1416        1.01  2004/12/01 AppBannerParam¿¡ program number Ãß°¡
1417        1.00  2004/11/?  History °ü¸® ½ÃÀÛ
1418
1419        040831 add CTF_TunerSetOnly
1420        040528 add EnqueDPC
1421           add userparam in channelTuneCallback
1422           move ChannelDemux APIs to its own header
1423           dmc_p?tPsiCtl export
1424        040114 add flag of hidden channel processing
1425
1426 ********************************************************************/
1427 
1428 
Note: See TracBrowser for help on using the repository browser.