📄 monitor.c
字号:
// 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 + -