Skip to content

Commit

Permalink
Merge pull request #4192 from Shine-/dxvarenderer
Browse files Browse the repository at this point in the history
Prevent unnecessary colorspace conversions (regression in #4163)
  • Loading branch information
jmarshallnz committed Feb 23, 2014
2 parents 2547096 + 0369b8c commit 62d6cff
Showing 1 changed file with 32 additions and 26 deletions.
58 changes: 32 additions & 26 deletions xbmc/cores/VideoRenderers/WinRenderer.cpp
Expand Up @@ -140,10 +140,11 @@ void CWinRenderer::SelectRenderMethod()
{
CLog::Log(LOGNOTICE, "D3D: rendering method forced to DXVA processor");
m_renderMethod = RENDER_DXVA;
if (!m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format))
if (!m_processor || !m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format))
{
CLog::Log(LOGNOTICE, "D3D: unable to open DXVA processor");
m_processor->Close();
if (m_processor)
m_processor->Close();
m_renderMethod = RENDER_INVALID;
}
}
Expand All @@ -155,13 +156,16 @@ void CWinRenderer::SelectRenderMethod()
{
case RENDER_METHOD_DXVAHD:
case RENDER_METHOD_DXVA:
m_renderMethod = RENDER_DXVA;
if (m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format))
break;
else
if (!m_processor || !m_processor->Open(m_sourceWidth, m_sourceHeight, m_iFlags, m_format, m_extended_format))
{
CLog::Log(LOGNOTICE, "D3D: unable to open DXVA processor");
m_processor->Close();
if (m_processor)
m_processor->Close();
}
else
{
m_renderMethod = RENDER_DXVA;
break;
}
// Drop through to pixel shader
case RENDER_METHOD_AUTO:
Expand Down Expand Up @@ -397,8 +401,9 @@ unsigned int CWinRenderer::PreInit()

m_iRequestedMethod = CSettings::Get().GetInt("videoplayer.rendermethod");

if (g_advancedSettings.m_DXVAForceProcessorRenderer || m_iRequestedMethod == RENDER_METHOD_DXVA
|| m_iRequestedMethod == RENDER_METHOD_DXVAHD)
if (g_advancedSettings.m_DXVAForceProcessorRenderer
|| m_iRequestedMethod == RENDER_METHOD_DXVA
|| m_iRequestedMethod == RENDER_METHOD_DXVAHD)
{
if (m_iRequestedMethod != RENDER_METHOD_DXVA && CSysInfo::IsWindowsVersionAtLeast(CSysInfo::WindowsVersionWin7))
{
Expand All @@ -407,29 +412,30 @@ unsigned int CWinRenderer::PreInit()
{
CLog::Log(LOGNOTICE, "CWinRenderer::Preinit - could not init DXVA-HD processor - skipping");
SAFE_DELETE(m_processor);
m_processor = new DXVA::CProcessor();
}
else
return 0;
}
else
if (!m_processor)
{
m_processor = new DXVA::CProcessor();

if (!m_processor->PreInit())
CLog::Log(LOGNOTICE, "CWinRenderer::Preinit - could not init DXVA2 processor - skipping");
else
return 0;
if (!m_processor->PreInit())
{
CLog::Log(LOGNOTICE, "CWinRenderer::Preinit - could not init DXVA2 processor - skipping");
SAFE_DELETE(m_processor);
}
}
}

if (g_Windowing.IsTextureFormatOk(D3DFMT_L16, 0))
// allow other color spaces besides YV12 in case DXVA rendering is not used or not available
if (!m_processor || (m_iRequestedMethod != RENDER_METHOD_DXVA && m_iRequestedMethod != RENDER_METHOD_DXVAHD))
{
m_formats.push_back(RENDER_FMT_YUV420P10);
m_formats.push_back(RENDER_FMT_YUV420P16);
if (g_Windowing.IsTextureFormatOk(D3DFMT_L16, 0))
{
m_formats.push_back(RENDER_FMT_YUV420P10);
m_formats.push_back(RENDER_FMT_YUV420P16);
}
m_formats.push_back(RENDER_FMT_NV12);
m_formats.push_back(RENDER_FMT_YUYV422);
m_formats.push_back(RENDER_FMT_UYVY422);
}
m_formats.push_back(RENDER_FMT_NV12);
m_formats.push_back(RENDER_FMT_YUYV422);
m_formats.push_back(RENDER_FMT_UYVY422);

return 0;
}

Expand Down

0 comments on commit 62d6cff

Please sign in to comment.