diff --git a/src/filters/transform/vsfilter/VSFilter.props b/src/filters/transform/vsfilter/VSFilter.props index ab06770d3..865647459 100644 --- a/src/filters/transform/vsfilter/VSFilter.props +++ b/src/filters/transform/vsfilter/VSFilter.props @@ -12,10 +12,10 @@ $(SolutionDir)lib;$(OutDir).. - strmbaseD.lib;dsutilD.lib;subtitlesD.lib;subpicD.lib;basevideofilterD.lib;libssfD.lib;log4cplus_staticDU.lib;KasumiD.lib;systemD.lib;unrarD.lib - strmbaseD.lib;dsutilD.lib;subtitlesD.lib;subpicD.lib;basevideofilterD.lib;libssfD.lib;log4cplus_staticDU.lib;KasumiD.lib;systemD.lib;unrarD.lib;dwmapi.lib - delayimp.lib;strmbaseR.lib;dsutilR.lib;subtitlesR.lib;subpicR.lib;basevideofilterR.lib;libssfR.lib;log4cplus_staticRU.lib;KasumiR.lib;systemR.lib;unrarR.lib;winmm.lib - delayimp.lib;strmbaseR.lib;dsutilR.lib;subtitlesR.lib;subpicR.lib;basevideofilterR.lib;libssfR.lib;log4cplus_staticRU.lib;KasumiR.lib;systemR.lib;unrarR.lib;winmm.lib;dwmapi.lib + strmbaseD.lib;dsutilD.lib;subtitlesD.lib;subpicD.lib;basevideofilterD.lib;libssfD.lib;log4cplus_staticDU.lib;KasumiD.lib;systemD.lib;unrarD.lib;Mfuuid.lib + strmbaseD.lib;dsutilD.lib;subtitlesD.lib;subpicD.lib;basevideofilterD.lib;libssfD.lib;log4cplus_staticDU.lib;KasumiD.lib;systemD.lib;unrarD.lib;dwmapi.lib;Mfuuid.lib + delayimp.lib;strmbaseR.lib;dsutilR.lib;subtitlesR.lib;subpicR.lib;basevideofilterR.lib;libssfR.lib;log4cplus_staticRU.lib;KasumiR.lib;systemR.lib;unrarR.lib;winmm.lib;Mfuuid.lib + delayimp.lib;strmbaseR.lib;dsutilR.lib;subtitlesR.lib;subpicR.lib;basevideofilterR.lib;libssfR.lib;log4cplus_staticRU.lib;KasumiR.lib;systemR.lib;unrarR.lib;winmm.lib;dwmapi.lib;Mfuuid.lib false diff --git a/src/filters/transform/vsfilter/xy_sub_filter.cpp b/src/filters/transform/vsfilter/xy_sub_filter.cpp index afb8f014b..f732c701f 100644 --- a/src/filters/transform/vsfilter/xy_sub_filter.cpp +++ b/src/filters/transform/vsfilter/xy_sub_filter.cpp @@ -14,6 +14,8 @@ #include "xy_logger.h" #include "moreuuids.h" +#include +#include #if ENABLE_XY_LOG_RENDERER_REQUEST # define TRACE_RENDERER_REQUEST(msg) XY_LOG_TRACE(msg) @@ -2384,6 +2386,26 @@ HRESULT XySubFilter::FindAndConnectConsumer(IFilterGraph* pGraph) if(pBF != (IBaseFilter*)this) { CComQIPtr new_consumer(pBF); + CLSID filterID; + hr = pBF->GetClassID(&filterID); + + if(!new_consumer && filterID == CLSID_EnhancedVideoRenderer) + { + //EVR wouldn't implement ISubRenderConsumer itself, but a custom presenter might. + CComQIPtr evrservices(pBF); + if(evrservices) + { + ISubRenderConsumer * tmpCI = NULL; + HRESULT hrevr = evrservices->GetService(MR_VIDEO_RENDER_SERVICE, __uuidof(ISubRenderConsumer), (LPVOID*)&tmpCI); + if(tmpCI) + { + CComQIPtr tmpconsumer(tmpCI); + new_consumer = tmpconsumer; + SAFE_RELEASE(tmpCI); + } + } + } + if (new_consumer) { ULONG new_meric = 0; @@ -2405,6 +2427,8 @@ HRESULT XySubFilter::FindAndConnectConsumer(IFilterGraph* pGraph) consumer = new_consumer; } } + m_consumer = consumer; + hr = UpdateParamFromConsumer(true); } } }