Changeset 296 for trunk/Utilities/RenderInterlacedVideo/MainPropertySheet.h
- Timestamp:
- Jun 15, 2014, 8:06:22 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Utilities/RenderInterlacedVideo/MainPropertySheet.h
r295 r296 173 173 MSG_WM_LBUTTONDBLCLK(OnLButtonDblClk) 174 174 END_MSG_MAP() 175 176 public: 177 178 //////////////////////////////////////////////////////// 179 // CMonitorInformation 180 181 class CMonitorInformation 182 { 183 public: 184 CComPtr<IVMRMonitorConfig9> m_pVmrMonitorConfig; 185 CTempBufferT<VMR9MonitorInfo> m_pMonitorInformations; 186 SIZE_T m_nMonitorInformationCount; 187 188 public: 189 // CMonitorInformation 190 CMonitorInformation() : 191 m_nMonitorInformationCount(0) 192 { 193 } 194 CMonitorInformation(IVMRMonitorConfig9* pVmrMonitorConfig) 195 { 196 Initialize(pVmrMonitorConfig); 197 } 198 CMonitorInformation(IUnknown* pUnknown) 199 { 200 Initialize(pUnknown); 201 } 202 VOID Initialize(IVMRMonitorConfig9* pVmrMonitorConfig) 203 { 204 _A(pVmrMonitorConfig); 205 m_pVmrMonitorConfig = pVmrMonitorConfig; 206 DWORD nMonitorInformationCount = 0; 207 m_pVmrMonitorConfig->GetAvailableMonitors(NULL, 0, &nMonitorInformationCount); 208 if(nMonitorInformationCount < 32) 209 nMonitorInformationCount = 32; 210 m_pMonitorInformations.Free(); 211 _W(m_pMonitorInformations.Allocate(nMonitorInformationCount)); 212 __C(m_pVmrMonitorConfig->GetAvailableMonitors(m_pMonitorInformations, nMonitorInformationCount, &nMonitorInformationCount)); 213 m_nMonitorInformationCount = nMonitorInformationCount; 214 } 215 VOID Initialize(IUnknown* pUnknown) 216 { 217 const CComQIPtr<IVMRMonitorConfig9> pVmrMonitorConfig = pUnknown; 218 __D(pVmrMonitorConfig, E_NOINTERFACE); 219 Initialize(pVmrMonitorConfig); 220 } 221 VOID TraceMonitor() const 222 { 223 #if _DEVELOPMENT 224 _A(m_pVmrMonitorConfig); 225 UINT nMonitor, nDefaultMonitor; 226 __C(m_pVmrMonitorConfig->GetMonitor(&nMonitor)); 227 __C(m_pVmrMonitorConfig->GetDefaultMonitor(&nDefaultMonitor)); 228 _Z4(atlTraceGeneral, 4, _T("nMonitor %d, nDefaultMonitor %d\n"), nMonitor, nDefaultMonitor); 229 #endif // _DEVELOPMENT 230 } 231 BOOL SuggestMonitor(RECT Position, UINT& nSuggestMonitor) const 232 { 233 BOOL bSuggestMonitorAvailable = FALSE; 234 LONG nSuggestMonitorScore; 235 for(DWORD nIndex = 0; nIndex < m_nMonitorInformationCount; nIndex++) 236 { 237 const VMR9MonitorInfo& MonitorInformation = m_pMonitorInformations[nIndex]; 238 const CRect& MonitorPosition = reinterpret_cast<const CRect&>(MonitorInformation.rcMonitor); 239 _Z4(atlTraceGeneral, 4, _T("MonitorInformation.uDevID %d, .hMon 0x%08X, .dwFlags 0x%X, .szDevice \"%ls\", .szDescription \"%ls\"\n"), 240 MonitorInformation.uDevID, 241 //MonitorInformation.rcMonitor.left, ... 242 MonitorInformation.hMon, MonitorInformation.dwFlags, 243 MonitorInformation.szDevice, MonitorInformation.szDescription, 244 //MonitorInformation.liDriverVersion, 245 //MonitorInformation.dwVendorId, MonitorInformation.dwDeviceId, MonitorInformation.dwSubSysId, MonitorInformation.dwRevision, 246 0); 247 CRect VisiblePosition; 248 if(!VisiblePosition.IntersectRect(MonitorPosition, &Position)) 249 continue; 250 const LONG nScore = VisiblePosition.Height() * VisiblePosition.Width(); 251 if(bSuggestMonitorAvailable && nSuggestMonitorScore > nScore) 252 continue; 253 nSuggestMonitor = MonitorInformation.uDevID; 254 bSuggestMonitorAvailable = TRUE; 255 nSuggestMonitorScore = nScore; 256 } 257 return bSuggestMonitorAvailable; 258 } 259 }; 175 260 176 261 public: … … 1268 1353 __C(m_FilterGraph->Connect(pSourceFilter->GetOutputPin(), _FilterGraphHelper::GetFilterPin(m_RendererWindow.m_pBaseFilter))); 1269 1354 __C(m_FilterGraph.m_pMediaEventEx->SetNotifyWindow((OAHWND) m_hWnd, WM_FILTERGRAPHEVENT, (LONG_PTR) this)); 1270 1271 __C(m_FilterGraph.m_pMediaEventEx->CancelDefaultHandling(EC_DISPLAY_CHANGED)); 1272 _W(GetParent().SetWindowPos(NULL, 1680 + 100, 100, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE)); 1273 CRect RendererPosition; 1274 _W(m_RendererWindow.GetWindowRect(RendererPosition)); 1275 1276 CComQIPtr<IVMRMonitorConfig9> pVmrMonitorConfig9 = pBaseFilter; 1277 UINT nMonitor, nDefaultMonitor; 1278 __C(pVmrMonitorConfig9->GetMonitor(&nMonitor)); 1279 __C(pVmrMonitorConfig9->GetDefaultMonitor(&nDefaultMonitor)); 1280 _Z4(atlTraceGeneral, 4, _T("nMonitor %d, nDefaultMonitor %d\n"), nMonitor, nDefaultMonitor); 1281 CTempBufferT<VMR9MonitorInfo> pMonitorInformations(32); 1282 DWORD nMonitorInformationCount = 0; 1283 __C(pVmrMonitorConfig9->GetAvailableMonitors(pMonitorInformations, 32, &nMonitorInformationCount)); 1284 for(DWORD nMonitorIndex = 0; nMonitorIndex < nMonitorInformationCount; nMonitorIndex++) 1285 { 1286 const VMR9MonitorInfo& MonitorInformation = pMonitorInformations[nMonitorIndex]; 1287 const CRect& MonitorPosition = reinterpret_cast<const CRect&>(MonitorInformation.rcMonitor); 1288 _Z4(atlTraceGeneral, 4, _T("MonitorInformation.uDevID %d, .hMon 0x%08X, .dwFlags 0x%X, .szDevice \"%ls\", .szDescription \"%ls\"\n"), 1289 MonitorInformation.uDevID, 1290 //MonitorInformation.rcMonitor.left, ... 1291 MonitorInformation.hMon, MonitorInformation.dwFlags, 1292 MonitorInformation.szDevice, MonitorInformation.szDescription, 1293 //MonitorInformation.liDriverVersion, 1294 //MonitorInformation.dwVendorId, MonitorInformation.dwDeviceId, MonitorInformation.dwSubSysId, MonitorInformation.dwRevision, 1295 0); 1296 if(MonitorPosition.PtInRect(RendererPosition.TopLeft()) && MonitorPosition.PtInRect(RendererPosition.BottomRight())) 1355 #pragma region Simulate EC_DISPLAY_CHANGED (Development) 1356 #if _DEVELOPMENT 1357 __C(m_FilterGraph.m_pMediaEventEx->CancelDefaultHandling(EC_DISPLAY_CHANGED)); 1358 _W(GetParent().SetWindowPos(NULL, 1680 + 100, 100, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE)); 1359 CRect RendererPosition; 1360 _W(m_RendererWindow.GetWindowRect(RendererPosition)); 1361 CVmr9Window::CMonitorInformation MonitorInformation(pBaseFilter); 1362 UINT nMonitor; 1363 if(MonitorInformation.SuggestMonitor(RendererPosition, nMonitor)) 1297 1364 { 1298 _Z4(atlTraceGeneral, 4, _T("MonitorInformation.uDevID %d\n"), MonitorInformation.uDevID); 1299 HRESULT nSetMonitorResult = pVmrMonitorConfig9->SetMonitor(MonitorInformation.uDevID); 1365 _Z4(atlTraceGeneral, 4, _T("nMonitor %d\n"), nMonitor); 1366 _A(MonitorInformation.m_pVmrMonitorConfig->SetMonitor(nMonitor) == VFW_E_WRONG_STATE); 1367 const CComPtr<IPin> pInputPin = _FilterGraphHelper::GetFilterPin(pBaseFilter, PINDIR_INPUT); 1368 const CComPtr<IPin> pOutputPin = _FilterGraphHelper::GetPeerPin(pInputPin); 1369 __D(pInputPin && pOutputPin, E_NOINTERFACE); 1370 const CMediaType pMediaType = _FilterGraphHelper::GetPinMediaType(pOutputPin); 1371 __C(m_FilterGraph.Disconnect(pOutputPin)); 1372 __C(m_FilterGraph.Disconnect(pInputPin)); 1373 const HRESULT nSetMonitorResult = MonitorInformation.m_pVmrMonitorConfig->SetMonitor(nMonitor); 1300 1374 _Z45_DSHRESULT(nSetMonitorResult); 1301 if(nSetMonitorResult == VFW_E_WRONG_STATE) 1302 { 1303 const CComPtr<IPin> pInputPin = _FilterGraphHelper::GetFilterPin(pBaseFilter, PINDIR_INPUT); 1304 const CComPtr<IPin> pOutputPin = _FilterGraphHelper::GetPeerPin(pInputPin); 1305 __D(pInputPin && pOutputPin, E_NOINTERFACE); 1306 const CMediaType pMediaType = _FilterGraphHelper::GetPinMediaType(pOutputPin); 1307 __C(m_FilterGraph.Disconnect(pOutputPin)); 1308 __C(m_FilterGraph.Disconnect(pInputPin)); 1309 1310 1311 //m_RendererWindow.Terminate(); 1312 //__C(m_FilterGraph.RemoveFilter(pBaseFilter)); 1313 nSetMonitorResult = pVmrMonitorConfig9->SetMonitor(MonitorInformation.uDevID); 1314 _Z45_DSHRESULT(nSetMonitorResult); 1315 //__C(m_FilterGraph->AddFilter(pBaseFilter, CT2CW(_T("VMR-9")))); 1316 //m_RendererWindow.Initialize(pBaseFilter); 1317 m_RendererWindow.UpdateVideoPosition(); 1318 1319 1320 if(SUCCEEDED(nSetMonitorResult)) 1321 { 1322 const HRESULT nConnectResult = m_FilterGraph.ConnectDirect(pOutputPin, pInputPin, pMediaType); 1323 _Z45_DSHRESULT(nConnectResult); 1324 __C(nConnectResult); 1325 } 1326 } 1327 __C(nSetMonitorResult); 1328 __C(pVmrMonitorConfig9->GetMonitor(&nMonitor)); 1329 __C(pVmrMonitorConfig9->GetDefaultMonitor(&nDefaultMonitor)); 1330 _Z4(atlTraceGeneral, 4, _T("nMonitor %d, nDefaultMonitor %d\n"), nMonitor, nDefaultMonitor); 1331 break; 1375 m_RendererWindow.UpdateVideoPosition(); 1376 const HRESULT nConnectResult = m_FilterGraph.ConnectDirect(pOutputPin, pInputPin, pMediaType); 1377 _Z45_DSHRESULT(nConnectResult); 1378 if(FAILED(nConnectResult)) 1379 __C(m_FilterGraph.Connect(pOutputPin, pInputPin)); 1332 1380 } 1333 }1334 1381 #endif // _DEVELOPMENT 1382 #pragma endregion 1335 1383 UpdateControls(); 1336 1384 return 0;
Note: See TracChangeset
for help on using the changeset viewer.