source: svn/zas_dstar/hal/common/dsthaldtv.c @ 76

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

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

File size: 42.6 KB
Line 
1/****************************************************************************
2 *_Copyright (c) 2009 Digital Stream Technology Inc. All Rights Reserved.
3 *
4 * Module:      dsthaldtv.c
5 *
6 * Description: This file includes DTV Audio and Video and Userdata.
7 *              And anything related with DTV shall be included in this file.
8 *
9 ***************************************************************************/
10
11#include <stdlib.h>
12#include <string.h>
13
14#include "dsthalcommon.h"
15#include "dsthallocal.h"
16#include "dstdddtv.h"
17#include "dstddaud.h"
18#include "dstddsys.h"
19
20#ifdef DMALLOC
21#include <dmalloc.h>
22#endif
23
24/******************************************************************************
25 * Global variable declaration
26 ******************************************************************************/
27DS_U32 gDTVDbgLvl = 1;          //DHL_AV debug level
28DHL_DTV_CONFIG  g_dhldtv={0};
29DHL_DTV_SRCVID_INFO g_dhlmpeginfo = {0};
30DS_BOOL g_DTVCCEnable = DS_FALSE;
31
32/*
33 * Delay for popup noise.
34 */
35int Popup_StartDelay = 150;
36int Popup_EndDelay = 40;
37
38DHL_PESFILTER g_PESFilter[MAX_PES_FILTER_CNT];
39
40/******************************************************************************
41 * Imported variable declaration
42 ******************************************************************************/
43extern DHL_DISP_CONFIG g_DispConfig;
44extern DHL_AUDIO_CONFIG g_AudConfig;
45
46/******************************************************************************
47 * Imported function declaration
48 ******************************************************************************/
49
50
51/******************************************************************************
52 * Local definitions / typedefs
53 ******************************************************************************/
54#define LOCK_DTV_MUTEX()        do { \
55                if ( OS_TakeMutex(g_dhldtv.AVMutex) != OS_OK ) { \
56                        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"MUTEX ERROR, LINE=%d\n", __LINE__); \
57                        goto done; \
58                } \
59        } while (0)
60
61#define UNLOCK_DTV_MUTEX()      do { \
62                if ( OS_GiveMutex(g_dhldtv.AVMutex) != OS_OK ) { \
63                        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"MUTEX ERROR, LINE=%d\n", __LINE__); \
64                } \
65        } while (0)
66
67#define bVidReq         g_dhldtv.bVideoPlayReq
68#define bAudReq         g_dhldtv.bAudioPlayReq
69#define bVidInPlay      g_dhldtv.bVideoInPlay
70#define bAudInPlay      g_dhldtv.bAudioInPlay
71
72/******************************************************************************
73 * Local variables declaration
74 ******************************************************************************/
75static P_DHL_PRG_INFO   pPrgInfo = &g_dhldtv.PrgInfo;
76static DS_U32 UserdataThreadId;          // MpegUserData Thread ID
77static int bUserDataThread_Run = 0;         // MpegUserData Thread Run Flag
78static DS_U8 ccBuf[1024];               // UserData Buffer
79
80/******************************************************************************
81 * Local function prototypes
82 ******************************************************************************/
83static DHL_RESULT DHL_DTV_MpegUserdataThreadInit(void);
84static DHL_RESULT DHL_DTV_MpegUserdataThreadStart(void);
85static DHL_RESULT DHL_DTV_MpegUserdataThreadStop(void);
86
87#if 0
88___COMMON_APIs___()
89#endif
90/********************************************************************************
91 * FUNCTION:                                                                   
92 *     DHL_DTV_INIT                                                             
93 *
94 * Purpose:                                                                   
95 *      video/audio components initialize(open->init->connect)                 
96 * Arguments:                                                                   
97 *                                                                             
98 * Returns:                                                                   
99 *     DHL_RESULT  success - DHL_OK
100 *                      fail - DHL_FAIL                         
101 *********************************************************************************/
102DHL_RESULT DHL_DTV_Init(void)
103{
104        DHL_RESULT                      dhlResult       = DHL_OK;
105
106        g_dhldtv.bVideoPlayReq = _FALSE_;
107        g_dhldtv.bAudioPlayReq = _FALSE_;
108        g_dhldtv.bVideoInPlay = _FALSE_;
109        g_dhldtv.bAudioInPlay = _FALSE_;
110
111        g_dhldtv.AVMutex = OS_CreateMutex( "DTV_Mutex" );
112        if ( g_dhldtv.AVMutex == (OS_MUTEX_ID)0 ) {
113                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," |error|%d(0x%x)\r\n",__LINE__,dhlResult);
114                dhlResult = DHL_FAIL_CORE_DRIVER;
115                goto done;
116        }
117
118        dhlResult = DD_DTV_Init();
119    SysASSERT( dhlResult == DHL_OK );
120
121        dhlResult = DHL_DTV_InitCC();
122    SysASSERT( dhlResult == DHL_OK );
123
124done:
125    SysENSURE( dhlResult == DHL_OK );
126
127        return dhlResult;
128}
129
130/********************************************************************************
131 * FUNCTION:                                                                   
132 *     DHL_DTV_START                                                           
133 *
134 * Purpose:                                                                   
135 *      Video components start                         
136 *      Audio Components start
137 * Arguments:                                                                   
138 *      [in]uVidPID - Video PID
139 *      [in]uAudPID - PCR PID
140 *      [in]uPcrPID - Video PID
141 *      [in]AudStreamType - Audio stream type (MPEG-2,AC-3)     
142 * Returns:                                                                   
143 *     DHL_RESULT   if success - DHL_OK fail - DHL_FAIL 
144 ********************************************************************************/
145DHL_RESULT DHL_DTV_StartAV(DS_U16 uVidPID, DS_U16 uAudPID, 
146                         DS_U16 uPcrPID, DHL_AUD_STREAMTYPE AudStreamType)
147{
148    DHL_RESULT  dhlResult = DHL_OK;
149        int isVideo = 1;
150        int isAudio = 1;
151       
152        if ( uVidPID == 0 )
153                isVideo = 0;
154        if ( uAudPID == 0 )
155                isAudio = 0;
156       
157        if ( (!isVideo && !isAudio) || uPcrPID == 0 ) 
158        {
159                dhlResult = DHL_FAIL_INVALID_PARAM;
160                goto done;
161        }
162       
163        dhlResult = DHL_DTV_StopVideo();
164    SysASSERT( dhlResult == DHL_OK );
165
166        dhlResult = DHL_DTV_StopAudio();
167    SysASSERT( dhlResult == DHL_OK );
168
169        if ( isAudio ) 
170        {
171                dhlResult = DHL_DTV_StartAudio( uAudPID, uPcrPID, AudStreamType, 0 );
172        SysASSERT( dhlResult == DHL_OK );
173        }
174       
175        if ( isVideo ) 
176        {
177                dhlResult = DHL_DTV_StartVideo( uVidPID, uPcrPID );
178        SysASSERT( dhlResult == DHL_OK );
179        }
180       
181done:
182    SysENSURE( dhlResult == DHL_OK );
183
184        return dhlResult;
185}
186
187/********************************************************************************
188 *FUNCTION:                                                                   
189 *    DHL_DTV_STOP                                                             
190 *
191 *Purpose:                                                                   
192 *      Video components stop                           
193 *      Audio Components stop
194 *Arguments:                                                                   
195 *                                                                             
196 *Returns:                                                                   
197 *    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL   
198 ********************************************************************************/
199DHL_RESULT DHL_DTV_StopAV(void)
200{
201    DHL_RESULT                  dhlResult       = DHL_OK;
202
203        dhlResult = DHL_DTV_StopVideo();
204    SysASSERT( dhlResult == DHL_OK );
205
206        dhlResult = DHL_DTV_StopAudio();
207    SysASSERT( dhlResult == DHL_OK );
208
209    SysENSURE( dhlResult == DHL_OK );
210   
211        return dhlResult;       
212}
213
214/********************************************************************************
215 * FUNCTION:                                                                   
216 *     DHL_DTV_CLOSE                                                           
217 *
218 * Purpose:                                                                   
219 *      video/audio components close (stop->disconncet->close)                         
220 *
221 * Arguments:                                                                   
222 *                                                                             
223 * Returns:                                                                   
224 *     DHL_RESULT   if success - DHL_OK fail - DHL_FAIL                         
225 ********************************************************************************/
226DHL_RESULT DHL_DTV_Close(void)
227{
228    DHL_RESULT                  dhlResult       = DHL_OK;
229       
230        if ( bVidReq == _TRUE_ ) 
231        {
232                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Digital video component is already started.\n");
233                DHL_DTV_StopVideo();
234        }       
235       
236        if ( bAudReq == _TRUE_ ) 
237        {
238                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Digital audio component is already started.\n");
239                DHL_DTV_StopAudio();
240        }
241       
242        dhlResult = DD_DTV_Close();
243
244    SysENSURE( dhlResult == DHL_OK );
245
246        return dhlResult;       
247}
248
249/********************************************************************************
250FUNCTION:                                                                   
251    DHL_DTV_Pause                                                       
252
253Purpose:                                                                   
254        video pause                     
255
256Arguments:                                                                     
257                                                                               
258Returns:                                                                   
259    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL                           
260*********************************************************************************/
261DHL_RESULT DHL_DTV_Pause(void)
262{
263    DHL_RESULT  dhlResult = DHL_OK;
264
265        if ( g_dhldtv.bVideoPlayReq == 0 ) 
266        {
267                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," SKIP: Video is not started.\n");
268                return dhlResult;
269        }
270
271        if ( g_dhldtv.isAVPaused == 1 ) 
272        {
273                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," already paused. SKIP\n");
274                return dhlResult;
275        }
276       
277        dhlResult = DD_DTV_Pause();
278        SysASSERT( dhlResult == DHL_OK );
279
280        g_dhldtv.isAVPaused = 1;
281
282    SysENSURE( dhlResult == DHL_OK );
283
284        return dhlResult;       
285       
286}
287/********************************************************************************
288FUNCTION:                                                                   
289    DHL_DTV_Pause                                                       
290
291Purpose:                                                                   
292        video resume                   
293       
294Arguments:                                                                     
295                                                                               
296Returns:                                                                   
297    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL                           
298*********************************************************************************/
299DHL_RESULT DHL_DTV_Resume(void)
300{
301    DHL_RESULT  dhlResult = DHL_OK;
302
303        if ( g_dhldtv.bVideoPlayReq == 0 ) 
304        {
305                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," SKIP: Video is not started.\n");
306                return dhlResult;
307        }
308
309        if ( g_dhldtv.isAVPaused == 0 ) 
310        {
311                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," already resumed. SKIP\n");
312                return dhlResult;
313        }
314
315        dhlResult = DD_DTV_Resume();
316        SysASSERT( dhlResult == DHL_OK );
317
318        g_dhldtv.isAVPaused = 0;
319
320        SysENSURE( dhlResult == DHL_OK );
321
322        return dhlResult;       
323}
324
325
326/********************************************************************************
327FUNCTION:                                                                   
328    DHL_DTV_PRESET_CALLBACK                                                             
329
330Purpose:                                                                   
331        set callback functions                 
332
333Arguments:                                                                     
334        [in] pCallBack - callback function's pointer
335        [in] CBType - callback function type (ex) sequence header callback ..
336        [in] ClientCntx - Client Argument 1
337Returns:                                                                   
338    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL                           
339*********************************************************************************/
340DHL_RESULT DHL_DTV_PresetCallback(      void *pCallBack,
341                                                                        DHL_DTV_CBTYPE CBType,
342                                                                        DS_U32 ClientCntx)
343{
344    DHL_RESULT dhlResult = DHL_OK;
345   
346        switch (CBType) 
347    {
348                case DHL_CB_VDC_SQH:                    // Sequence Header Information
349                case DHL_CB_VDC_CCUDP:                  // CC User Data Parser
350                case DHL_CB_NOTIFY_VSTARTING:
351                case DHL_CB_NOTIFY_VSTOPPING:
352                case DHL_CB_NOTIFY_DISPINITIALIZE:
353                case DHL_CB_VDC_FATAL_ERROR:    // Notify VDC FATAL ERROR:
354                case DHL_CB_VDC_DECODE_ERR:             // Decode Error Report
355                        g_dhldtv.VideoCbFunc[CBType] = pCallBack;
356                        g_dhldtv.VideoCbParam[CBType] = ClientCntx;
357                        break;
358
359                default:
360                        dhlResult = DHL_FAIL_INVALID_PARAM;
361                        break;
362        }
363
364        SysENSURE( dhlResult == DHL_OK );
365
366        return dhlResult;       
367}
368
369DHL_RESULT DHL_DTV_DoCallback(DHL_DTV_CBTYPE CBType, void *Arg)
370{
371    DHL_RESULT dhlResult = DHL_OK;
372    P_DHL_VDC_CALLBACK pCallBack = (P_DHL_VDC_CALLBACK)NULL;
373    DS_U32 ClientCntx = 0;
374   
375        switch (CBType) 
376    {
377                case DHL_CB_VDC_SQH:                    // Sequence Header Information
378                case DHL_CB_VDC_CCUDP:                  // CC User Data Parser
379                case DHL_CB_NOTIFY_VSTARTING:
380                case DHL_CB_NOTIFY_VSTOPPING:
381                case DHL_CB_NOTIFY_DISPINITIALIZE:
382                case DHL_CB_VDC_FATAL_ERROR:    // Notify VDC FATAL ERROR:
383                case DHL_CB_VDC_DECODE_ERR:             // Decode Error Report
384                        pCallBack = g_dhldtv.VideoCbFunc[CBType];
385                        ClientCntx = g_dhldtv.VideoCbParam[CBType];
386                        break;
387
388                default:
389                    dhlResult = DHL_FAIL_INVALID_PARAM;
390                        break;
391        }
392       
393        if ( pCallBack )
394        {
395            (*pCallBack)(ClientCntx, Arg);
396    }
397       
398        return dhlResult;
399}
400/********************************************************************************
401FUNCTION:                                                                   
402    DHL_AUD_IsAvAlive                                                           
403
404Purpose:                                                                   
405        Get current Av status
406Arguments:                                                                     
407
408Returns:                                                                   
409                       
410*********************************************************************************/
411DHL_RESULT DHL_DTV_IsAvAlive(DS_BOOL *bVideo, DS_BOOL *bAudio)
412{
413        DHL_RESULT      dhlResult = DHL_OK;
414
415        dhlResult = DD_DTV_IsVideoAlive( bVideo, 0 );
416        SysASSERT( dhlResult == DHL_OK );
417       
418        dhlResult = DD_DTV_IsAudioAlive( bAudio, 0 );
419        SysASSERT( dhlResult == DHL_OK );
420       
421        return dhlResult;
422}
423
424/********************************************************************************
425FUNCTION:                                                                   
426    DHL_AUD_IsAvAliveExt                                                       
427
428Purpose:                                                                   
429        Get current AV stream status
430Arguments:                                                                     
431        bVideo - video alive flag
432        bAudio - audio alive flag
433        uUserWaitingTick - waiting tick for Sequence Header
434Returns:
435Notes:
436        jfet_2005/01/15
437        After the check the video buffer, if there is no video data in buffer
438        then check Sequence Header Time Stamp
439        JFET_20050428
440        CHECK the ADUIO DECODER after check the audio si buffer.       
441*********************************************************************************/
442DHL_RESULT DHL_DTV_IsAvAliveExt(DS_BOOL *bVideo, DS_BOOL *bAudio, DS_U32 uVidWaitingTick, DS_U32 uAudWaitingTick)
443{
444        DHL_RESULT      dhlResult = DHL_OK;
445
446        dhlResult = DD_DTV_IsVideoAlive( bVideo, uVidWaitingTick );
447        SysASSERT( dhlResult == DHL_OK );
448       
449        dhlResult = DD_DTV_IsAudioAlive( bAudio, uAudWaitingTick );
450        SysASSERT( dhlResult == DHL_OK );
451       
452        return dhlResult;
453}
454
455DS_BOOL DHL_DTV_IsAVStarted(void)
456{
457    return ( DHL_DTV_IsVideoStarted() || DHL_DTV_IsAudioStarted() );
458}
459
460void DHL_DTV_SetStillPicture( DS_BOOL bStill )
461{
462}
463
464DS_BOOL DHL_DTV_GetStillPicture(void)
465{
466   
467    return DS_FALSE;
468}
469
470#if 0
471___VIDEO_APIs___()
472#endif
473/********************************************************************************
474FUNCTION:                                                                   
475    DHL_DTV_StartVideo                                                         
476
477Purpose:                                                                   
478        Only video components start                             
479Arguments:                                                                     
480        [in]uVidPID - Video PID
481        [in]uPcrPID - Video PID
482Returns:                                                                   
483    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL     
484*********************************************************************************/
485DHL_RESULT DHL_DTV_StartVideo(DS_U16 uVidPID, DS_U16 uPcrPID)
486{
487    DHL_RESULT  dhlResult = DHL_OK;
488
489        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," uVidPID=%d  uPcrPID=%d\r\n", uVidPID, uPcrPID);
490       
491        if ( bVidReq == _TRUE_ ) 
492        {
493                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Digital video component is already started.\n");
494                DHL_DTV_StopVideo();
495        }
496       
497        if ( uVidPID == 0 ) 
498        {
499                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Video PID is 0, stop digital video.\n");
500                return dhlResult;
501        }
502
503        LOCK_DTV_MUTEX();
504       
505        bVidReq = _TRUE_;
506        pPrgInfo->VidPID = uVidPID;
507        pPrgInfo->PCRPID = uPcrPID;
508
509        //
510        // Play both audio and video.
511        //
512        dhlResult = DD_DTV_VideoStart(pPrgInfo->VidPID, pPrgInfo->PCRPID);
513        if (DHL_ERROR(dhlResult)) 
514        {
515                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|error|%d(0x%x)\r\n",__LINE__,dhlResult);
516                UNLOCK_DTV_MUTEX();
517                goto done;
518        }
519   
520        dhlResult = DHL_DTV_MpegUserdataThreadStart();
521        if(DHL_ERROR(dhlResult)) 
522        {
523                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|error|%d(0x%x)\r\n",__LINE__,dhlResult);
524                UNLOCK_DTV_MUTEX();
525                goto done;
526        }
527
528        UNLOCK_DTV_MUTEX();
529
530    SysENSURE( dhlResult == DHL_OK );
531
532        return dhlResult;       
533
534done:
535        UNLOCK_DTV_MUTEX();
536
537        return dhlResult;       
538}
539
540/********************************************************************************
541FUNCTION:                                                                   
542    DHL_DTV_StartVideo2
543
544Purpose:                                                                   
545        Only video components start                             
546Arguments:                                                                     
547        [in]uVidPID - Video PID
548        [in]uPcrPID - Video PID
549        [in]uAudPID - Video PID
550Returns:                                                                   
551    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL     
552*********************************************************************************/
553DHL_RESULT DHL_DTV_StartVideoEx(DS_U16 uVidPID, DS_U16 uPcrPID,DS_U16 uAudPID)
554{
555        return DHL_DTV_StartVideo(uVidPID, uPcrPID);
556}
557
558DHL_RESULT DHL_DTV_StartVideoEx2(DS_U16 uVidPID, DS_U16 uPcrPID,DS_U8 Stream_Type)
559{
560    DHL_RESULT  dhlResult = DHL_OK;
561
562        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," uVidPID=%d  uPcrPID=%d\r\n", uVidPID, uPcrPID);
563       
564        if ( bVidReq == _TRUE_ ) 
565        {
566                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Digital video component is already started.\n");
567                DHL_DTV_StopVideo();
568        }
569       
570        if ( uVidPID == 0 ) 
571        {
572                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Video PID is 0, stop digital video.\n");
573                return dhlResult;
574        }
575
576        LOCK_DTV_MUTEX();
577       
578        bVidReq = _TRUE_;
579        pPrgInfo->VidPID = uVidPID;
580        pPrgInfo->PCRPID = uPcrPID;
581
582        //
583        // Play both audio and video.
584        //
585        dhlResult = DD_DTV_VideoStartEx2(pPrgInfo->VidPID, pPrgInfo->PCRPID,Stream_Type);
586        if (DHL_ERROR(dhlResult)) 
587        {
588                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|error|%d(0x%x)\r\n",__LINE__,dhlResult);
589                UNLOCK_DTV_MUTEX();
590                goto done;
591        }
592   
593        dhlResult = DHL_DTV_MpegUserdataThreadStart();
594        if(DHL_ERROR(dhlResult)) 
595        {
596                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|error|%d(0x%x)\r\n",__LINE__,dhlResult);
597                UNLOCK_DTV_MUTEX();
598                goto done;
599        }
600
601        UNLOCK_DTV_MUTEX();
602
603    SysENSURE( dhlResult == DHL_OK );
604
605        return dhlResult;       
606
607done:
608        UNLOCK_DTV_MUTEX();
609
610        return dhlResult;       
611}
612
613DHL_RESULT DHL_DTV_StartVideo2(DS_U16 uVidPID, DS_U16 uPcrPID,DS_U16 uAudPID)
614{
615    return DHL_DTV_StartVideoEx(uVidPID,uPcrPID,uAudPID);
616}
617
618/********************************************************************************
619FUNCTION:                                                                   
620    DHL_DTV_StopVideo
621
622Purpose:                                                                   
623        Video components stop                           
624        Audio Components stop
625Arguments:                                                                     
626                                                                               
627Returns:                                                                   
628    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL     
629*********************************************************************************/
630DHL_RESULT DHL_DTV_StopVideo(void)
631{
632    DHL_RESULT  dhlResult = DHL_OK;
633       
634    if ( bVidReq == _FALSE_ ) 
635    {
636        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," is already stopped.\r\n");
637        return dhlResult;
638    }
639       
640        LOCK_DTV_MUTEX();
641       
642    dhlResult = DD_DTV_VideoStop();
643        SysASSERT( dhlResult == DHL_OK );
644
645        bVidReq = _FALSE_;
646        pPrgInfo->VidPID = (DS_U16)-1;
647       
648        dhlResult = DHL_DTV_MpegUserdataThreadStop();
649        SysASSERT( dhlResult == DHL_OK );
650       
651        UNLOCK_DTV_MUTEX();
652        SysENSURE( dhlResult == DHL_OK );
653        return dhlResult;
654
655done:
656        UNLOCK_DTV_MUTEX();
657        return dhlResult;
658}
659
660DS_BOOL DHL_DTV_IsVideoStarted(void)
661{
662        return g_dhldtv.bVideoPlayReq;
663}
664
665/********************************************************************************
666FUNCTION:                                                                   
667    DHL_DTV_GetSrcVideoInfo                                                             
668Purpose:                                                                   
669        Get source video information from sequence header
670Arguments:                                                                     
671
672Returns:                                                                   
673        DHL_RESULT     
674Notes:
675*********************************************************************************/
676DHL_RESULT DHL_DTV_GetSrcVideoInfo(P_DHL_DTV_SRCVID_INFO pSrcInfo)
677{
678        DHL_RESULT      dhlResult = DHL_OK;
679
680        memcpy(pSrcInfo,&g_dhlmpeginfo,sizeof(DHL_DTV_SRCVID_INFO));
681
682        return dhlResult;
683}
684
685#if 0
686___AUDIO_APIs___()
687#endif
688/********************************************************************************
689FUNCTION:                                                                   
690    DHL_DTV_StartAudio                                                         
691
692Purpose:                                                                   
693        Audio Components start
694Arguments:                                                                     
695        [in]uAudPID - audio PID
696        [in]AudStreamType - Audio stream type (MPEG-2,AC-3)     
697Returns:                                                                   
698    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL     
699*********************************************************************************/
700DHL_RESULT DHL_DTV_StartAudio(DS_U16 uAudPID,
701                                                         DS_U16 uPcrPID, 
702                                                         DHL_AUD_STREAMTYPE AudStreamType,
703                                                         DS_BOOL bAudOnlyCh)
704{
705    DHL_RESULT  dhlResult = DHL_OK;
706
707        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," uAudPID=0x%x  uPcrPID=0x%x  AudStreamType=0x%x\r\n", uAudPID, uPcrPID, AudStreamType);
708       
709        if ( bAudReq == _TRUE_ ) 
710        {
711                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Digital audio component is already started.\n");
712                dhlResult = DHL_DTV_StopAudio();
713                SysASSERT(dhlResult==DHL_OK);
714        }
715       
716        if ( uAudPID == 0 ) 
717        {
718                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," INFO: Audio PID is 0, stop digital video.\n");
719                dhlResult = DHL_DTV_StopAudio();
720                return dhlResult;
721        }
722
723        if ( DHL_CAP_GetVideoSrc(0) != DHL_CAP_DTV0_VIDEO && DHL_CAP_GetVideoSrc(1) != DHL_CAP_DTV0_VIDEO ) 
724        {
725                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"ERROR: Both MAIN/SUB is not DTV Mode.\n");
726
727                return DHL_FAIL_CONNECTION_FAILS;
728        }
729   
730        LOCK_DTV_MUTEX();
731       
732        bAudReq = _TRUE_;
733        pPrgInfo->AudPID = uAudPID;
734        pPrgInfo->PCRPID = uPcrPID;
735        pPrgInfo->AudStreamType = AudStreamType;
736
737        dhlResult = DD_AUD_VolumeFadeInOut_I2S(0);
738        SysASSERT( dhlResult == DHL_OK );
739
740        dhlResult = DD_DTV_AudioStart(pPrgInfo->AudPID, pPrgInfo->PCRPID, pPrgInfo->AudStreamType, 0/*bAudOnlyCh*/ );
741        SysASSERT( dhlResult == DHL_OK );
742
743        if (Popup_StartDelay)
744                OS_mDelay( Popup_StartDelay );
745
746        dhlResult = DD_AUD_VolumeFadeInOut_I2S(1);
747        SysASSERT( dhlResult == DHL_OK );
748
749        UNLOCK_DTV_MUTEX();
750
751        SysENSURE( dhlResult == DHL_OK );
752        return dhlResult;       
753
754done:
755        UNLOCK_DTV_MUTEX();
756        return dhlResult;       
757}
758
759/********************************************************************************
760FUNCTION:                                                                   
761    DHL_DTV_StopAudio                                                   
762
763Purpose:                                                                   
764        Audio Components stop
765Arguments:                                                                     
766                                                                               
767Returns:                                                                   
768    DHL_RESULT   if success - DHL_OK fail - DHL_FAIL     
769*********************************************************************************/
770DHL_RESULT DHL_DTV_StopAudio(void)
771{
772    DHL_RESULT  dhlResult = DHL_OK;
773       
774    if ( bAudReq == _FALSE_ ) 
775    {
776        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," is already stopped.\r\n");
777        return dhlResult;
778    }
779       
780        LOCK_DTV_MUTEX();
781       
782        dhlResult = DD_AUD_VolumeFadeInOut_I2S(0);
783        SysASSERT( dhlResult == DHL_OK );
784
785        //
786        // Delay for popup noise before stop.
787        //
788        if (Popup_EndDelay)
789                OS_mDelay(Popup_EndDelay);
790       
791        dhlResult = DD_DTV_AudioStop(); 
792        SysASSERT( dhlResult == DHL_OK );
793       
794        bAudReq = _FALSE_;
795        pPrgInfo->AudPID = 0;
796//      pPrgInfo->PCRPID = uPcrPID;     <-- PCRPID´Â Video¿¡¼­µµ »ç¿ëÇϹǷΠInvalidate½ÃŰÁö ¾ÊÀ½.
797        pPrgInfo->AudStreamType = 0;
798
799        UNLOCK_DTV_MUTEX();
800
801        SysENSURE( dhlResult == DHL_OK );
802
803done:
804        //UNLOCK_DTV_MUTEX();
805        return dhlResult;       
806}
807
808DS_BOOL DHL_DTV_IsAudioStarted(void)
809{
810        return g_dhldtv.bAudioPlayReq;
811}
812
813/********************************************************************************
814 FUNCTION:                                                                   
815    DHL_DTV_SetAudioDynamicRange                                                       
816
817    @param dynrngOn=1 to enable Dyanmic Range Control.
818    @return
819*********************************************************************************/
820DHL_RESULT DHL_DTV_SetAudioDynamicRange( DS_BOOL dynrngOn )
821{
822        DHL_RESULT      dhlResult = DHL_OK;
823       
824        dhlResult = DD_DTV_SetAudioDynamicRange(dynrngOn);
825        if(!DHL_ERROR(dhlResult))
826                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," |success| %s\r\n",dynrngOn == _TRUE_ ? "On":"Off");
827
828        return dhlResult;
829}
830
831/********************************************************************************
832FUNCTION:                                                                   
833    DHL_DTV_GetAudioDynamicRange                                                       
834Purpose:                                                                   
835       
836Arguments:                                                                     
837        [out] pRangeHi  - the scale factor of high signal
838        [out] pRangeLow - the scale factor of low signal.
839Returns:                                                                   
840        DHL_RESULT     
841Notes:
842        range 0~255
843*********************************************************************************/
844DHL_RESULT DHL_DTV_GetAudioDynamicRange( DS_U32* pRangeHi, DS_U32* pRangeLow )
845{
846        DHL_RESULT      dhlResult = DHL_OK;
847   
848        return dhlResult;
849}
850
851/********************************************************************************
852FUNCTION:                                                                   
853    DHL_DTV_GetAudioInfoAc3                                                             
854Purpose:                                                                   
855       
856Arguments:                                                                     
857        [OUT] pAc3Info - ac3 information
858Returns:                                                                   
859
860Notes:
861*********************************************************************************/
862DHL_RESULT DHL_DTV_GetAudioInfoAc3( P_DHL_DTV_AC3_STATUS pAc3Info )
863{
864        DHL_RESULT      dhlResult = DHL_OK;
865
866        if ( DD_DTV_IsAudioStarted() == 0 ) 
867        {
868                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"ERROR, Digital Audio is not started. line=%d\n", __LINE__ );
869                dhlResult = DHL_FAIL;
870                goto done;
871        }
872       
873        dhlResult = DD_DTV_GetAC3Info( pAc3Info );
874
875done:
876        return dhlResult;
877}
878
879/********************************************************************************
880FUNCTION:                                                                   
881    DHL_DTV_GetAudioInfoMpeg                                                           
882Purpose:                                                                   
883       
884Arguments:                                                                     
885        [OUT] pMpegInfo - mpeg information
886Returns:                                                                   
887
888Notes:
889*********************************************************************************/
890DHL_RESULT DHL_DTV_GetAudioInfoMpeg( P_DHL_DTV_MPEG_STATUS pMpegInfo )
891{
892        DHL_RESULT      dhlResult = DHL_OK;
893
894        return dhlResult;
895}
896
897/********************************************************************************
898FUNCTION:                                                                   
899    DHL_DTV_DumpAudioInfoAc3                                                           
900Purpose:                                                                   
901       
902Arguments:                                                                     
903
904Returns:                                                                   
905
906Notes:
907*********************************************************************************/
908void DHL_DTV_DumpAudioInfoAc3( void )
909{
910        DHL_RESULT dhlResult = DHL_OK;
911        DHL_DTV_AC3_STATUS Ac3Status;
912       
913        dhlResult = DHL_DTV_GetAudioInfoAc3(&Ac3Status);
914       
915        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"\n\t<< AC3 INFOMATION >> \r\n");
916/*...display configuration ______________________________________________________________*/
917
918        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," ____________________________________________________\r\n\n");
919        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Fscod (Sample Rate Code)          | %s \r\n",(Ac3Status.Fscod == 0) ? "48kHz":
920                                                                                                                (Ac3Status.Fscod == 1) ? "44.1kHz":
921                                                                                                                (Ac3Status.Fscod == 2) ? "32kHz":"UnKnown");   
922                                                                                                               
923        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Frmsizecod (FrameSizeCode)        | %s \r\n",(Ac3Status.Frmsizecod == 0) ? "Low frequency effects channel is off":
924                                                                                                                (Ac3Status.Frmsizecod == 1) ? "Low frequency effects channel is on":"UnKnown");
925                                                                                                               
926        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Acmod (Audio coding mode)         | %s \r\n",(Ac3Status.Acmod == 0) ? "Ch1,Ch2":
927                                                                                                                (Ac3Status.Acmod == 1) ? "C":
928                                                                                                                (Ac3Status.Acmod == 2) ? "L,R":
929                                                                                                                (Ac3Status.Acmod == 3) ? "L,C,R":
930                                                                                                                (Ac3Status.Acmod == 4) ? "L,R,S":
931                                                                                                                (Ac3Status.Acmod == 5) ? "L,C,R,S":
932                                                                                                                (Ac3Status.Acmod == 6) ? "L,R,SL,SR":
933                                                                                                                (Ac3Status.Acmod == 7) ? "L,C,R,SL,SR":"UnKnown");
934        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Bsid(BitStreamIdentification)     | 0x%x \r\n",(int)Ac3Status.Bsid);
935        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Bsmod(Bit Stream Mode)            | %s \r\n",(Ac3Status.Bsmod == 0) ? "Main Audio Service:Complete main(CM)":
936                                                                                                                (Ac3Status.Bsmod == 1) ? "Main Audio Service:Music and Effect(ME)":
937                                                                                                                (Ac3Status.Bsmod == 2) ? "Associated Service:Visually impaired(VI)":
938                                                                                                                (Ac3Status.Bsmod == 3) ? "Associated Service:Hearing impaired(HI)":
939                                                                                                                (Ac3Status.Bsmod == 4) ? "Associated Service:Dialoge(D)":
940                                                                                                                (Ac3Status.Bsmod == 5) ? "Associated Service:Commentary(c)":
941                                                                                                                (Ac3Status.Bsmod == 6) ? "Associated Service:Emergency(E)":
942                                                                                                                (Ac3Status.Bsmod == 7) ? "Associated Service:Voice over(VO)":"UnKnown");
943        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Cmixlev(Center Mix Lvl)           | %s \r\n",(Ac3Status.Cmixlev == 0) ? "0.707(-3.0 dB)":
944                                                                                                                (Ac3Status.Cmixlev == 1) ? "0.595(-4.5 dB)":
945                                                                                                                (Ac3Status.Cmixlev == 2) ? "0.500(-6.0 dB)":
946                                                                                                                (Ac3Status.Cmixlev == 3) ? "reserved":"UnKnown");
947        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Surmixlev(SurroundMix Lvl)        | %s \r\n",(Ac3Status.Surmixlev == 0) ? "0.707(-3 dB)":
948                                                                                                                (Ac3Status.Surmixlev == 1) ? "0.500(-6 dB)":
949                                                                                                                (Ac3Status.Surmixlev == 2) ? "0.000(0)":
950                                                                                                                (Ac3Status.Surmixlev == 3) ? "reserved":"UnKnown");
951        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Dsurmod(DolbySurroundMode)        | %s \r\n",(Ac3Status.Dsurmod == 0) ? "not indicated":
952                                                                                                                (Ac3Status.Dsurmod == 1) ? "Not Dolby Surround encoded":
953                                                                                                                (Ac3Status.Dsurmod == 2) ? "Dolby Surround encoded":
954                                                                                                                (Ac3Status.Dsurmod == 3) ? "reserved":"UnKnown");
955        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Copyright                         | %d \r\n",(int)(Ac3Status.Copyright));
956        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Original                          | %d \r\n",(int)(Ac3Status.Original));
957        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Dialnorm1(Dialogue Normalization) | - %d dB \r\n",(int)(Ac3Status.Dialnorm1));
958        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Dialnorm2(Dialogue Normalization) | - %d dB \r\n",(int)(Ac3Status.Dialnorm2)); 
959        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Langcod1(Language Code1)          | %d \r\n",(int)(Ac3Status.Langcod1));
960        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Langcod2(Language Code2)          | %d \r\n",(int)(Ac3Status.Langcod2));       
961        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Roomtype1                         | %s \r\n",(Ac3Status.Roomtype1 == 0) ? "not indicated":
962                                                                                                                (Ac3Status.Roomtype1 == 1) ? "large room, X curve monitor":
963                                                                                                                (Ac3Status.Roomtype1 == 2) ? "small room, flat monitor":
964                                                                                                                (Ac3Status.Roomtype1 == 3) ? "reserved":"UnKnown");     
965        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Roomtype2                         | %s \r\n",(Ac3Status.Roomtype2 == 0) ? "not indicated":
966                                                                                                                (Ac3Status.Roomtype2 == 1) ? "large room, X curve monitor":
967                                                                                                                (Ac3Status.Roomtype2 == 2) ? "small room, flat monitor":
968                                                                                                                (Ac3Status.Roomtype2 == 3) ? "reserved":"UnKnown");                                                                                                     
969        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Mixlevel1                         | %d \r\n",(int)(Ac3Status.Mixlevel1));
970        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"  - Mixlevel2                         | %d \r\n",(int)(Ac3Status.Mixlevel2));                                                                                                               
971        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV," ____________________________________________________\r\n");
972}
973
974#if 0
975___Subtitle_APIs___()
976#endif
977
978DHL_RESULT DHL_DTV_PresetPESCallback( DHL_DTV_PES_CALLBACK cbFunc )
979{
980    DHL_RESULT  dhlResult = DHL_OK;
981   
982    dhlResult = DD_DTV_PresetPESCallback(cbFunc);
983   
984    return dhlResult;
985}
986
987DHL_RESULT DHL_DTV_StartPESFilter(DS_U16 uPESPid)
988{
989    DHL_RESULT  dhlResult = DHL_OK;
990    DS_U32      i = 0;
991   
992   
993    if (uPESPid < 0x10 && uPESPid > 0xFFF0)
994    {
995        dhlResult = DHL_FAIL_INVALID_PARAM;
996        goto done;
997    }
998   
999    for( i = 0 ; i < MAX_PES_FILTER_CNT ; i++ )
1000    {
1001        if( g_PESFilter[i].isValid == DS_FALSE )
1002        {
1003                dhlResult = DD_DTV_StartPESFilter(uPESPid,&g_PESFilter[i]);
1004               
1005                if(dhlResult == DHL_OK)
1006                {
1007                        g_PESFilter[i].uPesPid = uPESPid;
1008                        g_PESFilter[i].isValid = DS_TRUE;
1009                }
1010               
1011                return dhlResult;
1012        }
1013    }
1014
1015                if( i >= MAX_PES_FILTER_CNT )
1016                        dhlResult = DHL_FAIL;
1017
1018done:
1019    return dhlResult;
1020}
1021
1022DHL_RESULT DHL_DTV_StopPESFilter(DS_U16 uPESPid, DS_BOOL bAll)
1023{
1024    DHL_RESULT  dhlResult = DHL_OK;
1025    DS_U32 i;
1026   
1027    // ballÀÎ °æ¿ì
1028   
1029    if(bAll)
1030    {
1031        for( i = 0 ; i < MAX_PES_FILTER_CNT ; i++ )
1032        {
1033                if( g_PESFilter[i].isValid == DS_TRUE )
1034                {
1035                        dhlResult = DD_DTV_StopPESFilter(g_PESFilter[i].uPesPid);       
1036                        g_PESFilter[i].isValid  = DS_FALSE;
1037                        g_PESFilter[i].uPesPid  = 0;
1038                        g_PESFilter[i].Param            = 0;
1039                }
1040        }
1041    }
1042    else
1043    {
1044        for( i = 0 ; i < MAX_PES_FILTER_CNT ; i++ )
1045        {
1046                if( ( g_PESFilter[i].uPesPid == uPESPid ) && ( g_PESFilter[i].isValid == DS_TRUE ) )
1047                {
1048                        dhlResult = DD_DTV_StopPESFilter(uPESPid);     
1049                        g_PESFilter[i].isValid  = DS_FALSE;
1050                        g_PESFilter[i].uPesPid  = 0;
1051                        g_PESFilter[i].Param            = 0;
1052                        break;
1053                }
1054        }       
1055    }
1056   
1057    return dhlResult;
1058}
1059
1060#if 0
1061___DTVCC_APIs___()
1062#endif
1063/********************************************************************************
1064FUNCTION:                                                                   
1065    DHL_DTV_CCInit                                                             
1066
1067Purpose:                                                                   
1068
1069Arguments:                                                                     
1070
1071Returns:                                                                   
1072        DHL_RESULT     
1073Notes:
1074*********************************************************************************/
1075DHL_RESULT DHL_DTV_InitCC(void)
1076{
1077        DHL_RESULT      dhlResult = DHL_OK;
1078        static int initialized = 0;
1079
1080        if ( initialized )
1081                return dhlResult;
1082               
1083        dhlResult = DHL_DTV_MpegUserdataThreadInit();
1084       
1085        return dhlResult;
1086}
1087
1088/********************************************************************************
1089FUNCTION:                                                                   
1090    DHL_DTV_CCEnable                                                           
1091
1092Purpose:                                                                   
1093
1094Arguments:                                                                     
1095
1096Returns:                                                                   
1097        DHL_RESULT     
1098Notes:
1099*********************************************************************************/
1100DHL_RESULT DHL_DTV_EnableCC(void)
1101{
1102        DHL_RESULT      dhlResult = DHL_OK;
1103   
1104    g_DTVCCEnable = DS_TRUE;
1105   
1106        //dhlResult = DD_CC_Enable();
1107        return dhlResult;
1108}
1109/********************************************************************************
1110FUNCTION:                                                                   
1111    DHL_DTV_CCDisable                                                           
1112
1113Purpose:                                                                   
1114
1115Arguments:                                                                     
1116
1117Returns:                                                                   
1118        DHL_RESULT     
1119Notes:
1120*********************************************************************************/
1121DHL_RESULT DHL_DTV_DisableCC(void)
1122{
1123        DHL_RESULT      dhlResult = DHL_OK;
1124
1125    g_DTVCCEnable = DS_FALSE;
1126   
1127        //dhlResult = DD_CC_Disable();
1128
1129        return dhlResult;
1130}
1131
1132/********************************************************************************
1133FUNCTION:                                                                   
1134    DHL_DTV_CCClose                                                             
1135
1136Purpose:                                                                   
1137
1138Arguments:                                                                     
1139
1140Returns:                                                                   
1141        DHL_RESULT     
1142Notes:
1143*********************************************************************************/
1144DHL_RESULT DHL_DTV_CloseCC(void)
1145{
1146        DHL_RESULT      dhlResult = DHL_OK;
1147
1148        dhlResult = DHL_DTV_MpegUserdataThreadStop();
1149       
1150        return dhlResult;
1151}
1152
1153#if 0
1154___Internal_Functions___()
1155#endif
1156static void DHL_DTV_MpegUserDataThread(DS_U32 arg)
1157{
1158        while(1) {
1159                OS_mDelay(100);
1160                if (bUserDataThread_Run==0)
1161                        continue;
1162               
1163                /*
1164                 * MpegUserData Retrieval routines are here.
1165                 */
1166                ccBuf[0] = '\0';    /* This is just to avoid Warning message. */
1167        }
1168}
1169
1170static DHL_RESULT DHL_DTV_MpegUserdataThreadInit(void)
1171{
1172        DHL_RESULT dhlResult = DHL_OK;
1173
1174        UserdataThreadId = OS_SpawnTask( DHL_DTV_MpegUserDataThread, "tUserData", 60, 4096, (DS_U32)0);
1175        if ( UserdataThreadId == 0 ) 
1176        {
1177                DHL_DbgPrintf( 0, DHLDBG_DTV, "ERROR: Cannot create tUserData!\n");
1178                return DHL_FAIL_OUT_OF_RESOURCE;
1179        }
1180       
1181        bUserDataThread_Run = 0;
1182       
1183        return dhlResult;
1184}
1185
1186static DHL_RESULT DHL_DTV_MpegUserdataThreadStart(void)
1187{
1188        DHL_RESULT dhlResult = DHL_OK;
1189       
1190        bUserDataThread_Run = 1;
1191       
1192        return dhlResult;
1193}
1194
1195static DHL_RESULT DHL_DTV_MpegUserdataThreadStop(void)
1196{
1197        DHL_RESULT dhlResult = DHL_OK;
1198       
1199        bUserDataThread_Run = 0;
1200       
1201        return dhlResult;
1202}
1203
1204/********************************************************************************
1205FUNCTION:                                                                   
1206    DHL_DTV_DumpVideoMemMap                                                             
1207
1208Purpose:                                                                   
1209        dump video memory map under the running app
1210Arguments:                                                                     
1211
1212Returns:                                                                   
1213        DHL_RESULT     
1214Notes:
1215*********************************************************************************/
1216void DHL_DTV_DumpVideoMemMap(void)
1217{       
1218        //DD_VIDEO_DumpVideoMemMap();
1219
1220}
1221
1222#if 0
1223___DEBUG_APIs___()
1224#endif
1225void hav_alive(void)
1226{
1227        DS_BOOL bAudio, bVideo;
1228        DHL_RESULT dhlResult = DHL_OK;
1229        int i;
1230       
1231        for (i=0; i<10; i++) {
1232                bAudio = 0;
1233                bVideo = 0;
1234                dhlResult = DHL_DTV_IsAvAlive(&bVideo,&bAudio);
1235                if ( dhlResult != DHL_OK ) {
1236                        DHL_DbgPrintf(0,DHLDBG_DTV,"ERROR, LINE=%d\n", __LINE__);
1237                        return ;
1238                }
1239                DHL_DbgPrintf(0,DHLDBG_DTV,"   Audio = %s, Video = %s\n", bAudio ? "Alive" : "Dead", bVideo ? "Alive" : "Dead" );
1240                OS_mDelay(100);
1241        }
1242}
1243
1244void hav_scheck(DS_U16 vPid, DS_U16 aPid, int timeOut)
1245{
1246//      volatile DS_U32 curTick;
1247        DHL_RESULT dhlResult;
1248        DS_U32 startTick;
1249       
1250        if ( timeOut == 0 ) 
1251                timeOut = 50;
1252       
1253        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"Scramble Check\n");
1254        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"vPid = %d(0x%x)  aPid = %d(0x%x)\n", vPid, vPid, aPid, aPid);
1255        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"timeOut = %d tick\n", timeOut);
1256       
1257        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|%d| tick=%d\n", __LINE__, (int)(OS_GetTickCount()));
1258        startTick = OS_GetTickCount();
1259        dhlResult = DHL_DMX_SetPID4DetectScramble( vPid, aPid );
1260        if ( dhlResult != DHL_OK ) 
1261        {
1262                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"ERROR: DHL_DTV_SetPID4DetectScramble() return 0x%x\n", dhlResult);
1263                return;
1264        }
1265        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|%d| tick=%d\n", __LINE__, (int)(OS_GetTickCount()));
1266
1267        if ( DHL_DMX_IsScrambled() ) {
1268                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"Scrambled!\n");
1269                return;
1270        }
1271
1272        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|%d| tick=%d\n", __LINE__, (int)(OS_GetTickCount()));
1273        dhlResult = DHL_DMX_ResetPID4DetectScramble();
1274        if ( dhlResult != DHL_OK ) {
1275                DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"ERROR: DHL_DTV_ResetPID4DetectScramble() return 0x%x\n", dhlResult);
1276                return;
1277        }
1278        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"|%d| tick=%d\n", __LINE__, (int)(OS_GetTickCount()));
1279        DHL_DbgPrintf(gDTVDbgLvl,DHLDBG_DTV,"Not Scrambled!\n");
1280}
1281
1282void hac3_info(void)
1283{
1284        DHL_DTV_AC3_STATUS Ac3;
1285        DHL_RESULT dhlResult = DHL_OK;
1286       
1287        dhlResult = DHL_DTV_GetAudioInfoAc3( &Ac3 );
1288        if ( dhlResult != DHL_OK ) {
1289                DHL_DbgPrintf(0,DHLDBG_DTV,"Cannot retrieve AC3 information.\n");
1290                return;
1291        }
1292       
1293        DHL_DbgPrintf(0,DHLDBG_DTV,"*** AC3 Information ***\n");
1294        DHL_DbgPrintf(0,DHLDBG_DTV,"Fscod = %s (%d)\n", 
1295                        Ac3.Fscod == 0 ? "48 kHz" :
1296                        Ac3.Fscod == 1 ? "44.1 kHz" : 
1297                        Ac3.Fscod == 2 ? "32 kHz" :
1298                        Ac3.Fscod == 3 ? "Reserved" : "Unknown", (int)Ac3.Fscod);
1299        DHL_DbgPrintf(0,DHLDBG_DTV,"Lfeon = %s (%d)\n", Ac3.Lfeon == 0 ? "Off" : Ac3.Lfeon == 1 ? "On" : "Unknown", (int)Ac3.Lfeon );
1300        DHL_DbgPrintf(0,DHLDBG_DTV,"Acmod = %s (%d)\n", 
1301                        Ac3.Acmod == 0 ? "N=2, CH1/CH2" :
1302                        Ac3.Acmod == 1 ? "N=1, C" :
1303                        Ac3.Acmod == 2 ? "N=2, L,R" :
1304                        Ac3.Acmod == 3 ? "N=3, L,C,R" :
1305                        Ac3.Acmod == 4 ? "N=3, L,R,S" :
1306                        Ac3.Acmod == 5 ? "N=4, L,C,R,S" :
1307                        Ac3.Acmod == 6 ? "N=4, L,R,SL,SR" :
1308                        Ac3.Acmod == 7 ? "N=5, L,C,R,SL,SR" : "Unknown", (int)Ac3.Acmod );
1309}
1310
1311void hset_edelay(int d)
1312{
1313        Popup_EndDelay = d;
1314}
1315
1316void hset_sdelay(int d)
1317{
1318        Popup_StartDelay = d;
1319}
1320
Note: See TracBrowser for help on using the repository browser.