📄 osdbmark.c
字号:
// Micky1.24a, use UTL_EstimateBufferTime // LLY2.05, using API to get current decoded time __dwTemp = UTL_GetDecodedTime() - __dwTimeDiscBegin; /* UTL_GetCurrentTime(); __dwTemp = UTL_EstimateBufferTime(); __dwTemp = (__dwTimeNow - __dwTimeDiscBegin) - __dwTemp; // exclude buffer time */ __dwTemp = UTL_SectorstoMSF(__dwTemp); // convert sectors into time __wBookMark[__wBookMark[0]]=MAKEWORD (MSF_SECOND ( __dwTemp ), MSF_MINUTE ( __dwTemp ) ); } else//dvd { // Micky1.24a, use __wTimeCurrentDisplay for time. __dwTemp= __wTimeCellBegin + __wTimeCurrentDisplay; __wBookMark[__wBookMark[0]]= MAKEWORD ( __dwTemp%60, __dwTemp/60); __bBookMark_Title[__wBookMark[0]]= __bTitle; _wBookMark_Chapter[__wBookMark[0]]= __wChapter;#ifdef SUPPORT_STILLRSM //Aron2.38, clear the still flag first __bBookMarkIsStill[__wBookMark[0]] = FALSE; HAL_ReadInfo(HAL_INFO_STILL, &dwCheckStill); if(dwCheckStill) { //Aron2.38, Record info for bookmark to still content __bBookMarkIsStill[__wBookMark[0]] = TRUE; __dwBookMarkVOBU[__wBookMark[0]] = __dwCellVideo_VOBUSA; }#endif } _ShowTitleChapterTime(); //Kevin1.23DMTech, proceed to next entry when current entry is set// _OSDBOOKMARK_ProceedToNextMainEntry(); _SetClearHighlight(SET_HIGHLIGHT); bKeyStatus = KEY_NO_KEY; } break; case KEY_CLEAR: case KEY_STOP: if (__wBookMark[ __wBookMark[0] ]!=0) { //remove time __wBookMark[ __wBookMark[0] ] = 0; __bBookMark_Title[__wBookMark[0]] = 0; _wBookMark_Chapter[__wBookMark[0]] = 0; _ShowOneEntry(__wBookMark[0]); _ShowTitleChapterTime(); _SetClearHighlight(SET_HIGHLIGHT); } bKeyStatus = KEY_NO_KEY; break; case KEY_POWER: case KEY_OPEN_CLOSE: case KEY_BOOKMARK:/* __bTemp= LOBYTE ( __wDiscType ) & 0x0f; if( !( __wDiscType ==BOOK_DVD || __bTemp==BOOK_VCD ) ) { bKeyStatus = INVALID_KEY; break; }*/ if ( __bCDDA_DTS == CDDA_CDG) { bKeyStatus = INVALID_KEY; break; } if (#ifndef NO_DIGEST !__btDIGEST && !__btPBC &&#endif //alex1.25,20040428,Book can turn on/off on ( PBC on / Navigator on ) // !__btPBC && !__bNVPlayMode && __bModeCmd != KEY_STOP __bModeCmd != KEY_STOP ) { //First Time Enable , can record //Second Time , can remove all if (!__btBookMark) { __btBookMark= TRUE;#ifdef FORCE_CLEAR_LOGO if ( __bModeCmd == KEY_STOP ) UTL_SetPlayMode ( MODE_PLAYMOTION );#endif // FORCE_CLEAR_LOGO//alan, dvd_067 for fixing a bug if (__wBookMark [0]==0) __wBookMark [0]=1;#ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAM //OSDPRGM_EnterByPrestop(); CC_ForceStop(CC_FORCE_STOP_FROM_BOOKMARK);#endif OSD_ChangeUI(OSD_UI_BOOKMARK, OSD_ENTER_UI); _OSDBOOKMARK_ShowUI(); } else { __btBookMark=FALSE; OSDBOOKMARK_Exit(OSD_UI_EXIT_ALL); OSD_ChangeUI(OSD_UI_BOOKMARK, OSD_EXIT_UI);#ifdef PRESTOP_BEFORE_SETUP_AND_PROGRAM //OSDPRGM_ExitByResume(); CC_ForceResumeRePlay(CC_FORCE_STOP_FROM_BOOKMARK);#endif } bKeyStatus = KEY_NO_KEY; } else { bKeyStatus = INVALID_KEY; } break; case KEY_SETUP: break; #ifdef SUPPORT_PRGM_NUM_INPUT //Kevin1.06 //process number keys 0..9 (except 10+..) 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: bKeyStatus = KEY_NO_KEY; break;#endif //Kevin0.91,doesn't allow other keys default: bKeyStatus = KEY_INVALID; break; } return bKeyStatus; } //end of OSDBOOKMARK_ProcessKey// *********************************************************************************// Function : OSDBOOKMARK_Recover// Description : The function is called by OSD to do the recovery of Program UI // Arguments : bRecoverRegion, the recover region // : OSD_RECOVER_ALL // : OSD_RECOVER_UPPER_REGION, invalid// : OSD_RECOVER_BOTTOM_REGION, invalid// Return : TRUE, The region has been recovered.// : FALSE, The region doesn't need to be recovered in this UI.// Side Effect :// *********************************************************************************BYTE OSDBOOKMARK_Recover(BYTE bRecoverRegion){ if (OSD_RECOVER_ALL != bRecoverRegion) return FALSE; _OSDBOOKMARK_ShowUI(); return TRUE;}// ***************************************************************************// Function : OSDBOOKMARK_ConfigOSDRegion// Description : This function will be called by OSD module when entering Bookmark UI// Arguments : None.// Return : None.// Side Effect :// ***************************************************************************void OSDBOOKMARK_ConfigOSDRegion(void){ GDI_REGION_INFO RegionInfo;#ifdef BORROW_FRAME_BUFFER DWORD dwBufferAddr;#endif RegionInfo.bColorMode = GDI_OSD_8B_MODE; RegionInfo.wWidth = GDI_REGION_WIDTH;#ifdef ENLARGE_OSD_FOR_PAL_MODE RegionInfo.dwTAddr = DS_OSDFRAME_ST; if ((__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC) || (__bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M)) { RegionInfo.wHeight = GDI_REGION_HEIGHT; } else { RegionInfo.wHeight = GDI_REGION_HEIGHT_PAL; }#else#ifdef BORROW_FRAME_BUFFER if (BMARK_FRAME_X1 <= __RegionList[0].wWidth && BMARK_FRAME_Y1 <= __RegionList[0].wHeight && GDI_OSD_8B_MODE == __RegionList[0].bColorMode) { // Use OSD buffer and Frame buffer 0 RegionInfo.dwTAddr = DS_OSDFRAME_ST; } else { // Use Frame buffer 1 or 2 dwBufferAddr = DISP_QueryAvailableBuffer(); if (0 == dwBufferAddr) { RegionInfo.dwTAddr = DS_OSDFRAME_ST; printf("DISP can't find an available buffer for OSD region\n"); } else { RegionInfo.dwTAddr = dwBufferAddr; } } RegionInfo.wHeight = BMARK_FRAME_Y1;#else RegionInfo.dwTAddr = DS_OSDFRAME_ST; RegionInfo.wHeight = GDI_REGION_HEIGHT;#endif // #ifdef BORROW_FRAME_BUFFER#endif // #ifdef ENLARGE_OSD_FOR_PAL_MODE/* RegionInfo.wWidth = BMARK_FRAME_X1; RegionInfo.wHeight = BMARK_FRAME_Y1;*/#ifdef BORROW_FRAME_BUFFER GDI_ClearRegion(0); //Alan2.30, fix mantis bug #1886 OSD_SetRegion(0, TRUE, &RegionInfo);#else OSD_SetRegion(0, FALSE, &RegionInfo);#endif /* --CoCo2.30 GDI_DeactivateRegion(); GDI_ConfigRegionInfo(0, &RegionInfo); GDI_InitialRegion(0); // Clear region GDI_ClearRegion(0); GDI_ActivateRegion(0); */}// *********************************************************************************// Function : _ShowMainList// Description : Show Main List in the Main Frame// Arguments : None// Return : None// *********************************************************************************static void _ShowMainList(void){ //redraw main frame (can also be moved to the following of //main frame) _InitRect(&(_PRGM_FrameAttr.rect), MAIN_FRAME_X0, MAIN_FRAME_Y0, MAIN_FRAME_X1, MAIN_FRAME_Y1); GDI_DrawFrame_909(0, &_PRGM_FrameAttr); for (_bOSDBOOKMARKTemp =_bMainStart; (_bOSDBOOKMARKTemp<=MAX_PROG_ITEM) && ((_bOSDBOOKMARKTemp-_bMainStart)<MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME); _bOSDBOOKMARKTemp++) { _ShowOneEntry(_bOSDBOOKMARKTemp); } //show arrow down rect if ( (MAX_PROG_ITEM-_bMainStart+1) > MAX_ENTRY_NUM_SHOWN_IN_MAIN_FRAME) { _InitRect(&(_PRGM_FrameAttr.rect), MAIN_FRAME_X0, MAIN_FRAME_Y1+1, MAIN_FRAME_X1, MAIN_FRAME_Y1+1+ARROW_HEIGHT); GDI_DrawFrame_909(0, &_PRGM_FrameAttr); _PRGM_StrAttr.wX = ((MAIN_FRAME_X0+MAIN_FRAME_X1)>>1)-5; _PRGM_StrAttr.wY = MAIN_FRAME_Y1+4; GDI_DrawString_909(0, &_PRGM_StrAttr, aArrowDown); } else //clear arrow down rect { _PRGM_RectAttr.bColor = OSDPRGM_ENTRY_MAIN_COLOR_BG; _InitRect(&(_PRGM_RectAttr.rect), MAIN_FRAME_X0, MAIN_FRAME_Y1+1, MAIN_FRAME_X1, MAIN_FRAME_Y1+1+ARROW_HEIGHT); GDI_FillRect_909(0, &_PRGM_RectAttr); } //show arrow up rect#ifdef SUPPORT_CLEARALL_IN_PROGRAM if ( _bMainStart >0)#else if ( _bMainStart >1)#endif { _InitRect(&(_PRGM_FrameAttr.rect), MAIN_FRAME_X0, MAIN_FRAME_Y0-1-ARROW_HEIGHT, MAIN_FRAME_X1, MAIN_FRAME_Y0-1); GDI_DrawFrame_909(0, &_PRGM_FrameAttr); _PRGM_StrAttr.wX = ((MAIN_FRAME_X0+MAIN_FRAME_X1)>>1)-5; _PRGM_StrAttr.wY = MAIN_FRAME_Y0-ARROW_HEIGHT+2; GDI_DrawString_909(0, &_PRGM_StrAttr, aArrowUp); } else //clear arrow up rect { _PRGM_RectAttr.bColor = OSDPRGM_ENTRY_MAIN_COLOR_BG; _InitRect(&(_PRGM_RectAttr.rect), MAIN_FRAME_X0, MAIN_FRAME_Y0-1-ARROW_HEIGHT, MAIN_FRAME_X1, MAIN_FRAME_Y0-1); GDI_FillRect_909(0, &_PRGM_RectAttr); } } //end of _ShowMainList()// *********************************************************************************// Function : _ShowOneEntry// Description : Show One Entry in either Main, Title, or Chapter Frame.// Arguments : wEntry: main frame entry #, title #, or chapter #// Return : None// Side Effect :// *********************************************************************************static void _ShowOneEntry(WORD wEntry){ _wOSDBOOKMARKString[0] = 3; //digits 1. - //Kevin1.22, expand program entry to more than 10 _wOSDBOOKMARKString[1] = aNDNumbers[wEntry/10]; if (wEntry<10) _wOSDBOOKMARKString[1] = CHAR_SPACE; _wOSDBOOKMARKString[2] = aNDNumbers[wEntry%10]; _wOSDBOOKMARKString[3] = CHAR_FULL_STOP; _PRGM_StrAttr.bTextColor = OSDPRGM_ENTRY_COLOR_TEXT2; _PRGM_StrAttr.wX = MAIN_FRAME_X0+FRAME_THICKNESS+10; _PRGM_StrAttr.wY = MAIN_FRAME_Y0+FRAME_THICKNESS+ENTRY_HEIGHT*(wEntry-_bMainStart); GDI_DrawString_909(0, &_PRGM_StrAttr, _wOSDBOOKMARKString); if (0 != __wBookMark[wEntry]) { _PRGM_StrAttr.wX = MAIN_FRAME_X0+70; GDI_DrawString_909(0, &_PRGM_StrAttr, aBookmark); _PRGM_StrAttr.wX += 125; _ShowOneEntryNumber(wEntry); GDI_DrawString_909(0, &_PRGM_StrAttr, _wOSDBOOKMARKString); } else { _PRGM_RectAttr.bColor = OSDPRGM_ENTRY_COLOR_TEXT2; _InitRect(&(_PRGM_RectAttr.rect), MAIN_FRAME_X0 + FRAME_THICKNESS + 65, MAIN_FRAME_Y0 + FRAME_THICKNESS+ENTRY_HEIGHT*(wEntry-_bMainStart+1) - 5, MAIN_FRAME_X1- FRAME_THICKNESS - 25, MAIN_FRAME_Y0 + FRAME_THICKNESS+ENTRY_HEIGHT*(wEntry-_bMainStart+1) + 3 - 5); GDI_FillRect_909(0, &_PRGM_RectAttr); }}// *********************************************************************************// Function : _ShowOneEntryNumber// Description : Show One Entry Number in either SEARCH_TITLE, SEARCH_CHAPTER, or SEARCH_TIME field.// Arguments : bSize : Display Size , bNumber: Display Number// Return : None// Side Effect :// *********************************************************************************static void _ShowOneEntryNumber(WORD wNumber){ //2 digits or 3 digits if (wNumber < 10) _wOSDBOOKMARKString[0] = 1; else if (9 < wNumber && wNumber < 100) _wOSDBOOKMARKString[0] = 2; else if (99 < wNumber && wNumber < 1000) _wOSDBOOKMARKString[0] = 3; for (_bOSDBOOKMARKTemp1 = _wOSDBOOKMARKString[0]; _bOSDBOOKMARKTemp1 > 0; _bOSDBOOKMARKTemp1--) { _wOSDBOOKMARKString[_bOSDBOOKMARKTemp1] = aNDNumbers[wNumber%10]; wNumber /= 10; }/* _wOSDBOOKMARKString[bSize] = aNDNumbers[wNumber%10]; _wOSDBOOKMARKString[bSize-1] = aNDNumbers[(wNumber/10)%10];*/}// *********************************************************************************// Function : _ShowTitleChapterTime // Description : Show Title or Chapter and Time// Return : None// *********************************************************************************static void _ShowTitleChapterTime(){ _PRGM_RectAttr.bColor = OSDPRGM_ENTRY_MAIN_COLOR_BG; _InitRect(&(_PRGM_RectAttr.rect), MAIN_FRAME_X1+20, MAIN_FRAME_Y0, BMARK_FRAME_X1, MAIN_FRAME_Y1); GDI_FillRect_909(0, &_PRGM_RectAttr); if (0 != __wBookMark[__wBookMark[0]]) { _PRGM_StrAttr.bTextColor = OSDPRGM_ENTRY_COLOR_TEXT1; _PRGM_StrAttr.bBackground = OSDPRGM_ENTRY_MAIN_COLOR_BG; _PRGM_StrAttr.bColorKey = 0; if (__wDiscType & BOOK_DVD) { __bSearchTitle=__bBookMark_Title[__wBookMark[0]]; __bGoToTimeNO=0; if ( __wBookMark[__wBookMark[0]]!=0) __bGoToTimeNO=1; _PRGM_StrAttr.wX = MAIN_FRAME_X1+30; _PRGM_StrAttr.wY = MAIN_FRAME_Y0; GDI_DrawString_909(0, &_PRGM_StrAttr, aTitle); _PRGM_StrAttr.wX += 105; GDI_DrawString_909(0, &_PRGM_StrAttr, aColon);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -