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

📄 monitor.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
        // Call HAL_CheckCDIF(HAL_CDIF_STOP, NULL) to check.        
        //if( !( W99AV_ReadRegW(DVDCTLR) & 0x000D ) ) // not in stop mode
        if (HAL_CheckCDIF(HAL_CDIF_STOP, NULL))
            __bTemp = FALSE ;       // CDIF is closed
        else
            __bTemp = TRUE ;        // CDIF is opened
        // wyc0.87, move the read video remainder place lower position.
        // ** 0.16; Sometime __dwTemp will be BIGGER 0x010F0000; Strange.
        // ** 0.16; Force W99AV to check it.
        // wyc0.87b, temp to use another function to read VBRR, this function will only disable INT EX1 and ET0, won't disable EX0 for increase IR sensitity.
        W99AV_ReadInfo ( W99AV_INFO_VIDEO_REMAIN , &__dwTemp ); // DWORD unit
        // wait until buffer underflow, then re-open CD-IF
        // check video buffer underflow
        __btTemp= FALSE;

        if (__bTemp)    // Need to checkoverflow
        {
            // wyc0.90, read the audio buffer 1 when check overflow status.
            W99AV_ReadInfo ( W99AV_INFO_AUDIO1_REMAIN , &_dwMONITORTemp );
            
            //Kevin1.25, add 
            if (__bAttrPlay&TYPE_CDROM_AUDIO) //CDROM audio only
            {
                  if (_dwMONITORTemp > __dwAOBuffer)
                      __btTemp= TRUE;
            }                
            else
            {
             

                if ( (__dwTemp> __dwVOBuffer) 
#ifndef NO_DIGEST //LJY1.20, support 4M flash, remove digest                
                    && (!__btDIGEST) 
#endif                
                    ) // check if video overflow            
                    __btTemp= TRUE;
                else    // ** TCH-.21, check if audio overflow;
                {
                    // wyc0.87b, temp to use another function to read VBRR, this function will only disable INT EX1 and ET0, won't disable EX0 for increase IR sensitity.
                    if (_dwMONITORTemp > __dwAOBuffer)
                    //__wTemp= W99AV_GetPSR ();
                    //if ( __wTemp & INT_AO )
                    {
                        //W99AV_ClearInterrupt(INT_AO);
                        __btTemp= TRUE;
                    }
    
                }
            
            }
        
        
            if ( __btTemp )
            {
                HAL_CheckCDIF ( HAL_CDIF_FREEZE_TIME, (BYTE)NULL );
                //__btFreeze= TRUE;
            }
//LJY1.23, LJY1.11b-2, recover from 1) Sector ID jump backward or forward, 
//                                   2) Playback hang-up when CDIF was openned and servo stopped outputing bitstrem.
#ifdef SUPPORT_ANTISHOCK
                if(!(__bModePlay & MODE_STILL))
                {                
                    if(!(__bSctErrCntr & 0x80))
                    {
                        UTL_GetCurrentTime ();               
                        if(__dwPrevTime == __dwTimeNow)                 
                        {
                            __bSctErrCntr++;                       
                        }
                        else
                        {
                            if(__dwTimeNow < __dwPrevTime)
                            {
#if 0 //defined (SERIAL_DEBUG) || defined(SUPPORT_PRINTF)
                                if (__btDumpFlag)
                                {
                                    if (__bDumpType & INFO_ERR_CONCEAL)
                                        printf("\n  SctID jump backward, __dwTimeNow=%lx, __dwPrevTime=%lx", __dwTimeNow, __dwPrevTime);
                                }
#endif                            
                                __dwTimeNow = __dwPrevTime; //prevent playing backward
                            }
                            else
                            {
                                if((__dwTimeNow - __dwPrevTime) > 75) //prevent playing jump forward too much.
                                {
#if defined (SERIAL_DEBUG) || defined(SUPPORT_PRINTF)
                                if (__btDumpFlag)
                                {
                                    if (__bDumpType & INFO_ERR_CONCEAL)
                                        printf("\n  SctID jump forward, __dwTimeNow=%lx, __dwPrevTime=%lx", __dwTimeNow, __dwPrevTime);
                                }
#endif                                                                                                
                                    __dwTimeNow = __dwPrevTime + 5;
                                }
                            }
                            __dwPrevTime = __dwTimeNow;
                            __bSctErrCntr = 0x00;
                        }
                        if((__bSctErrCntr & 0x0F) == 0x0F)
                        {  
                            __bSctErrCntr = 0x80;
                        }
                    }
                    else
                    {
                        if ( UTL_PlayFromTime ( __dwTimeNow ))
                        {
                             __bSctErrCntr = 0x00;
                        }
                    }
                }
#endif

        }
        else            // Need to check underflow
        {
#ifdef  NEW_AUDIO_BUFFER_CONTROL
            W99AV_ReadInfo ( W99AV_INFO_AUDIO_REMAIN , &_dwMONITORTemp );
#else
            W99AV_ReadInfo ( W99AV_INFO_AUDIO1_REMAIN , &_dwMONITORTemp );
#endif 

            //Kevin1.25, fix JPEG -> MP3 => hangs (VRem may >= __dwVOBuffer s.t. CDIF will not be opened)
            if (__bAttrPlay&TYPE_CDROM_AUDIO) //CDROM audio only
            {
                if (_dwMONITORTemp < __dwAUBuffer)
                    __btTemp= TRUE;
            }                
            else
            {
                  

                // wyc1.10, remove some comments in monitor.c
                // wyc0.87, use ATTR_MP3 instead of CDROM_M1 in this under flow check, because JPG will use video buffer.
                //__wTemp= W99AV_GetPSR ();
                if  ((__dwTemp < __dwVUBuffer ) && !(__bModePlay & MODE_STILL) && (__bAttrPlay != ATTR_MP3) 
    #ifndef NO_DIGEST //LJY1.20, support 4M flash, remove digest
                    && (!__btDIGEST)
    #endif                
                    )
                {
                    // wyc0.90, when video underflow, need to check audio remainder. When audio remainder not overflow, then read the new data. 
                    // wyc0.90-2, when follow commands don't need to check audio buffer status because of these mode don't have audio data.
                    if ((__bModeCmd == KEY_FF) || (__bModeCmd == KEY_SF) || (__bModeCmd == KEY_STEP))
                        __btTemp= TRUE;
                    else
                    {
                        // wyc0.90-2, need to read audio buffer 1 instead of audio 1+2 in checking overflow condition.
                        W99AV_ReadInfo ( W99AV_INFO_AUDIO1_REMAIN , &_dwMONITORTemp );
                        if (_dwMONITORTemp < __dwAOBuffer)
                            __btTemp= TRUE;
                    }
                }
                else if (__bAttrPlay != ATTR_JPG)   // ** TCH-.21, check if audio underflow;
                {
                    // Micky2.78, don't check audio underflow for KEY_STEP
                    // as from 2.78, KEY_SETP will go same buffer control as KEY_PLAY.
                    // wyc0.87b, temp to use another function to read VBRR, this function will only disable INT EX1 and ET0, won't disable EX0 for increase IR sensitity.
                    // wyc0.90, for new buffer control mechanism.
                    if (/*( __wTemp & INT_AU )*/(_dwMONITORTemp < __dwAUBuffer) && (__bModeCmd != KEY_FF) && (__bModeCmd != KEY_SF)
                    && (__bModeCmd != KEY_STEP))
                    {
                        //W99AV_ClearInterrupt(INT_AU);
                        // wyc0.90, when audio underflow, need to check video remainder. When video remainder not overflow, then read the new data. 
                        if (__dwTemp < __dwVOBuffer)
                            __btTemp= TRUE;
                    }
                }
                
                
            }                              
                                
//LJY1.23, LJY1.11b, to avoid buffer overflow because bitstream input is faster than RISC perform FAST decoding.
#ifdef SUPPORT_ANTISHOCK
            if ((__bModeCmd == KEY_FF) || (__bModeCmd == KEY_SF) || (__bModeCmd == KEY_STEP))
            {
                W99AV_ReadDRAMData(W99AV_DRAM_FAST_VIDEO_THRESHOLD, &_dwMONITORTemp);
                if(__dwTemp < _dwMONITORTemp)
                    __btTemp= TRUE;
            }
#endif
            if ( __btTemp )
            {
                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)
                    break;
                __dwTimeNow++;              //next start time for data input
                // wyc1.05, by D500 CCY's request, need to adjust the __btFreeze make JPG more precise in CDIF open / close.
                //__btFreeze= FALSE;
//LJY1.23, LJY1.11d, play from the time before buffer was cleared when slow or step->AST switching->play.
#ifdef SUPPORT_ANTISHOCK
#ifdef SUPPORT_ANTISHOCK_SOFT_RESET_VIDEO
                if(((__bModeCmd == KEY_SF) || (__bModeCmd == KEY_STEP)) && (__btResetBuffer))
                    __dwTimeNow = __dwTimeRecover;
#endif                
#endif                
                if ( ! UTL_PlayFromTime ( __dwTimeNow ) )
                {
//LJY1.23, LJY1.11b-2, let it can play till track end if finding header failed.                   
#ifdef SUPPORT_ANTISHOCK

#if 0 //LJY1.24a, remove it, using UTL_EstimateBufferTime() for code refinement. .
                    W99AV_ReadInfo (W99AV_INFO_VIDEO_REMAIN, &__dwTemp) ;
                    W99AV_ReadInfo (W99AV_INFO_AUDIO_REMAIN, &_dwMONITORTemp) ;
                    __dwTemp += _dwMONITORTemp;
                    __dwTemp /= SECTOR_588;
#endif                    
                    //LJY1.24a, using UTL_EstimateBufferTime() for code refinement.        
                    __dwTemp = UTL_EstimateBufferTime();            
                    
                    if((__dwTimeNow - __dwTemp+450) >  __dwTimeEnd)
#else                          
                    // ** 2.76-TCHM; begin... Add the protection
                    // Avoid the time is wrong (28C) and jump to later position.
                    ///OSD_OUTPUT_MACRO ( MSG_VERSION, 700, 1);
                    ///UTL_DelayTime ( COUNT_1_SEC, TRUE );
                    if ( (__dwTimeNow+ 450L) > __dwTimeEnd  )
#endif                        
                    {
                        // wyc2.80, add LKC modification code.
                        // Chuan2.80, Check LIST_NEXT is valid or not, If valid, do NEXT.
                        if (__btPBC)
                        {
                            if ( VCD20_IsValid_Command(LIST_NEXT))
                            {
                                // force to enter end list
                                // LLY2.37p, assign KEY_NEXT from F/W 
                                // To avoid IR and F/W key conflict issue
                                //__bISRKey=KEY_NEXT;      
                                __bFWKey=KEY_NEXT;
                            }
                            else
                            {
                                VCD20_ListEnd();
                            }
                        }
                        // wyc2.85, CoCo said thumbnail mode can't execute KEY_NEXT because og it will enter next page.
                        // So we skip the KEY_NEXT operation and let the upper level code to control it.
                        else if (!__bThumbnailMode)
                        {
                            // LLY2.37p, assign KEY_NEXT from F/W 
                            // To avoid IR and F/W key conflict issue                            
                            //__bISRKey= KEY_NEXT;
                            __bFWKey=KEY_NEXT;
                        }
                        break;
                    }
//LJY1.23, LJY1.11b-2, let it jump 1 sector per time for anti-shock mode.
#ifndef SUPPORT_ANTISHOCK
                    SERVO_ReadSectors ( __dwTimeNow+ 300L, __dwTimeEnd );
                    // ** 2.76-TCHM; end... 
                    
                    HAL_ControlCDIF(HAL_CDIF_OPEN);
#endif                    
                }
//LJY1.23, 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_SF) || (__bModeCmd == KEY_STEP)) && (__btResetBuffer))
                    __btResetBuffer = FALSE;
#endif                
#endif                
            }
        }                       
        break;
        
    // Why don't check video part ???
    case    KEY_FREEZE :
        //DVD_046-1DVD_IF
        if ( __bServoAutoCtrl)
            break;
        // in pause, do not need open CD-IF
        // ??? Is it necessary to check "play_end" ???
        if (__btPause)
            break;
        // Chuan 278 2002/10/23: Check DVDCTLR[0] = 1, specified sector MSF found flag.
        // Call HAL_CheckCDIF(HAL_CDIF_STOP, NULL) to check.
        //if( !( W99AV_ReadRegW(DVDCTLR) & 0x000D ) ) // not in stop mode
        if (HAL_CheckCDIF(HAL_CDIF_STOP, NULL))
            __bTemp = FALSE ;       // CDIF is closed
        else
            __bTemp = TRUE ;        // CDIF is opened

        // wait until buffer underflow, then re-open CD-IF
        // check video buffer underflow
        //LJY1.23, LJY1.11d, using audio remainder for buffer control.
        W99AV_ReadInfo ( W99AV_INFO_AUDIO_REMAIN , &_dwMONITORTemp );
        __btTemp= FALSE;
        if (__bTemp)    // Check overflow
        {
        //LJY1.23, LJY1.11d, using audio remainder for buffer control.
            if (_dwMONITORTemp > __dwAOBuffer)        
//            __wTemp= W99AV_GetPSR ();
//            if ( __wTemp & INT_AO )
                __btTemp= TRUE;

            if ( __btTemp )
            {
                HAL_CheckCDIF ( HAL_CDIF_FREEZE_TIME, (BYTE)NULL );
                //__btFreeze= TRUE;
            }
        }
        else    // Check underflow
        {
        //LJY1.23, LJY1.11d, using audio remainder for buffer control.
            if (_dwMONITORTemp < __dwAUBuffer)        
//            __wTemp= W99AV_GetPSR ();
//            if ( __wTemp & INT_AU )
                __btTemp= TRUE;

            if ( __btTemp )
            {

⌨️ 快捷键说明

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