⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitor.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                UTL_GetCurrentTime();       //get current CD-IF time
                // Chuan 277-3 2002/09/20: Don't need send stream. __dwTimeNow = __dwTimeEnd: Reach End, __dwTimeNow > __dwTimeEnd ? strange~
                if (__dwTimeNow<__dwTimeEnd)
                {
                    __dwTimeNow++;              //next start time for data input
//LJY1.23, LJY1.11d, play from the time before buffer was cleared when freeze->AST switching->play.
#ifdef SUPPORT_ANTISHOCK
#ifdef SUPPORT_ANTISHOCK_SOFT_RESET_VIDEO
                if((__bModeCmd == KEY_FREEZE) && (__btResetBuffer))
                    __dwTimeNow = __dwTimeRecover;
#endif                
#endif                                   
//LJY1.11d, using audio remainder for buffer control, and not to open CDIF if finding header failed..
                 UTL_PlayFromTime ( __dwTimeNow );
//                    if ( ! UTL_PlayFromTime ( __dwTimeNow ) )
//                        HAL_ControlCDIF(HAL_CDIF_OPEN);
//LJY1.11d, clear __btResetBuffer after finding hearder success. Avoid showing incorrct OSD time.
#ifdef SUPPORT_ANTISHOCK
#ifdef SUPPORT_ANTISHOCK_SOFT_RESET_VIDEO
                if((__bModeCmd == KEY_FREEZE) && (__btResetBuffer))
                    __btResetBuffer = FALSE;
#endif                
#endif                
                }
                //__btFreeze= FALSE;
            }
        }
#if 0
        if (__btFreeze) // Means that SF had enter VideoOverFlow
        {
            // ** TCH-.21;
            {
                __wTemp= W99AV_GetPSR ();
                if ( __wTemp & INT_AU )
                    __btTemp= TRUE;
            }

            if ( __btTemp )
            {
                UTL_GetCurrentTime();       //get current CD-IF time
                __dwTimeNow++;              //next start time for data input
                if ( ! UTL_PlayFromTime ( __dwTimeNow ) )
                    HAL_ControlCDIF(HAL_CDIF_OPEN);
                __btFreeze= FALSE;
            }
        }
        else
        {
            // ** TCH-.21;
            {
                __wTemp= W99AV_GetPSR ();
                if ( __wTemp & INT_AO )
                    __btTemp= TRUE;
            }

            if ( __btTemp )
            {
                HAL_CheckCDIF ( HAL_CDIF_FREEZE_TIME, (BYTE)NULL );
                __btFreeze= TRUE;
            }
        }
#endif
        break;
        
        // Micky2.78, fix VCD Step will hang and picture uncomplete(28C only)
        // Found on title "Christmas Song", several steps(>60~70) will hang at UV ready
        // modify the Step buffer control to be same as KEY_PLAY
        // need monitor audio buffer too.
/*
        // TCC274, add check overflow for KEY_STEP.
    case    KEY_STEP:
        if ( __bServoAutoCtrl)
        {
            HAL_ControlCDIF(HAL_CDIF_OPEN); // ** TCH0.48P;
            break;
        }

        W99AV_ReadInfo ( W99AV_INFO_VIDEO_REMAIN , &__dwTemp );  // DWORD unit
        if ( __dwTemp> __dwVOBuffer )
        {
            HAL_CheckCDIF ( HAL_CDIF_FREEZE_TIME, (BYTE)NULL );
            __btFreeze= TRUE;
        }
        break ;
*/
#if 0
    // Why don't check audio part ???
    case    KEY_SF :
        //DVD_046-1DVD_IF
        if ( __bServoAutoCtrl)
        {
            HAL_ControlCDIF(HAL_CDIF_OPEN); // ** TCH0.48P;
            break;
        }

                if( !( W99AV_ReadRegW(DVDCTLR) & 0x000C ) ) // not in stop mode
                        __bTemp = TRUE ;        // CDIF is opened
                else
                        __bTemp = FALSE ;       // CDIF is closed


        W99AV_ReadInfo ( W99AV_INFO_VIDEO_REMAIN , &__dwTemp );  // DWORD unit
        // wait until buffer underflow, then re-open CD-IF
        // check video buffer underflow
