本文整理汇总了C++中IFilterGraph::Release方法的典型用法代码示例。如果您正苦于以下问题:C++ IFilterGraph::Release方法的具体用法?C++ IFilterGraph::Release怎么用?C++ IFilterGraph::Release使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IFilterGraph
的用法示例。
在下文中一共展示了IFilterGraph::Release方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Run
//
// Run
//
STDMETHODIMP CDVBSub::Run( REFERENCE_TIME tStart )
{
CAutoLock cObjectLock( m_pLock );
LogDebug( "CDVBSub::Run" );
m_startTimestamp = tStart;
HRESULT hr = CBaseFilter::Run( tStart );
if( hr != S_OK )
{
LogDebug( "CDVBSub::Run - BaseFilter returned %i", hr );
return hr;
}
// Get media seeking interface if missing
if( !m_pIMediaSeeking )
{
IFilterGraph *pGraph = GetFilterGraph();
if( pGraph )
{
pGraph->QueryInterface( &m_pIMediaSeeking );
pGraph->Release();
}
}
LogDebug( "CDVBSub::Run - done" );
return hr;
}
示例2: OnConnect
//
// OnConnect
//
// Called when the property page connects to a filter
//
HRESULT CProgramProperties::OnConnect(IUnknown *pUnknown)
{
ASSERT(m_pProgram == NULL);
CheckPointer(pUnknown,E_POINTER);
HRESULT hr = pUnknown->QueryInterface(IID_IMpeg2PsiParser, (void **) &m_pProgram);
if(FAILED(hr))
{
return E_NOINTERFACE;
}
ASSERT(m_pProgram);
IBaseFilter * pParserFilter ;
hr = m_pProgram->QueryInterface(IID_IBaseFilter, (void **) &pParserFilter);
RETURN_FALSE_IF_FAILED(TEXT("CProgramProperties::OnUpdate() QueryInterface() failed."), hr);
FILTER_INFO Info;
IFilterGraph * pGraph;
hr = pParserFilter->QueryFilterInfo(&Info);
RETURN_FALSE_IF_FAILED(TEXT("CProgramProperties::OnUpdate() QueryFilterInfo() failed."), hr);
pGraph = Info.pGraph;
pParserFilter->Release();
hr = pGraph->QueryInterface(IID_IGraphBuilder, (void **) & m_pGraphBuilder);
RETURN_FALSE_IF_FAILED(TEXT("CProgramProperties::OnUpdate() QueryInterface() failed."), hr);
// get demux filter
hr = GetDemuxFilter(pGraph, &m_pDemux);
RETURN_FALSE_IF_FAILED(TEXT("CProgramProperties::OnUpdate() GetDemuxFilter() failed."), hr);
pGraph->Release();
// if there is no streaming, the following variables will not be initialized.
if(m_pDemux != NULL && m_pGraphBuilder != NULL){
hr = m_pGraphBuilder->QueryInterface(IID_IMediaControl, (void **) & m_pMediaControl);
RETURN_FALSE_IF_FAILED( TEXT(" CProgramProperties::OnUpdate():Failed to QI IMediaControl."), hr);
// Get the initial Program value
m_pProgram->GetTransportStreamId( &m_stream_id);
m_pProgram->GetPatVersionNumber( &m_pat_version);
m_pProgram->GetCountOfPrograms( &m_number_of_programs );
}
if(!OnUpdate())
return FALSE;
return NOERROR;
}
示例3: LogCurrentPosition
void CSubtitlePin::LogCurrentPosition()
{
IFilterGraph* pGraph = m_pTsReaderFilter->GetFilterGraph();
IMediaSeeking* pMediaSeeking( NULL );
if( pGraph )
{
pGraph->QueryInterface( &pMediaSeeking );
pGraph->Release();
}
LONGLONG pos( 0 );
pMediaSeeking->GetCurrentPosition( &pos );
//pMediaSeeking->Release();
float fPos = (float)pos;
fPos = ( ( fPos / 10000000 ) );
LogDebug("sub current position %f", fPos );
}
示例4: Open
HRESULT fsPartMediaPlayer::Open(HANDLE hFile, UINT64 uMaxAvail)
{
HRESULT hr;
Close ();
m_stream.Attach (hFile, uMaxAvail);
if (m_stream.Get_MediaType () == NULL)
return E_FAIL;
m_reader.Set_MediaType (m_stream.Get_MediaType ());
RIF (CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void**) &m_pGB));
IFilterGraph* pFG = NULL;
RIF (m_pGB->QueryInterface (IID_IFilterGraph, (void**)&pFG));
RIF (pFG->AddFilter (&m_reader, NULL));
pFG->Release ();
RIF (m_pGB->Render (m_reader.GetPin (0)));
RIF (m_pGB->QueryInterface (IID_IMediaControl, (void**)&m_pMC));
RIF (m_pGB->QueryInterface (IID_IMediaEventEx, (void**)&m_pME));
RIF (m_pGB->QueryInterface (IID_IMediaSeeking, (void**)&m_pMS));
m_pGB->QueryInterface (IID_IVideoWindow, (void**)&m_pVW);
m_pGB->QueryInterface (IID_IBasicAudio, (void**)&m_pBA);
IBasicVideo* pBV = NULL;
m_pGB->QueryInterface (IID_IBasicVideo, (void**) &pBV);
if (pBV != NULL)
{
long nW, nH;
pBV->get_VideoWidth (&nW);
pBV->get_VideoHeight (&nH);
m_fVideoRatio = (double)nW / nH;
pBV->Release ();
}
else
{
m_fVideoRatio = 1;
}
if (m_pVW)
{
if (FAILED (m_pVW->put_MessageDrain ((OAHWND)m_hOutWnd)))
{
SAFE_RELEASE (m_pVW);
}
}
RIF (m_pME->SetNotifyWindow ((OAHWND)m_hOutWnd, WM_VIDEONOTIFY, LONG(this)));
if (m_pVW)
{
m_pVW->put_Visible (OAFALSE);
m_pVW->put_WindowStyle (WS_CHILD);
m_pVW->put_Owner ((OAHWND)m_hOutWnd);
AutoSize ();
m_pVW->put_Visible (OATRUE);
m_pVW->SetWindowForeground (-1);
}
m_state = VFPS_STOPPED;
return S_OK;
}
示例5: CommandThread
DWORD WINAPI CBDReaderFilter::CommandThread()
{
SetThreadName(-1, "BDReader_COMMAND");
IFilterGraph* pGraph = NULL;
pGraph = GetFilterGraph();
if (pGraph)
{
pGraph->QueryInterface(&m_pMediaSeeking);
pGraph->Release();
}
HANDLE handles[2];
handles[0] = m_hStopCommandThreadEvent;
handles[1] = m_hCommandEvent;
if (m_pMediaSeeking)
{
while(1)
{
//DWORD result = WaitForMultipleObjects(2, handles, false, 40);
DWORD result = WaitForMultipleObjects(2, handles, false, INFINITE);
if (result == WAIT_OBJECT_0) // exit event
{
LogDebug("CBDReaderFilter::Command thread: closing down");
return 0;
}
/*
else if (result == WAIT_TIMEOUT)
{
LONGLONG pos = 0;
HRESULT hr = m_pMediaSeeking->GetCurrentPosition(&pos);
if (SUCCEEDED(hr))
{
lib.ProvideUserInput(CONVERT_DS_90KHz(pos), BD_VK_NONE);
}
}
*/
else if (result == WAIT_OBJECT_0 + 1) // command in queue
{
LONGLONG posEnd = 0;
LONGLONG zeroPos = 0;
m_pMediaSeeking->GetDuration(&posEnd);
ivecCommandQueue it;
DS_CMD cmd;
{ // just fetch the command and release the lock
CAutoLock lock(&m_csCommandQueue);
it = m_commandQueue.begin();
cmd = (*it);
m_commandQueue.erase(it);
if (m_commandQueue.empty())
{
ResetEvent(m_hCommandEvent);
}
}
switch (cmd.id)
{
case REBUILD:
{
LogDebug("CBDReaderFilter::Command thread: issue rebuild!");
LONGLONG pos = 0;
if (cmd.refTime.m_time < 0)
{
CAutoLock lock(&m_csClock);
pos = m_rtCurrentTime;
}
else
pos = cmd.refTime.m_time;
m_eRebuild.Reset();
TriggerOnMediaChanged();
m_eRebuild.Wait();
if (m_bRebuildOngoing)
{
LogDebug("CBDReaderFilter::Command thread: graph rebuild has failed?");
return 0;
}
m_bUpdateStreamPositionOnly = true;
LogDebug("CBDReaderFilter::Command thread: seek - pos: %06.3f (rebuild)", cmd.refTime.Millisecs() / 1000.0);
m_pMediaSeeking->SetPositions(&pos, AM_SEEKING_AbsolutePositioning | AM_SEEKING_FakeSeek, &posEnd, AM_SEEKING_NoPositioning);
m_eSeekDone.Wait();
m_eSeekDone.Reset();
m_demultiplexer.SetMediaChanging(false);
m_demultiplexer.m_bRebuildOngoing = false;
break;
}
//.........这里部分代码省略.........