📄 guinavigation.cpp.svn-base
字号:
stream_t* fd; RMint32 i; fd = open_stream_gfx(m_tvList.path, NULL, &i); if (!fd) return RM_ERROR; stream_reset(fd); stream_seek(fd, 0); RMuint16 sub_num = 0, n_max = 10; RMTVListItem* first = (RMTVListItem*) MALLOC(n_max*sizeof(RMTVListItem)); if (!first) { return RM_ERROR; } while (1) { if (sub_num >= n_max) { RMTVListItem* _t; // RMuint32 _g = n_max; // RMuint32 g, h; n_max += 32; _t = (RMTVListItem*) MALLOC(n_max*sizeof(RMTVListItem)); // printf("sub num: %d", (RMuint16) sub_num); RMMemcpy(_t, first, (sub_num) * sizeof(RMTVListItem)); // for(g = 0; g < (RMuint32)(sub_num - 1); g++) // for(h = 0; h < first[g].lines; h ++) // RFREE(first[g].text[h]); RFREE(first); first = _t; _t = NULL; // // first=realloc(first,n_max*sizeof(subtitle)); } RMTVListItem* sub = &first[sub_num]; RMMemset(sub, '\0', sizeof(RMTVListItem)); // sub = NULL; //sub=srp->read(fd,sub); sub = read_line(fd, sub); if (!sub) break; // EOF sub->number = sub_num + 1; ++sub_num; // Error vs. Valid } free_stream(fd); m_tvList.current = 0; m_tvList.items = first; m_tvList.nbItems = sub_num; m_tvList.firstvisible = m_tvList.nbItems - 1; m_tvList.rotate = TRUE; m_tvList.previous = 0; m_tvList.numItemsPerPage = 9; m_tvList.lastvisible = m_tvList.numItemsPerPage >= m_tvList.nbItems ? m_tvList.nbItems - 1 : m_tvList.numItemsPerPage - 1; return RM_OK;}RMstatus RMcuracaoGuiNavigation::GetScreenFormat(guiScreenFormatType *screenFormat){ RMMemcpy(screenFormat, &m_screenFormat, sizeof(guiScreenFormatType)); return RM_OK;}RMstatus RMcuracaoGuiNavigation::InitDisplay(){ RMstatus status; status = CreateOSDSurface(&m_pOSDSource, &m_OSDProfileAddr, 0); // 0 = osd scaler if (RMFAILED(status)) { RMDBGLOG((ENABLE, "Unable to create OSD surface\n")); return status; } RMASSERT(m_pOSDSource && m_OSDProfileAddr); status = gfxInit(m_pRua); if (RMFAILED(status)) { return status; } m_gfxInitialized = TRUE; status = gfxSetOSDParams(m_pRua, m_OSDProfileAddr, m_screenFormat.width, m_screenFormat.height); if (RMFAILED(status)) { gfxUnInit(m_pRua); m_gfxInitialized = FALSE; return status; }#ifdef GUI_REFID_2 gfxSetCodePageConvertion(TRUE); // needed by UTF-8 font#endif m_initialized = TRUE; return RM_OK;}RMstatus RMcuracaoGuiNavigation::CreateOSDSurface(struct DCCVideoSource **pOSDSource, RMuint32 *pOSDProfileAddr, RMuint32 scalerindex){ RMstatus status; struct DCCOSDProfile osd_profile; RMuint32 LumaSize, ChromaAddr, ChromaSize; RMuint32 surfaceID; struct DCC *pDCC = m_gui->gui->GetDCCHandle(); // init osd osd_profile.SamplingMode = EMhwlibSamplingMode_444; osd_profile.ColorMode = EMhwlibColorMode_TrueColor; osd_profile.ColorFormat = EMhwlibColorFormat_32BPP; osd_profile.Width = m_screenFormat.width; osd_profile.Height = m_screenFormat.height; osd_profile.ColorSpace = EMhwlibColorSpace_RGB_0_255; osd_profile.PixelAspectRatio.X = 4; osd_profile.PixelAspectRatio.Y = 3; status = DCCOpenOSDVideoSource(pDCC, &osd_profile, &(*pOSDSource)); if (RMFAILED(status)) { RMDBGLOG((ENABLE, "Cannot open the OSD surface source %d\n", status)); return status; } status = DCCClearOSDVideoSource(*pOSDSource); if (RMFAILED(status)) { RMDBGLOG((ENABLE, "Cannot clear osd surface %d\n", status)); return status; } status = DCCGetScalerModuleID(pDCC, DCCRoute_Main, DCCSurface_OSD, scalerindex, &surfaceID); if (RMFAILED(status)) { RMDBGLOG((ENABLE, "Cannot get surface to display video source %d\n", status)); return status; } status = DCCSetSurfaceSource(pDCC, surfaceID, *pOSDSource); if (RMFAILED(status)) { RMDBGLOG((ENABLE, "Cannot set the surface source %d\n", status)); return status; } status = DCCGetOSDVideoSourceInfo(*pOSDSource, pOSDProfileAddr, &LumaSize, &ChromaAddr, &ChromaSize); if (RMFAILED(status)) { RMDBGLOG((ENABLE, "Cannot get osd video source info %d\n", status)); return status; } if (pOSDProfileAddr == 0) { RMDBGLOG((ENABLE, "No OSD profile address!!\n")); return RM_ERROR; } return RM_OK;}RMstatus RMcuracaoGuiNavigation::ReleaseDisplay(){ if (m_pOSDSource != NULL) { ClearDisplay(); if (RMFAILED(DCCCloseVideoSource(m_pOSDSource))) RMDBGLOG((ENABLE, "Faild to close OSD!!\n")); m_OSDProfileAddr = 0; m_pOSDSource = NULL; } if (m_gfxInitialized) { gfxUnInit(m_pRua); m_gfxInitialized = FALSE; } m_initialized = FALSE; return RM_OK;}RMstatus RMcuracaoGuiNavigation::SetPredefinedIds(){ RMstatus status = RM_ERROR; // get predefined pages for (RMuint32 i = 0; i < m_nbOsdPages; i++) { if (RMCompareAsciiCaseInsensitively(m_playerParams.mainPage, m_osdPages[i]->name)) { m_mainPageId = i; status = RM_OK; continue; } if (RMCompareAsciiCaseInsensitively(MEDIA_LIBRARY_PAGE_NAME, m_osdPages[i]->name)) { m_medialibraryPageId = i; continue; } if (RMCompareAsciiCaseInsensitively(SETUP_PAGE_NAME, m_osdPages[i]->name)) { m_setupPageId = i; continue; } if (RMCompareAsciiCaseInsensitively(SCREEN_SAVER_PAGE, m_osdPages[i]->name)) { m_screenSaverPageId = i; continue; }#ifdef GUI_REFID_2 if(RMCompareAsciiCaseInsensitively(QUICK_SETUP_PAGE, m_osdPages[i]->name)) { m_quickSetupPageId = i; continue; } if(RMCompareAsciiCaseInsensitively(KEYBOARD_SETUP_PAGE, m_osdPages[i]->name)) { m_keyboardPageId = i; continue; }#endif#ifdef GUI_REFID_3 if(RMCompareAsciiCaseInsensitively(ENROL_GROUP_PAGE, m_osdPages[i]->name)) { m_gui->gui->m_enrolGroupPageId = i; continue; } if(RMCompareAsciiCaseInsensitively(DISC_ENROL_PAGE, m_osdPages[i]->name)) { m_gui->gui->m_discEnrolPageId = i; continue; }#endif } // get predefined popups m_messagePopupId = 0; if (m_playerParams.messagePopup != (RMascii*) NULL) { for (RMuint32 i = 0; i < m_nbPopups; i++) { if (RMCompareAsciiCaseInsensitively(m_playerParams.messagePopup, m_Popups[i]->name)) { m_messagePopupId = m_Popups[i]->id; break; } } } else {#ifdef WITH_WMVHD_SUPPORT for (RMuint32 i = 0; i < m_nbPopups; i++) { if (RMCompareAsciiCaseInsensitively(MESSAGEBOX_POPUP_NAME, m_Popups[i]->name)) { m_messagePopupId = m_Popups[i]->id; break; } }#endif } return status;}#ifndef GUI_REFID_2RMstatus RMcuracaoGuiNavigation::ShowOsd(RMbool bShow){ // disable SPU if bringing OSD up m_gui->gui->EnableSPU(bShow == FALSE); if (bShow && !m_osdOn) { m_osdOn = TRUE; } else if (!bShow && m_osdOn) { ClearDisplay(); m_osdOn = FALSE; } return RM_OK;}#elseRMstatus RMcuracaoGuiNavigation::ShowOsd(RMbool bShow){ fprintf(stderr, "------------------------------SHOW OSD show: %d, current osd state: %d, PlayerMode: %ld ------------------------\n", bShow, m_osdOn, m_gui->gui->GetPlayerMode() ); //if(m_gui->gui->GetPlayerMode() == 0) // m_gui->gui->SetPlayerMode(1); if(!m_initialized) { fprintf(stderr, "GUI not initialised !!\n"); return RM_ERROR; } // disable SPU if bringing OSD up m_gui->gui->EnableSPU(bShow == FALSE); if ( bShow && !m_osdOn ) { fprintf(stderr, "bshow and !m_osdOn\n"); m_osdOn = TRUE; } else if ( !bShow && m_osdOn ) { ClearDisplay(); //FadeOsd(16, bShow); fprintf(stderr, "!bshow and m_osdOn\n"); m_osdOn = FALSE; } return RM_OK;}#endifRMstatus RMcuracaoGuiNavigation::MakeVideoOutCommandList(){ if (m_setupPageId == 0) return RM_ERROR; RMuint8 count = 0; RMstatus status; for (RMuint8 i = 0; i < m_osdPages[m_setupPageId]->nbMenus; i++) { if (RMCompareAsciiCaseInsensitively(m_osdPages[m_setupPageId]->menus[i]->name, NTSC_VIDEO_SETTINGS_MENU_NAME)) { // go through menu item lists //[RC] HACK ignore first index which is Active Menu for (RMuint8 j = 1; j < m_osdPages[m_setupPageId]->menus[i]->nbItems; j++) { // go thru button list for (RMuint8 k = 0; k < m_osdPages[m_setupPageId]->menus[i]->items[j]->nbButtons; k++) { for (RMuint8 m = 0; m < m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->nbEvents; m++) { // get command value if (RMCompareAsciiCaseInsensitively( m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->events[m]->name, ACTIVATE_EVENT)) { // copy cmd id status = GetCommandByName(m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->events[m]->command, &m_NTSCvideoOutCommandList.cmd[count]); if (RMSUCCEEDED(status)) { // copy cmd text RMCopyAscii(m_NTSCvideoOutCommandList.cmdtxt[count], m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->object.text); RMDBGLOG((GUIDBG, "VIDEO OUT: %s\n", m_NTSCvideoOutCommandList.cmdtxt[count])); //printf("VIDEO OUT: %s\n", m_NTSCvideoOutCommandList->cmdtxt[count]); m_NTSCvideoOutCommandList.count = ++count; } break; } } } } } } count = 0; for (RMuint8 i = 0; i < m_osdPages[m_setupPageId]->nbMenus; i++) { if (RMCompareAsciiCaseInsensitively(m_osdPages[m_setupPageId]->menus[i]->name, PAL_VIDEO_SETTINGS_MENU_NAME)) { // go through menu item lists //[RC] HACK ignore first index which is Active Menu for (RMuint8 j = 1; j < m_osdPages[m_setupPageId]->menus[i]->nbItems; j++) { // go thru button list for (RMuint8 k = 0; k < m_osdPages[m_setupPageId]->menus[i]->items[j]->nbButtons; k++) { for (RMuint8 m = 0; m < m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->nbEvents; m++) { // get command value if (RMCompareAsciiCaseInsensitively( m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->events[m]->name, ACTIVATE_EVENT)) { // copy cmd id status = GetCommandByName(m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->events[m]->command, &m_PALvideoOutCommandList.cmd[count]); if (RMSUCCEEDED(status)) { // copy cmd text RMCopyAscii(m_PALvideoOutCommandList.cmdtxt[count], m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->object.text); RMDBGLOG((GUIDBG, "VIDEO OUT: %s\n", m_PALvideoOutCommandList.cmdtxt[count])); //printf("VIDEO OUT: %s\n", m_PALvideoOutCommandList.cmdtxt[count]); m_PALvideoOutCommandList.count = ++count; } break; } } } } } } return RM_OK;}RMstatus RMcuracaoGuiNavigation::GetVideoOutCommandList(typeVideoOutCommands *videoOutCmdList, RMuint32 tvStandard){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -