【发布时间】:2017-04-18 05:13:28
【问题描述】:
我有一个基于 Directshow 的媒体播放器应用程序。它在正常 playabck 期间运行良好,没有任何问题。但有时我会在系统启动后启动 Mediaplayer 时遇到一个问题。
HRESULT CSDirectShow::RenderOutputPins (IBaseFilter* pFilter)
{
const char* funcName = "CSDirectShow::RenderOutputPins()";
HRESULT hr = S_OK;
// Enumerate all pins on the source filter,
// looking for the output pins so that I can call Render() on them
//
CComPtr< IEnumPins > pEnumPin;
if (!FAILED (pFilter->EnumPins (&pEnumPin)))
{
while (true)
{
// get the next pin
//
CComPtr< IPin > pPin;
if (pEnumPin->Next (1L, &pPin, NULL) != S_OK) break;
// I'm not interested in connected pins
// if this pin is an unconnected output pin, then render it.
//
CComPtr< IPin > pConnectedPin;
if (pPin->ConnectedTo (&pConnectedPin) == VFW_E_NOT_CONNECTED)
{
PIN_DIRECTION pinDirection;
PIN_INFO pinInfo;
//Get the information of the pin
if (pPin->QueryDirection (&pinDirection) == S_OK
&& pinDirection == PINDIR_OUTPUT
&& pPin->QueryPinInfo(&pinInfo) == S_OK
&& strstr((char*)pinInfo.achName,"~")==NULL)
{
if (FAILED (hr = m_pGB->Render (pPin)))
{
SafeRelease(&pinInfo.pFilter);
return hr;
}
}
SafeRelease(&pinInfo.pFilter);
}
}
}
TraceMsg ("%s: exit",funcName);
return S_OK;
}
当 m_pGB->Render (pPin) 被调用时,这个函数永远不会返回并且它被阻塞在里面。我确认使用日志。这个问题只有在我开始时才会发生我的应用程序启动后立即。当我关闭并重新启动我的应用程序时出现问题时,它就像一个魅力。由于应用程序被设计为在系统启动后自动启动,这种行为已成为一个更大的问题。请帮助
【问题讨论】:
标签: c++ windows directx media-player directshow