📄 digest.c
字号:
CDINFO_ParseInfo ( VCD_ENTRIES_TRACK, & __dwTemp, NULL_0 ); __wPlayItem = __dwTemp; } else { __dwTemp = __wPlayItem; // play track if ( __dwTemp > __wTrackEnd ) __dwTemp = __wTrackEnd; } __bTemp= UTL_CheckPlayItemMode ( (WORD)__dwTemp ); // the entry point is a CD-DA track //LJY279, marked to show logo while exit digest to play CDDA track __bModePlay=MODE_PLAYUNKNOW; __btDIGEST=FALSE;}// *********************************************************************// Function : DIGEST_Number// Description : Parser the input number and keep the current time in// that position. Then enter linear play with specified// time// Arguments : None//// Return : TRUE, valid key// : FASE, invalid key// Change :// Side Effect :// *********************************************************************BYTE DIGEST_Number(DWORD dwNumber){ extern DWORD __dwGoToTime; // Time that use GOTO position // show the input number//LJY2.81, set as FASLE or __btPlayFromBegin won't be set to be TRUE in LINEAR_Action() by pressing number key.// It needs to call UTL_ForceChangeTrack() for DISCVIEW -> NPF or the NPF will be abnormal??? __btPlaying = FALSE; //TRUE; wyc.170a, make follow codes DVD digest only and change the limit from 9 to __bGrid*__bGrid#ifdef NO_PIP#else DISP_DisplayCtrl(DISP_PIP, FALSE); //LJY0.68, disable PIP.#endif // #ifdef NO_PIP if (__bKey != KEY_PLAY) { if(__DigestUIAttr.bDigestMode == DIGEST_MODE_DISCINTERVAL) { if ( dwNumber > DIGEST_FRAME_COUNT ) { return FALSE; } __dwGoToTime = __dwTimeDiscBegin + (((DWORD)(dwNumber-1)*(DIGEST_FRAME_COUNT) + __DigestUIAttr.bCurFrameNo)*(DIGEST_FRAME_PLAYTIME)); DIGEST_Digest2Linear(); __bFWKey = KEY_GOTOTIME_PLAY; } else { // for VCD, the __wPlayItem=TrackNO+1; if (__wDiscType & BOOK_VCD) { DIGEST_Digest2Linear(); } else { DIGEST_Digest2Linear(); } LINEAR_ChangeTrack ( KEY_NUMBER, (WORD)dwNumber ); } //if ( __bStyle == DIGEST_STYLE_DISCVIEW ) } return TRUE;}// ***************************************************************// Function : DIGEST_CheckHang// Description : Called by MONITOR module to check the hang// phenomenon and recover to the normal state// Arguments : none// Return : none// Side Effect :// ***************************************************************void DIGEST_CheckHang(){}//LJY1.10, reduce extern global reference for INITIAL module.void DIGEST_VarInit(void){ BYTE bTmp; __btDIGEST = DIGEST_MODE_NULL; __DigestUIAttr.bButtonIndex = 0; __DigestUIAttr.bCurPageNo = 0; __DigestUIAttr.bCurFrameNo = 0; __DigestUIAttr.bCurTrackNo = 0; __DigestUIAttr.bDisplayedFrameNo = 0; //LJY0.80, fix digest last track won't be shown issue. bTmp = (BYTE)(__wTrackEnd - __wTrackBegin + 1); __DigestUIAttr.bTotalPageNo = bTmp/(DIGEST_FRAME_COUNT); if(bTmp % DIGEST_FRAME_COUNT) { __DigestUIAttr.bTotalPageNo++; }} BYTE DIGEST_ProcessKey(void){ static BYTE bKeyNo; if(__DigestUIAttr.bDigestMode == DIGEST_MODE_NULL) {//Alan102, #157. Temporarily prevent to enter the digest mode for CDDA. if ((__bKey != KEY_DIGEST) || (__wDiscType & CDROM_M1) || (__wDiscType & BOOK_DVD) || (BOOK_CDDA == __wDiscType)) return KEY_BYPASS;//bKey; //LJY0.80, for Micky's new key prcessing rule. } if((__bKey == KEY_POWER) || (__bKey == KEY_OPEN_CLOSE)) { if(__DigestUIAttr.bDigestMode == DIGEST_MODE_DIALOG) { //OSDDG_Update(OSDDG_MSG_DLG_EXIT); OSDDG_Update(OSDDG_MSG_EXIT); //CoCo0.80a, use this message to exit Digest mode. __DigestUIAttr.bDigestMode = DIGEST_MODE_NULL; __btDIGEST = DIGEST_MODE_NULL; } else {#ifdef NO_PIP#else DISP_DisplayCtrl(DISP_PIP, FALSE);#endif // #ifdef NO_PIP DIGEST_DigestExit(); } return KEY_BYPASS;//bKey; //LJY0.80, for Micky's new key prcessing rule. } if(__bKey == KEY_DIGEST) { if(__btPBC) { __bKey = KEY_INVALID; } else if(__DigestUIAttr.bDigestMode > DIGEST_MODE_DIALOG) { __bKey = KEY_PLAY; } } else if(__bKey == KEY_PLAY) { if(__DigestUIAttr.bDigestMode == DIGEST_MODE_DIALOG) { __bKey = KEY_ENTER; } else if(__DigestUIAttr.bDigestMode > DIGEST_MODE_DIALOG) { __bKey = KEY_PLAY; /*Alan2.17 if(__DigestUIAttr.bButtonIndex == 0) __bFWKey = KEY_DIGEST; */ } } else { if ( ((__bKey >= NONNPF_PLAYABLEKEY_BEGIN ) && ( __bKey <= NONNPF_PLAYABLEKEY_END))) __bKey = KEY_PLAY; } switch(__bKey) { case KEY_DIGEST: if(__DigestUIAttr.bDigestMode == DIGEST_MODE_DIALOG) { OSDDG_Update(OSDDG_MSG_EXIT); //CoCo0.80a, use this message to exit Digest mode. __DigestUIAttr.bDigestMode = DIGEST_MODE_NULL; __btDIGEST = DIGEST_MODE_NULL; break; } else { _DIGEST_EnterDisplayMode(&bKeyNo); } break; case KEY_UP: case KEY_DOWN: case KEY_LEFT: case KEY_RIGHT: OSDDG_Update(OSDDG_MSG_CLEAR_HIGHLIGHT); if((__bKey == KEY_LEFT) || (__bKey == KEY_UP)) { __DigestUIAttr.bButtonIndex = (__DigestUIAttr.bButtonIndex + bKeyNo - 1) % (bKeyNo); } else { __DigestUIAttr.bButtonIndex = (++__DigestUIAttr.bButtonIndex ) % (bKeyNo); } OSDDG_Update(OSDDG_MSG_UPDATE_HIGHLIGHT); break; case KEY_ENTER: if (DIGEST_MODE_DIALOG == __DigestUIAttr.bDigestMode) { CC_DoKeyAction(KEY_STOP); bKeyNo = DIGEST_MENU2_BUTTON_NO; OSDDG_Update(OSDDG_MSG_DLG_EXIT); __DigestUIAttr.bDigestMode = __DigestUIAttr.bButtonIndex + DIGEST_MODE_TRACK; __btDIGEST = __DigestUIAttr.bDigestMode; OSDDG_Update(OSDDG_MSG_INITIAL); OSDDG_Update(OSDDG_MSG_UPDATE_UI_INFO); OSDDG_Update(OSDDG_MSG_UPDATE_HIGHLIGHT); _DigestPlayInit (); } else if (DIGEST_MODE_TRACK == __DigestUIAttr.bDigestMode || DIGEST_MODE_DISCINTERVAL == __DigestUIAttr.bDigestMode) {#ifdef SUPPORT_NUMBER_CONFIRM_KEY if (0 < __dwNumberPrevious) { if (__dwNumberPrevious < __wTrackEnd) { DIGEST_DigestExit(); return KEY_BYPASS; } else { return KEY_INVALID; } } else#endif if ((DIGEST_MENU2_BUTTON_NO - 1 == __DigestUIAttr.bButtonIndex) && (DIGEST_MODE_DIALOG < __DigestUIAttr.bDigestMode )) { DIGEST_DigestExit(); __bKey = KEY_PLAY; //LJY0.80, for Micky's new key prcessing rule. } else if ((0 == __DigestUIAttr.bButtonIndex) && (DIGEST_MODE_DIALOG < __DigestUIAttr.bDigestMode )) { _DIGEST_EnterDisplayMode(&bKeyNo); } } break; case KEY_PLAY: if(__DigestUIAttr.bDigestMode > DIGEST_MODE_DIALOG) {#ifdef NO_PIP#else DISP_DisplayCtrl(DISP_PIP, FALSE);#endif // #ifdef NO_PIP#ifdef SUPPORT_NUMBER_CONFIRM_KEY if (0 < __dwNumberPrevious) { if (__dwNumberPrevious < __wTrackEnd) { DIGEST_DigestExit(); return KEY_BYPASS; } else { return KEY_INVALID; } }#endif } DIGEST_DigestExit(); __bKey = KEY_PLAY; //LJY0.80, for Micky's new key prcessing rule. break; case KEY_PREV: case KEY_NEXT: if ( __bKey == KEY_NEXT ) // next digest page { //LJY277a, to show page mode cyclic __DigestUIAttr.bCurPageNo= (++__DigestUIAttr.bCurPageNo)%(__DigestUIAttr.bTotalPageNo); } else // prev digest page { if ( __DigestUIAttr.bCurPageNo ) { __DigestUIAttr.bCurPageNo--; } else { //LJY277a, to show page mode cyclic __DigestUIAttr.bCurPageNo = __DigestUIAttr.bTotalPageNo - 1; } } __DigestUIAttr.bCurFrameNo = 0; __DigestUIAttr.bDisplayedFrameNo = 0; _bDigestFirstPlay = TRUE; HAL_PlayCommand(COMMAND_STOP, 0); HAL_Reset(HAL_RESET_VIDEO); SrcFilter_Stop(__dwSFStreamID); HAL_ControlParser(HAL_PARSER_STOP, 0); HAL_Reset(HAL_RESET_AUDIO);#ifdef NO_PIP#else DISP_DisplayCtrl(DISP_PIP, FALSE); //LJY0.68, disable PIP.#endif // #ifdef NO_PIP HAL_ClearScreen(HAL_COLOR_DIGEST, HAL_CLEAR_SCREEN_MPEG, HAL_DISP_CURRENTFRAME); OSDDG_Update(OSDDG_MSG_CHANGE_PAGE); //LJY0.80, update page info. OSDDG_Update(OSDDG_MSG_UPDATE_UI_INFO); break; case KEY_N0: case KEY_N1: case KEY_N2: case KEY_N3: case KEY_N4: case KEY_N5: case KEY_N6: case KEY_N7: case KEY_N8: case KEY_N9: case KEY_N10: case KEY_N11: case KEY_N12: case KEY_N13: case KEY_N14: case KEY_N15: case KEY_N16: case KEY_N17: case KEY_N18: case KEY_N19: case KEY_N20: case KEY_N10PLUS: case KEY_N20PLUS:#ifndef SUPPORT_NUMBER_CONFIRM_KEY DIGEST_DigestExit();#endif return KEY_BYPASS; break; case KEY_NUMBER:/*Alan1.02a, bug #287 //LJY0.80, add number key range protection. if(__dwNumberPrevious < __wTrackEnd) { DIGEST_DigestExit(); DIGEST_Number(__dwNumberPrevious); } else { __bKey = INVALID_KEY; }*/ DIGEST_DigestExit(); return KEY_BYPASS; break; default: __bKey = INVALID_KEY;//KEY_INVALID; break; }//LJY0.80, for Micky's new key prcessing rule. if(__bKey == KEY_PLAY) return KEY_TODO; else if(__bKey == INVALID_KEY) return INVALID_KEY; else return KEY_NO_KEY;}void _DIGEST_EnterDisplayMode(PBYTE pbKeyNo){ DIGEST_VarInit(); __DigestUIAttr.bDigestMode = DIGEST_MODE_DIALOG; __btDIGEST = DIGEST_MODE_DIALOG; *pbKeyNo = DIGEST_MENU1_BUTTON_NO; __DigestUIAttr.bButtonEnable[0]=1; //enable track-digest button if(__wTrackEnd <= 3) __DigestUIAttr.bButtonEnable[1]=1; //enable discinterval button else { __DigestUIAttr.bButtonEnable[1]=0; //disable discinterval button (*pbKeyNo)--; } __DigestUIAttr.bButtonIndex = 0; //high-lighten track-digest button OSDDG_Update(OSDDG_MSG_DLG_INITIAL); OSDDG_Update(OSDDG_MSG_UPDATE_HIGHLIGHT);}void _DIGEST_ShowFrame(BOOL bShow){ DWORD dwRGBColor; if (bShow) { dwRGBColor = 0xEEEE00; } else { dwRGBColor = 0x000000; } _InitRect(&(_DIGEST_Rect), _Digest_Destination.wPosCoordH - FRAME_THICKNESS, _Digest_Destination.wPosCoordV - FRAME_THICKNESS - 1, _Digest_Destination.wPosCoordH + _Digest_Destination.wWidth + FRAME_THICKNESS, _Digest_Destination.wPosCoordV + _Digest_Destination.wHeight + FRAME_THICKNESS); GDI_FBDrawRect(0, &_DIGEST_Rect, FRAME_THICKNESS, dwRGBColor);}void _DigestFrmPosInit(void){ BYTE i; for(i=0;i<3;i++) { _aDigestFrmPosX[i] = DIGEST_FIRST_FRAME_POS_H+ i*(DIGEST_FRAME_SIZE_H+DIGEST_FRAME_SPACING_H); } for(i=0;i<2;i++) { if(MainVideoInfo.wVWidth == 480) { _aDigestFrmPosY[i] = DIGEST_FIRST_FRAME_POS_V_480+ i*(DIGEST_FRAME_SIZE_V_480+DIGEST_FRAME_SPACING_V_480); } else { _aDigestFrmPosY[i] = DIGEST_FIRST_FRAME_POS_V_576+ i*(DIGEST_FRAME_SIZE_V_576+DIGEST_FRAME_SPACING_V_576); } }}void DIGEST_DigestExit(void){ HAL_PlayCommand(COMMAND_STOP, 0); SrcFilter_Stop(__dwSFStreamID); HAL_Reset(HAL_RESET_VIDEO); HAL_Reset(HAL_RESET_AUDIO);#ifdef NO_PIP DISP_ForceDisplay(NULL_FRAME, DISP_MAINVIDEO);#else DISP_DisplayCtrl(DISP_PIP, FALSE); //LJY0.68, disable PIP.#endif // #ifdef NO_PIP HAL_ClearScreen(HAL_COLOR_DIGEST, HAL_CLEAR_SCREEN_MPEG, HAL_DISP_CURRENTFRAME); OSDDG_Update(OSDDG_MSG_EXIT); __DigestUIAttr.bDigestMode = DIGEST_MODE_NULL; __btDIGEST = DIGEST_MODE_NULL; //Alan1.05 for nosound bug if ((__bSP_Disp_OFF == 0) || (__bSP_Disp_OFF&0x80)) { DISP_DisplayCtrl(DISP_SP1, TRUE); PARSER_ActionFilter( 0, PARSER_ENABLE_SP1, TRUE ); }
//CoCo2.33, Digest module will diable "mute" automatically. Therefore, we need to clear MSG_MUTE to prevent MSG_MUTE still exists in OSD stack.
OSD_OUTPUT_MACRO ( MSG_MUTE, FALSE, 0);
}#endif //NO_DIGEST
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -