//==========================================================================; // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR // PURPOSE. // // Copyright (c) 1992 - 1998 Microsoft Corporation. All Rights Reserved. // //--------------------------------------------------------------------------; #include #include "sampvid.h" #include "vidprop.h" // This class implements a property page dialog for the video renderer. We // expose certain statistics from the quality management implementation. In // particular we have two edit fields that show the number of frames we have // actually drawn and the number of frames that we dropped. The number of // frames we dropped does NOT represent the total number dropped in any play // back sequence (as expressed through MCI status frames skipped) since the // quality management protocol may have negotiated with the source filter for // it to send fewer frames in the first place. Dropping frames in the source // filter is nearly always a more efficient mechanism when we are flooded // // Constructor // CQualityProperties::CQualityProperties(LPUNKNOWN pUnk,HRESULT *phr) : CBasePropertyPage(NAME("Quality Page"),pUnk,IDD_QUALITY,IDS_NAME), m_pQualProp(NULL) { ASSERT(phr); } // (Constructor) // // CreateInstance // // Create a quality properties object // CUnknown * WINAPI CQualityProperties::CreateInstance(LPUNKNOWN lpUnk, HRESULT *phr) { return new CQualityProperties(lpUnk, phr); } // CreateInstance // // OnConnect // // Give us the filter to communicate with // HRESULT CQualityProperties::OnConnect(IUnknown *pUnknown) { ASSERT(m_pQualProp == NULL); // Ask the renderer for it's IQualProp interface HRESULT hr = pUnknown->QueryInterface(IID_IQualProp,(void **)&m_pQualProp); if (FAILED(hr)) { return E_NOINTERFACE; } ASSERT(m_pQualProp); // Get quality data for our page m_pQualProp->get_FramesDroppedInRenderer(&m_iDropped); m_pQualProp->get_FramesDrawn(&m_iDrawn); m_pQualProp->get_AvgFrameRate(&m_iFrameRate); m_pQualProp->get_Jitter(&m_iFrameJitter); m_pQualProp->get_AvgSyncOffset(&m_iSyncAvg); m_pQualProp->get_DevSyncOffset(&m_iSyncDev); return NOERROR; } // OnConnect // // OnDisconnect // // Release any IQualProp interface we have // HRESULT CQualityProperties::OnDisconnect() { // Release the interface if (m_pQualProp == NULL) { return E_UNEXPECTED; } m_pQualProp->Release(); m_pQualProp = NULL; return NOERROR; } // OnDisconnect // // OnActivate // // Set the text fields in the property page // HRESULT CQualityProperties::OnActivate() { SetEditFieldData(); return NOERROR; } // OnActivate // // SetEditFieldData // // Initialise the property page fields // void CQualityProperties::SetEditFieldData() { ASSERT(m_pQualProp); TCHAR buffer[50]; wsprintf(buffer,"%d", m_iDropped); SendDlgItemMessage(m_Dlg, IDD_QDROPPED, WM_SETTEXT, 0, (DWORD) (LPSTR) buffer); wsprintf(buffer,"%d", m_iDrawn); SendDlgItemMessage(m_Dlg, IDD_QDRAWN, WM_SETTEXT, 0, (DWORD) (LPSTR) buffer); wsprintf(buffer,"%d.%02d", m_iFrameRate/100, m_iFrameRate%100); SendDlgItemMessage(m_Dlg, IDD_QAVGFRM, WM_SETTEXT, 0, (DWORD) (LPSTR) buffer); wsprintf(buffer,"%d", m_iFrameJitter); SendDlgItemMessage(m_Dlg, IDD_QJITTER, WM_SETTEXT, 0, (DWORD) (LPSTR) buffer); wsprintf(buffer,"%d", m_iSyncAvg); SendDlgItemMessage(m_Dlg, IDD_QSYNCAVG, WM_SETTEXT, 0, (DWORD) (LPSTR) buffer); wsprintf(buffer,"%d", m_iSyncDev); SendDlgItemMessage(m_Dlg, IDD_QSYNCDEV, WM_SETTEXT, 0, (DWORD) (LPSTR) buffer); } // SetEditFieldData