Bool Osmo4_EventProc(void *priv, GF_Event *evt) { u32 dur; Osmo4 *gpac = (Osmo4 *) priv; CMainFrame *pFrame = (CMainFrame *) gpac->m_pMainWnd; /*shutdown*/ if (!pFrame) return 0; switch (evt->type) { case GF_EVENT_DURATION: dur = (u32) (1000 * evt->duration.duration); //if (dur<1100) dur = 0; pFrame->m_pPlayList->SetDuration((u32) evt->duration.duration ); gpac->max_duration = dur; gpac->can_seek = evt->duration.can_seek; if (!gpac->can_seek) { pFrame->m_Sliders.m_PosSlider.EnableWindow(FALSE); } else { pFrame->m_Sliders.m_PosSlider.EnableWindow(TRUE); pFrame->m_Sliders.m_PosSlider.SetRangeMin(0); pFrame->m_Sliders.m_PosSlider.SetRangeMax(dur); } break; case GF_EVENT_MESSAGE: if (!evt->message.service || !strcmp(evt->message.service, (LPCSTR) pFrame->m_pPlayList->GetURL() )) { pFrame->console_service = "main service"; } else { pFrame->console_service = evt->message.service; } if (evt->message.error!=GF_OK) { if (evt->message.error<GF_OK || !gpac->m_NoConsole) { pFrame->console_err = evt->message.error; pFrame->console_message = evt->message.message; gpac->m_pMainWnd->PostMessage(WM_CONSOLEMSG, 0, 0); /*any error before connection confirm is a service connection error*/ if (!gpac->m_isopen) pFrame->m_pPlayList->SetDead(); } return 0; } if (gpac->m_NoConsole) return 0; /*process user message*/ pFrame->console_err = GF_OK; pFrame->console_message = evt->message.message; gpac->m_pMainWnd->PostMessage(WM_CONSOLEMSG, 0, 0); break; case GF_EVENT_PROGRESS: char *szType; if (evt->progress.progress_type==0) szType = "Buffer "; else if (evt->progress.progress_type==1) szType = "Download "; else if (evt->progress.progress_type==2) szType = "Import "; gf_set_progress(szType, evt->progress.done, evt->progress.total); break; case GF_EVENT_NAVIGATE_INFO: pFrame->console_message = evt->navigate.to_url; gpac->m_pMainWnd->PostMessage(WM_CONSOLEMSG, 1000, 0); break; case GF_EVENT_SCENE_SIZE: if (evt->size.width && evt->size.height) { gpac->orig_width = evt->size.width; gpac->orig_height = evt->size.height; if (gpac->m_term && !pFrame->m_bFullScreen) pFrame->PostMessage(WM_SETSIZE, evt->size.width, evt->size.height); } break; /*don't resize on win32 msg notif*/ #if 0 case GF_EVENT_SIZE: if (/*gpac->m_term && !pFrame->m_bFullScreen && */gpac->orig_width && (evt->size.width < W32_MIN_WIDTH) ) pFrame->PostMessage(WM_SETSIZE, W32_MIN_WIDTH, (W32_MIN_WIDTH*gpac->orig_height) / gpac->orig_width); else pFrame->PostMessage(WM_SETSIZE, evt->size.width, evt->size.height); break; #endif case GF_EVENT_CONNECT: // if (pFrame->m_bStartupFile) return 0; pFrame->BuildStreamList(1); if (evt->connect.is_connected) { pFrame->BuildChapterList(0); gpac->m_isopen = 1; //resetting sliders when opening a new file creates a deadlock on the window thread which is disconnecting pFrame->m_wndToolBar.SetButtonInfo(5, ID_FILE_PLAY, TBBS_BUTTON, gpac->m_isopen ? 4 : 3); pFrame->m_Sliders.m_PosSlider.SetPos(0); pFrame->SetProgTimer(1); } else { gpac->max_duration = 0; gpac->m_isopen = 0; pFrame->BuildChapterList(1); } if (!pFrame->m_bFullScreen) { pFrame->SetFocus(); pFrame->SetForegroundWindow(); } break; case GF_EVENT_QUIT: pFrame->PostMessage(WM_CLOSE, 0L, 0L); break; case GF_EVENT_MIGRATE: { } break; case GF_EVENT_KEYDOWN: gf_term_process_shortcut(gpac->m_term, evt); /*update volume control*/ pFrame->m_Sliders.SetVolume(); switch (evt->key.key_code) { case GF_KEY_HOME: gf_term_set_option(gpac->m_term, GF_OPT_NAVIGATION_TYPE, 1); break; case GF_KEY_ESCAPE: pFrame->PostMessage(WM_COMMAND, ID_VIEW_FULLSCREEN); break; case GF_KEY_MEDIANEXTTRACK: pFrame->m_pPlayList->PlayNext(); break; case GF_KEY_MEDIAPREVIOUSTRACK: pFrame->m_pPlayList->PlayPrev(); break; case GF_KEY_H: if ((evt->key.flags & GF_KEY_MOD_CTRL) && gpac->m_isopen) gf_term_switch_quality(gpac->m_term, 1); break; case GF_KEY_L: if ((evt->key.flags & GF_KEY_MOD_CTRL) && gpac->m_isopen) gf_term_switch_quality(gpac->m_term, 0); break; } break; case GF_EVENT_NAVIGATE: /*fixme - a proper browser would require checking mime type & co*/ /*store URL since it may be destroyed, and post message*/ gpac->m_navigate_url = evt->navigate.to_url; pFrame->PostMessage(WM_NAVIGATE, NULL, NULL); return 1; case GF_EVENT_VIEWPOINTS: pFrame->BuildViewList(); return 0; case GF_EVENT_STREAMLIST: pFrame->BuildStreamList(0); return 0; case GF_EVENT_SET_CAPTION: pFrame->SetWindowText(evt->caption.caption); break; case GF_EVENT_DBLCLICK: pFrame->PostMessage(WM_COMMAND, ID_VIEW_FULLSCREEN); return 0; case GF_EVENT_AUTHORIZATION: { UserPassDialog passdlg; return passdlg.GetPassword(evt->auth.site_url, evt->auth.user, evt->auth.password); } } return 0; }
STDMETHODIMP CGPAXPlugin::QualitySwitch(int switch_up) { if (m_term) gf_term_switch_quality(m_term, switch_up ? 1 : 0); return S_OK; }
STDMETHODIMP CGPAXPlugin::QualitySwitch(int switch_up) { if (m_term) gf_term_switch_quality(m_term, switch_up ? GF_TRUE : GF_FALSE); return S_OK; }