From a49664c48de044c9b7facd1b0862e09eeaeb4fab Mon Sep 17 00:00:00 2001 From: Underground78 Date: Sat, 19 Oct 2013 16:11:10 +0200 Subject: Renderer statistics: Show the DXVA info from LAV when available. --- .../VideoRenderers/DX9AllocatorPresenter.cpp | 3 +-- .../renderer/VideoRenderers/RenderersSettings.h | 2 +- .../renderer/VideoRenderers/SyncRenderer.cpp | 3 +-- src/mpc-hc/FGFilterLAV.cpp | 19 ++++++++++++++++ src/mpc-hc/FGFilterLAV.h | 2 ++ src/mpc-hc/MainFrm.cpp | 26 +++++++++++++++++----- 6 files changed, 45 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp index 652b8ea90..0f9fd0a55 100644 --- a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp +++ b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp @@ -2015,8 +2015,7 @@ void CDX9AllocatorPresenter::DrawStats() } - strText.Format(L"%-13s: %s", GetDXVAVersion(), GetDXVADecoderDescription()); - DrawText(rc, strText, 1); + DrawText(rc, rd->m_strDXVAInfo, 1); OffsetRect(&rc, 0, TextHeight); strText.Format(L"DirectX SDK : %u", rd->GetDXSdkRelease()); diff --git a/src/filters/renderer/VideoRenderers/RenderersSettings.h b/src/filters/renderer/VideoRenderers/RenderersSettings.h index 0fabe7fac..e14ac76cc 100644 --- a/src/filters/renderer/VideoRenderers/RenderersSettings.h +++ b/src/filters/renderer/VideoRenderers/RenderersSettings.h @@ -138,7 +138,6 @@ class CRenderersData public: CRenderersData(); - // Casimir666 bool m_bTearingTest; int m_iDisplayStats; bool m_bResetStats; // Set to reset the presentation statistics @@ -147,6 +146,7 @@ public: // Hardware feature support bool m_bFP16Support; bool m_b10bitSupport; + CString m_strDXVAInfo; LONGLONG GetPerfCounter() const; HINSTANCE GetD3X9Dll(); diff --git a/src/filters/renderer/VideoRenderers/SyncRenderer.cpp b/src/filters/renderer/VideoRenderers/SyncRenderer.cpp index a76bcb921..2351e0a79 100644 --- a/src/filters/renderer/VideoRenderers/SyncRenderer.cpp +++ b/src/filters/renderer/VideoRenderers/SyncRenderer.cpp @@ -2141,8 +2141,7 @@ void CBaseAP::DrawStats() DrawText(rc, strText, 1); OffsetRect(&rc, 0, TextHeight); - strText.Format(L"%-13s: %s", GetDXVAVersion(), GetDXVADecoderDescription()); - DrawText(rc, strText, 1); + DrawText(rc, rd->m_strDXVAInfo, 1); OffsetRect(&rc, 0, TextHeight); strText.Format(L"DirectX SDK : %u", rd->GetDXSdkRelease()); diff --git a/src/mpc-hc/FGFilterLAV.cpp b/src/mpc-hc/FGFilterLAV.cpp index ffe3aa869..7a3445264 100644 --- a/src/mpc-hc/FGFilterLAV.cpp +++ b/src/mpc-hc/FGFilterLAV.cpp @@ -546,6 +546,25 @@ void CFGFilterLAVVideo::ShowPropertyPages(CWnd* pParendWnd) CFGFilterLAV::ShowPropertyPages(pParendWnd); } +LPCTSTR CFGFilterLAVVideo::GetUserFriendlyDecoderName(const CString& decoderName) +{ + static std::pair userFriendlyDecoderNames[] = { + make_pair(_T("avcodec"), _T("FFmpeg")), + make_pair(_T("dxva2n"), _T("DXVA2 Native")), + make_pair(_T("dxva2cb"), _T("DXVA2 Copy-back")), + make_pair(_T("cuvid"), _T("Nvidia CUVID")), + make_pair(_T("quicksync"), _T("Intel QuickSync")) + }; + + for (int i = 0; i < _countof(userFriendlyDecoderNames); i++) { + if (decoderName == userFriendlyDecoderNames[i].first) { + return userFriendlyDecoderNames[i].second; + } + } + + return _T("None"); +} + static LPCTSTR pixFmtSettingsMap[LAVOutPixFmt_NB] = { _T("yv12"), _T("nv12"), _T("yuy2"), _T("uyvy"), _T("ayuv"), _T("p010"), _T("p210"), _T("y410"), _T("p016"), _T("p216"), _T("y416"), _T("rgb32"), _T("rgb24"), _T("v210"), _T("v410"), _T("yv16"), diff --git a/src/mpc-hc/FGFilterLAV.h b/src/mpc-hc/FGFilterLAV.h index 1ec7acc96..80c8e7272 100644 --- a/src/mpc-hc/FGFilterLAV.h +++ b/src/mpc-hc/FGFilterLAV.h @@ -183,6 +183,8 @@ public: virtual HRESULT Create(IBaseFilter** ppBF, CInterfaceList& pUnks); static void ShowPropertyPages(CWnd* pParendWnd); + + static LPCTSTR GetUserFriendlyDecoderName(const CString& decoderName); }; class CFGFilterLAVAudio : public CFGFilterLAV diff --git a/src/mpc-hc/MainFrm.cpp b/src/mpc-hc/MainFrm.cpp index d27fad07b..7ee0ca3c6 100644 --- a/src/mpc-hc/MainFrm.cpp +++ b/src/mpc-hc/MainFrm.cpp @@ -11267,20 +11267,36 @@ void CMainFrame::OpenSetupVideo() } } + CString DXVAInfo; + if (m_fAudioOnly) { if (IsD3DFullScreenMode()) { m_pFullscreenWnd->DestroyWindow(); } } else { - // If LAV Video is in the graph, we query it directly since it's always more reliable than the hook. + CString DXVADecoderDescription = GetDXVADecoderDescription(); + m_bUsingDXVA = (_T("Not using DXVA") != DXVADecoderDescription && _T("Unknown") != DXVADecoderDescription); + + DXVAInfo.Format(_T("%-13s: %s"), GetDXVAVersion(), GetDXVADecoderDescription()); + + // If LAV Video is in the graph, we query it since it's always more reliable than the hook. if (CComQIPtr pLAVVideoStatus = FindFilter(GUID_LAVVideo, m_pGB)) { CStringW decoderName = pLAVVideoStatus->GetActiveDecoderName(); - m_bUsingDXVA = (decoderName.Find(L"dxva") == 0 || decoderName == L"cuvid" || decoderName == L"quicksync"); - } else { - CString DXVA_Text = GetDXVADecoderDescription(); - m_bUsingDXVA = (_T("Not using DXVA") != DXVA_Text && _T("Unknown") != DXVA_Text); + if (decoderName.Find(L"dxva") == 0 || decoderName == L"cuvid" || decoderName == L"quicksync") { + CString LAVDXVAInfo; + LAVDXVAInfo.Format(_T("LAV Video Decoder (%s)"), CFGFilterLAVVideo::GetUserFriendlyDecoderName(decoderName)); + + if (!m_bUsingDXVA) { // Don't trust the hook + m_bUsingDXVA = true; + DXVAInfo.Format(_T("DXVA2 : %s"), LAVDXVAInfo); + } else { + DXVAInfo.AppendFormat(_T(" [%s]"), LAVDXVAInfo); + } + } } } + + GetRenderersData()->m_strDXVAInfo = DXVAInfo; } void CMainFrame::OpenSetupAudio() -- cgit v1.2.3