void QEvrVideoOverlay::openStateChanged(long state) { if (state == wmposMediaOpen) { setDisplayRect(m_displayRect); emit nativeSizeChanged(); } };
void QEvrVideoOverlay::setAspectRatioMode(Qt::AspectRatioMode mode) { m_aspectRatioMode = mode; if (m_displayControl) { m_displayControl->SetAspectRatioMode(mode == Qt::KeepAspectRatio ? MFVideoARMode_PreservePicture : MFVideoARMode_None); setDisplayRect(m_displayRect); } }
void QEvrVideoOverlay::setDisplayControl(IMFVideoDisplayControl *control) { if (m_displayControl) m_displayControl->Release(); m_displayControl = control; if (m_displayControl) { m_displayControl->AddRef(); m_displayControl->SetVideoWindow(m_winId); m_displayControl->SetAspectRatioMode(m_aspectRatioMode == Qt::KeepAspectRatio ? MFVideoARMode_PreservePicture : MFVideoARMode_None); m_displayControl->SetBorderColor(m_windowColor); setDisplayRect(m_displayRect); } }
void QEvrVideoOverlay::setWinId(WId id) { m_winId = id; if (QWidget *widget = QWidget::find(m_winId)) { const QColor color = widget->palette().color(QPalette::Window); m_windowColor = RGB(color.red(), color.green(), color.blue()); } if (m_displayControl) { m_displayControl->SetVideoWindow(id); m_displayControl->SetAspectRatioMode(m_aspectRatioMode == Qt::KeepAspectRatio ? MFVideoARMode_PreservePicture : MFVideoARMode_None); m_displayControl->SetBorderColor(m_windowColor); setDisplayRect(m_displayRect); } }
void Vmr9VideoWindowControl::setAspectRatioMode(Qt::AspectRatioMode mode) { m_aspectRatioMode = mode; if (IVMRWindowlessControl9 *control = com_cast<IVMRWindowlessControl9>( m_filter, IID_IVMRWindowlessControl9)) { switch (mode) { case Qt::IgnoreAspectRatio: control->SetAspectRatioMode(VMR9ARMode_None); break; case Qt::KeepAspectRatio: control->SetAspectRatioMode(VMR9ARMode_LetterBox); break; case Qt::KeepAspectRatioByExpanding: control->SetAspectRatioMode(VMR9ARMode_LetterBox); setDisplayRect(m_displayRect); break; default: break; } control->Release(); } }
void Evr9VideoWindowControl::setAspectRatioMode(Qt::AspectRatioMode mode) { m_aspectRatioMode = mode; if (m_displayControl) { switch (mode) { case Qt::IgnoreAspectRatio: //comment from MSDN: Do not maintain the aspect ratio of the video. Stretch the video to fit the output rectangle. m_displayControl->SetAspectRatioMode(MFVideoARMode_None); break; case Qt::KeepAspectRatio: //comment from MSDN: Preserve the aspect ratio of the video by letterboxing or within the output rectangle. m_displayControl->SetAspectRatioMode(MFVideoARMode_PreservePicture); break; case Qt::KeepAspectRatioByExpanding: //for this mode, more adjustment will be done in setDisplayRect m_displayControl->SetAspectRatioMode(MFVideoARMode_PreservePicture); break; default: break; } setDisplayRect(m_displayRect); } }