//        if (__btFreeze) // Means that SF had enter VideoOverFlow
                if (!__bTemp)
        {
            if ( __dwTemp < __dwVUBuffer )
            {
                UTL_GetCurrentTime();       //get current CD-IF time
                __dwTimeNow++;              //next start time for data input
                if ( ! UTL_PlayFromTime ( __dwTimeNow ) )
                    HAL_ControlCDIF(HAL_CDIF_OPEN);
                __btFreeze= FALSE;
            }
        }
        else
        {
            if ( __dwTemp> __dwVOBuffer )
            {
                HAL_CheckCDIF ( HAL_CDIF_FREEZE_TIME, (BYTE)NULL );
                __btFreeze= TRUE;
            }
        }
        break;
#endif

    // Need control the next data input point when a I frame is scanned
    case    KEY_SCF:
    case    KEY_SCB:
    {
        //DVD_049Micky
        // for supporting CD-DA w/ audio

#ifdef  _WINDVD
        // DVD_045q-1, DVD scan mode is controled by CELL module
        if (__wDiscType & BOOK_DVD)
            break;
#endif  // #ifdef _WINDVD

        _bReadCDDA = FALSE;
        // LLY.274p, checking playing mode method has updated
        //if (__bModePlay & MODE_PLAYCDDA)
        if(__bAttrPlay == ATTR_CDDA)
        {
            UTL_DelayTime ((WORD)COUNT_50_MSEC,TRUE); // 1 sec --> 50 msec
            // wyc.160
            if ((UTL_GetSysTimer() - _dwCDDAScanTime) >= COUNT_400_MSEC)
            {
                _dwCDDAScanTime = UTL_GetSysTimer();
                _bReadCDDA = TRUE;
                CHIPS_SoftMute();
                // Chuan1.00, Reset A-Buffer for SCF/SCB // wyc1.00
                HAL_Reset(HAL_RESET_AUDIO);
            }
        }
           
		//Kevin1.24a, support MP3/MP2 SCB
#if (FM_KEY_SCF_KEY_SCB_MODE == MODE_SCAN_ONLY) || (FM_KEY_SCF_KEY_SCB_MODE == MODE_SCAN_PAGE) //Kevin1.26-2
        if ( (__bAttrPlay==ATTR_MP3 || __bAttrPlay==ATTR_MP2) && __bModeCmd==KEY_SCB && __bScanLevel ) 
        {           
            if ( (UTL_GetSysTimer() - _dwCDDAScanTime) >= COUNT_1_SEC )   //can't hear clear sound if < 1 sec
            {
                _dwCDDAScanTime = UTL_GetSysTimer();
                _bReadCDDA = TRUE;
                CHIPS_SoftMute();

                //compensate audio buffer remaining sectors
                //below hasn't considered SI buffer
                /*
                __dwTimeNow = UTL_GetCurrentTime(); //parser sector ID
                W99AV_ReadInfo (W99AV_INFO_AUDIO_REMAIN, &__dwTemp) ; 
                __dwTemp /= SECTOR_512; //(4/2352)
                __dwTemp = (__dwTemp*8)/5;
                if (__dwTimeNow> __dwTemp)
                __dwTimeNow -= __dwTemp; //DSP decoding sector ID
                */
                W99AV_ReadDM(W99AV_DM_FRAME_COUNT, &__dwTemp); //DSP decoded frames
                __dwTemp *=__wW99AVSamplesPerFrame; //decoded samples
                if (__dwW99AVAudioFreq)
                    __dwTemp /= __dwW99AVAudioFreq; //decoded seconds

                __dwTemp = (__dwTemp*__wW99AVAudioBitrate)/16; // * (bitrate*1024/(8*2048)
                __dwTimeNow = __dwTimeBegin + __dwTemp; //DSP decoded sector ID

                // Chuan1.00, Reset A-Buffer for SCF/SCB // wyc1.00
                HAL_Reset(HAL_RESET_AUDIO);
               
				 //Kevin1.25, comment 
                                                                //DSP sets DM[0xe9d]=0 & W99AV_DM_FREQ_WMA after reset  
                //W99AV_WriteDM(W99AV_DM_MP3_FREQ_READ_FLAG, 1);  //host tells DSP to start decoding                

                if (__bAttrPlay==ATTR_MP2)
                {
                    //DSP refers to frame count to do mute after reset. But now frame count is modified bt F/W below
                    W99AV_WriteDM(W99AV_DM_PTS_FINDING, 0);    //disable PTS finding
                    W99AV_WriteDM(W99AV_DM_MUTE_COUNTER, 0);   //clear mute counter
                }
            }
        }                       
#endif //        

         // wyc.160
        if (HAL_CheckInterrupt(INT_IFSC) || _bReadCDDA)   // video underflow
        {
            if(__bAttrPlay == ATTR_CDDA)
            {
                UTL_OutputShowTime ();      // update OSD/VFD time

#ifdef  CDDA_WAITSERVO
                __dwTemp= __dwTimeNow+ 150;
                __dwTemp/=75;

                __bMinActual= __dwTemp/ 60;
                __bSecActual= __dwTemp% 60;
#endif  // #ifdef CDDA_WAITSERVO
//LJY1.26, LJY1.11f, fix ASP CDDA OSD time abnormal in the beginning of SCF/SCB.                                 
#ifdef SUPPORT_ANTISHOCK
				if(__btResetBuffer)
				{
					__btResetBuffer = FALSE;
					__dwTimeNow = __dwTimeRecover;
				}
#endif
                // Means that Complete scan an I frame
                __bScan= SCAN_END;
                if ( __bModeCmd == KEY_SCF )
                    __dwTimeNow= SERVO_JumpGroove( TRUE, __dwTimeNow );
                else
                    __dwTimeNow= SERVO_JumpGroove( FALSE, __dwTimeNow );

                _bReadCDDA = FALSE;
                CHIPS_OpenAudio( TRUE );
                SERVO_ReadSectors(__dwTimeNow, __dwTimeEnd);
            }

            //Kevin1.24a, support MP3/MP2 SCB
#if (FM_KEY_SCF_KEY_SCB_MODE == MODE_SCAN_ONLY) || (FM_KEY_SCF_KEY_SCB_MODE == MODE_SCAN_PAGE) //Kevin1.26-2
            else if ( (__bAttrPlay==ATTR_MP3 || __bAttrPlay==ATTR_MP2) && __bModeCmd==KEY_SCB && __bScanLevel) //Kevin1.24a, support MP3/MP2 SCB
            {
                extern DWORD    _dwTotalFrameCount;

                __dwTemp = (__bScanLevel<<2);  //jump sec
                __dwTemp = (__dwTemp*__wW99AVAudioBitrate)/16; // * (bitrate*1024)/(8*2048)  //jump sector

                if ( __dwTimeNow > __dwTimeBegin+__dwTemp )
                    __dwTimeNow -= __dwTemp;
                else 
                    __dwTimeNow = __dwTimeBegin; 
                //printf("__dwTimeNow=%lx\n", __dwTimeNow);

                                  
                if (__wW99AVAudioBitrate)
                    __dwTemp=(__dwTimeNow-__dwTimeBegin)*16/__wW99AVAudioBitrate; //sec  // * (2048*8)/(bitrate*1024)

                __dwTemp *= __dwW99AVAudioFreq;  //sample
                __dwTemp /=__wW99AVSamplesPerFrame; //frame
                
                W99AV_WriteDM(W99AV_DM_FRAME_COUNT, __dwTemp);
                _dwTotalFrameCount = 0;

                _bReadCDDA = FALSE;
                CHIPS_OpenAudio( TRUE );                
                UTL_PlayFromTime(__dwTimeNow); 
            }  
#endif //
            else
            {
                // for SCF and cross Track
                HAL_Display(HAL_DISPLAY_VIDEO, TRUE);
                // close CD-IF, stop data input
                HAL_CheckCDIF(HAL_CDIF_FREEZE_TIME, (BYTE)NULL);
                UTL_OutputShowTime ();      // update OSD/VFD time

                // Means that Complete scan an I frame
                __bScan= SCAN_END;
                // clear the ISR status

                // Jump time forward or backward
                // only __dwTimeNow is changed
                // but the CDROM still not goto new time

                if ( __bModeCmd == KEY_SCF )
                    __dwTimeNow= SERVO_JumpGroove( TRUE, __dwTimeNow );
                else
                    __dwTimeNow= SERVO_JumpGroove( FALSE, __dwTimeNow );
            }

            // Step1:
            // check for over-bitstream
            if ( __bModeCmd == KEY_SCF )
            {
                // change > into >=
                if ( (__dwTimeNow+ __wScanGap) >= __dwTimeEnd )
                {
                    // SCF is playing to the end of Playing RANGE
                    // ignore the next OSD display
                    // wyc1.10-3, don't support this message now.
                    //OSD_Output(MSG_IGNORENEXT, 1, (BYTE)NULL);

                    if ( __btPBC )
                    {
                        // let VCD20_Trigger process the next action
                        __btPlayEnd=TRUE;
                        __btPlaying=FALSE;
                        // will force to reset
                        __bModePlay=MODE_PLAYUNKNOW;
                        return FALSE;
                    }
                    else
                    {
                        // must check repeat mode then decide to play next
                        // modify for use by LINEAR_ChangeTrack call
                        LINEAR_ChangeTrack(KEY_NEXT, (BYTE)NULL);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -