XDron
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Aleksoid1978 В добавление к предыдущему: улучшение работы с интерлейсным выводом (postno=296) дополнение к нему (postno=360) (лучше не нажимать на ссылки, а подводить курсор к знаку вопроса после нее.) сделал, чтобы AUTO-HDMI срабатывало при каждой смене медиа-контента. . Будь-то в плайлисте, или просто при открытии нового файла. Для этого нужно оформить смену режимов как отдельную процедуру. В [MineFrame.h] после void OpenSetupWindowTitle(CString fn = _T("")); добавить ------------------------------------------------ void ChangeMonitorMode(); ------------------------------------------------ в [MineFrame.cpp] в Заменяем большой кусок ----------------------------------------------------- dispmode& dm = AfxGetAppSettings().dmFullscreenRes; m_dmBeforeFullscreen.fValid = false; if(dm.fValid && fSwitchScreenResWhenHasTo) { .... } ------------------------------------------------------ на проверку с простым вызовом функции ------------------------------------------------------- if(AfxGetAppSettings().dmFullscreenRes.fValid && fSwitchScreenResWhenHasTo) ChangeMonitorMode(); ------------------------------------------------------- После описание функции CMainFrame::ToggleFullscreen вставляем описание новой функции (вся структура AppSettings нафиг не нужна, вытаскиваем оттуда только dmFullscreenRes и f_hmonitor) ------------------------------------------------------------------------- void CMainFrame::ChangeMonitorMode() { dispmode& dm = AfxGetAppSettings().dmFullscreenRes; CStringW mf_hmonitor = AfxGetAppSettings().f_hmonitor; // Keep current settings of changed monitor Запоминаем текущие настройки изменяемого монитора GetCurDispMode(m_dmBeforeFullscreen, mf_hmonitor); m_dmBeforeFullscreen.fValid=false; // // If not AUTO-HDMI mode if (dm.freq > 0) { SetDispMode(dm, mf_hmonitor); m_dmBeforeFullscreen.fValid=true; //Setting was changed смена параметров была } // If AUTO-HDMI mode else { LONGLONG m_rtTimePerFrame = 1; // if ExtractAvgTimePerFrame isn't executed then MediaFPS=10000000.0, // dm1.freq=10000000 and SetDispMode isn't executed too. BeginEnumFilters(pGB, pEF, pBF) { BeginEnumPins(pBF, pEP, pPin) { CMediaTypeEx mt; PIN_DIRECTION dir; if(FAILED(pPin->QueryDirection(&dir)) || dir != PINDIR_OUTPUT || FAILED(pPin->ConnectionMediaType(&mt))) continue; ExtractAvgTimePerFrame (&mt, m_rtTimePerFrame); if (m_rtTimePerFrame == 0) m_rtTimePerFrame=1; } EndEnumPins } EndEnumFilters double MediaFPS = 10000000.0 / m_rtTimePerFrame; dispmode dm1=dm; dm1.freq = (int)(MediaFPS + 0.5); if (dm.freq == -1) { if (dm1.freq == 24 || dm1.freq == 25 || dm1.freq == 30) { SetDispMode(dm1, mf_hmonitor); m_dmBeforeFullscreen.fValid=true; //Setting was changed смена параметров была } } if (dm.freq == -2) { if (dm1.freq == 24 || dm1.freq == 25 || dm1.freq == 30) { if (dm1.freq == 25) dm1.freq = 50; if (dm1.freq == 30) dm1.freq = 60; SetDispMode(dm1, mf_hmonitor); m_dmBeforeFullscreen.fValid=true; //Setting was changed смена параметров была } } } } --------------------------------------------- Это была только присказка, а сказка вот: В [MineFrame.cpp] в самом конце описания функции CMainFrame::OpenMediaPrivate(CAutoPtr<OpenMediaData> pOMD) перед PostMessage(WM_KICKIDLE); // calls main thread to update things Вставляем --------------------------------------- if (AfxGetAppSettings().dmFullscreenRes.fValid && m_fFullScreen) ChangeMonitorMode(); --------------------------------------- После открытия медиа-файла проверяется задействована ли фича смены параметров монитора и если прога в полноэкранном режиме, то вызывается команда на смену параметров монитора. Есть только единственный маленький минус - после проигрывания последнего файла выставляются параметры для частоты предпоследнего файла. Чтобы было вообще все шоколадно, можно сделать в настройках смены режимов еще один комбобох с выбором дефолтных настроек, в которые будут сбрасываться настройки при закрытии программы. | Всего записей: 87 | Зарегистр. 23-01-2006 | Отправлено: 22:20 08-01-2010 | Исправлено: XDron, 21:55 09-01-2010 |
|