Skip to content

Commit

Permalink
Всегда перекомпилируем шейдер преобразования цвета после изменения ра…
Browse files Browse the repository at this point in the history
…змера входной текстуры. Это исправляет искажения при совместной работе с декодерами DXVA2 или D3D11 и параметре Chroma scaling равным Catmull-Rom.
  • Loading branch information
v0lt committed Sep 20, 2019
1 parent e7294ff commit 76da2dc
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 50 deletions.
45 changes: 20 additions & 25 deletions Source/DX11VideoProcessor.cpp
Expand Up @@ -1147,31 +1147,6 @@ BOOL CDX11VideoProcessor::InitMediaType(const CMediaType* pmt)

// Tex Video Processor
if (FmtConvParams.DX11Format != DXGI_FORMAT_UNKNOWN && S_OK == InitializeTexVP(FmtConvParams, biWidth, biHeight)) {
#if 1
HRESULT hr = UpdateChromaScalingShader();
#else
HRESULT hr = E_ABORT;
#endif

if (FAILED(hr)) {
ASSERT(0);
UINT resid = 0;
if (FmtConvParams.cformat == CF_YUY2) {
resid = IDF_PSH11_CONVERT_YUY2;
}
else if (FmtConvParams.pDX11Planes) {
if (FmtConvParams.pDX11Planes->FmtPlane3) {
resid = IDF_PSH11_CONVERT_PLANAR;
} else {
resid = IDF_PSH11_CONVERT_BIPLANAR;
}
}
else {
resid = IDF_PSH11_CONVERT_COLOR;
}
EXECUTE_ASSERT(S_OK == CreatePShaderFromResource(&m_pPSConvertColor, resid));
}

m_inputMT = *pmt;
UpdateCorrectionTex(m_videoRect.Width(), m_videoRect.Height());
SetShaderConvertColorParams();
Expand Down Expand Up @@ -1412,6 +1387,26 @@ HRESULT CDX11VideoProcessor::InitializeTexVP(const FmtConvParams_t& params, cons
// set default ProcAmp ranges
SetDefaultDXVA2ProcAmpRanges(m_DXVA2ProcAmpRanges);

HRESULT hr2 = UpdateChromaScalingShader();
if (FAILED(hr2)) {
ASSERT(0);
UINT resid = 0;
if (params.cformat == CF_YUY2) {
resid = IDF_PSH11_CONVERT_YUY2;
}
else if (params.pDX11Planes) {
if (params.pDX11Planes->FmtPlane3) {
resid = IDF_PSH11_CONVERT_PLANAR;
} else {
resid = IDF_PSH11_CONVERT_BIPLANAR;
}
}
else {
resid = IDF_PSH11_CONVERT_COLOR;
}
EXECUTE_ASSERT(S_OK == CreatePShaderFromResource(&m_pPSConvertColor, resid));
}

DLog(L"CDX11VideoProcessor::InitializeTexVP() completed successfully");

return S_OK;
Expand Down
45 changes: 20 additions & 25 deletions Source/DX9VideoProcessor.cpp
Expand Up @@ -694,6 +694,26 @@ HRESULT CDX9VideoProcessor::InitializeTexVP(const FmtConvParams_t& params, const
// set default ProcAmp ranges
SetDefaultDXVA2ProcAmpRanges(m_DXVA2ProcAmpRanges);

HRESULT hr2 = UpdateChromaScalingShader();
if (FAILED(hr2)) {
ASSERT(0);
UINT resid = 0;
if (params.cformat == CF_YUY2) {
resid = IDF_SHADER_CONVERT_YUY2;
}
else if (params.pDX9Planes) {
if (params.pDX9Planes->FmtPlane3) {
resid = IDF_SHADER_CONVERT_PLANAR;
} else {
resid = IDF_SHADER_CONVERT_BIPLANAR;
}
}
else {
resid = IDF_SHADER_CONVERT_COLOR;
}
EXECUTE_ASSERT(S_OK == CreatePShaderFromResource(&m_pPSConvertColor, resid));
}

DLog(L"CDX9VideoProcessor::InitializeTexVP() completed successfully");

return S_OK;
Expand Down Expand Up @@ -975,31 +995,6 @@ BOOL CDX9VideoProcessor::InitMediaType(const CMediaType* pmt)

// Tex Video Processor
if (FmtConvParams.D3DFormat != D3DFMT_UNKNOWN && S_OK == InitializeTexVP(FmtConvParams, biWidth, biHeight)) {
#if 1
HRESULT hr = UpdateChromaScalingShader();
#else
HRESULT hr = E_ABORT;
#endif

if (FAILED(hr)) {
ASSERT(0);
UINT resid = 0;
if (FmtConvParams.cformat == CF_YUY2) {
resid = IDF_SHADER_CONVERT_YUY2;
}
else if (FmtConvParams.pDX9Planes) {
if (FmtConvParams.pDX9Planes->FmtPlane3) {
resid = IDF_SHADER_CONVERT_PLANAR;
} else {
resid = IDF_SHADER_CONVERT_BIPLANAR;
}
}
else {
resid = IDF_SHADER_CONVERT_COLOR;
}
EXECUTE_ASSERT(S_OK == CreatePShaderFromResource(&m_pPSConvertColor, resid));
}

SetShaderConvertColorParams();
UpdateStatsStatic();
return TRUE;
Expand Down

0 comments on commit 76da2dc

Please sign in to comment.