当前位置: 首页>>代码示例>>C++>>正文


C++ cObjectLock函数代码示例

本文整理汇总了C++中cObjectLock函数的典型用法代码示例。如果您正苦于以下问题:C++ cObjectLock函数的具体用法?C++ cObjectLock怎么用?C++ cObjectLock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了cObjectLock函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: cObjectLock

//------------------------------------------------------------------------------
// Deliver
// Attach the supplied buffer to a free media sample.  Add media sample to delivery
// queue so that the streaming thread can deliver the sample downstream.  If there
// are no free samples, all have been delivered downstream, block until one is returned
// to the free list.  If the streaming thread is blocked, waiting for a sample to
// become available on the delivery queue, signal the thread when a new sample is added.
STDMETHODIMP CCustomAllocator::Deliver(unsigned char* pBuffer)
{
	HRESULT hr = S_OK;

	if (pBuffer)
	{
		CMediaSample* pSample = NULL;

	    for (;;)
		{
			{  // scope for lock
				CAutoLock cObjectLock(this);

	            /* Check we are committed */
		        if (!m_bCommitted)
			    {
				    return VFW_E_NOT_COMMITTED;
				}
				pSample = (CMediaSample*)m_lFree.RemoveHead();
				if (pSample == NULL)
				{
					SetWaitingFree();
	            }
		    }

		    if (pSample)
			{
				hr = pSample->SetPointer(pBuffer, m_lSize);
				if (SUCCEEDED(hr))
				{
					CAutoLock cObjectLock(this);
					m_lDeliver.AddTail(pSample);
					NotifySample();
					DbgLog((LOG_TRACE, DBG_MEM, TEXT("CCustomAllocator::Deliver(): m_lFree: %d  m_lDeliver: %d"), m_lFree.GetCount(), m_lDeliver.GetCount()));
				}
				break;
	        }

	        /* If we didn't get a sample then wait for the list to signal */
	        ASSERT(m_hSemFree);
		    WaitForSingleObject(m_hSemFree, INFINITE);
		}
	}
	else
	{
		hr = E_POINTER;
	}
	
	return hr;
}
开发者ID:hhool,项目名称:Blackmagic_DeckLink_SDK,代码行数:57,代码来源:CustomAllocator.cpp

示例2: CheckPointer

//----------------------------------------------------------------------------
//! @brief	  	要求するメモリの詳細を設定する。
//! @param		pRequest : バッファ要求を含む ALLOCATOR_PROPERTIES 構造体のポインタ
//! @param		pActual : 実際のバッファ プロパティを受け取る ALLOCATOR_PROPERTIES 構造体のポインタ
//! @return		エラーコード
//----------------------------------------------------------------------------
STDMETHODIMP TBufferRendererAllocator::SetProperties( ALLOCATOR_PROPERTIES* pRequest, ALLOCATOR_PROPERTIES* pActual )
{
	CheckPointer( pActual, E_POINTER );
	ValidateReadWritePtr( pActual, sizeof(ALLOCATOR_PROPERTIES) );
	CAutoLock	cObjectLock(this);

    ZeroMemory( pActual, sizeof(ALLOCATOR_PROPERTIES) );

	if( m_bCommitted == TRUE)
		return VFW_E_ALREADY_COMMITTED;

	if( m_lFree.GetCount() < m_lAllocated )	// m_lAllocatedが1個以上の時はエラーにした方がよい?
		return VFW_E_BUFFERS_OUTSTANDING;

	if( pRequest->cBuffers == 1 && pRequest->cbBuffer == m_pRenderer->GetBufferSize() &&
		pRequest->cbAlign == 1 && pRequest->cbPrefix == 0 )
	{
		*pActual = *pRequest;
		m_lSize = pRequest->cbBuffer;
		m_lCount = pRequest->cBuffers;
		m_lAlignment = pRequest->cbAlign;
		m_lPrefix = pRequest->cbPrefix;
		m_bChanged = TRUE;
		return S_OK;
	}

	return VFW_E_BADALIGN;
}
开发者ID:John-He-928,项目名称:krkrz,代码行数:34,代码来源:BufferRenderer.cpp

示例3: cObjectLock

//
// 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; 
}
开发者ID:Datenschredder,项目名称:MediaPortal-1,代码行数:31,代码来源:DVBSub.cpp

示例4: cObjectLock

STDMETHODIMP CWavPackSplitterFilter::Pause(void)
{
	CAutoLock cObjectLock(m_pLock);

	// notify all pins of the change to active state
	if (m_State == State_Stopped) {
		// Order is important, the output pin allocator need to be commited
		// when we activate the input pin

		// First the output pin
		if (m_pOutputPin->IsConnected()) {
			HRESULT hr = m_pOutputPin->Active();
			if (FAILED(hr)) {
				return hr;
			}
		}
		// Then the input pin
		if (m_pInputPin->IsConnected()) {
			HRESULT hr = m_pInputPin->Active();
			if (FAILED(hr)) {
				return hr;
			}
		}
	}

	m_State = State_Paused;
	return S_OK;
}
开发者ID:chinajeffery,项目名称:MPC-BE--1.2.3,代码行数:28,代码来源:WVSplitter.cpp

示例5: cObjectLock

STDMETHODIMP CBDReaderFilter::Stop()
{
  CAutoLock cObjectLock(m_pLock);
  m_bStopping = true;

  LogDebug("CBDReaderFilter::Stop()");

  lib.SetState(State_Stopped);

  if (!m_bRebuildOngoing)
  {
    if (m_pSubtitlePin)
      m_pSubtitlePin->SetRunningStatus(false);

    m_demultiplexer.m_bVideoRequiresRebuild = false;
    m_demultiplexer.m_bAudioRequiresRebuild = false;
    m_demultiplexer.m_bVideoClipSeen = false;

    if (m_pVideoPin)
      m_pVideoPin->StopWait();

    if (m_demultiplexer.m_eAudioClipSeen)
      m_demultiplexer.m_eAudioClipSeen->Set();
  }
  
  LogDebug("CBDReaderFilter::Stop()  -stop source");
  HRESULT hr = CSource::Stop();
  LogDebug("CBDReaderFilter::Stop()  -stop source done");

  m_bStopping = false;

  LogDebug("CBDReaderFilter::Stop() done");

  return hr;
}
开发者ID:BMOTech,项目名称:MediaPortal-1,代码行数:35,代码来源:BDReader.cpp

示例6: ASSERT

//------------------------------------------------------------------------------
// GetFreeCount
//
STDMETHODIMP CCustomAllocator::GetFreeCount(LONG* plBuffersFree)
{
    ASSERT(m_fEnableReleaseCallback);
    CAutoLock cObjectLock(this);
    *plBuffersFree = m_lCount - m_lAllocated + m_lFree.GetCount();
    return NOERROR;
}
开发者ID:hhool,项目名称:Blackmagic_DeckLink_SDK,代码行数:10,代码来源:CustomAllocator.cpp

示例7: LogDebug

//
// Run
//
// Overriden to open the dump file
//
STDMETHODIMP CMpTsFilter::Run(REFERENCE_TIME tStart)
{
	LogDebug("CMpTsFilter::Run()");
  CAutoLock cObjectLock(m_pLock);

  return CBaseFilter::Run(tStart);
}
开发者ID:Erls-Corporation,项目名称:MediaPortal-1,代码行数:12,代码来源:TsWriter.cpp

示例8: CheckPointer

STDMETHODIMP CTransInPlaceInputPin::GetAllocator(IMemAllocator ** ppAllocator)
{
    CheckPointer(ppAllocator,E_POINTER);
    ValidateReadWritePtr(ppAllocator,sizeof(IMemAllocator *));
    CAutoLock cObjectLock(m_pLock);

    HRESULT hr;

    if ( m_pTIPFilter->m_pOutput->IsConnected() ) {
        //  Store the allocator we got
        hr = m_pTIPFilter->OutputPin()->ConnectedIMemInputPin()
                                        ->GetAllocator( ppAllocator );
        if (SUCCEEDED(hr)) {
            m_pTIPFilter->OutputPin()->SetAllocator( *ppAllocator );
        }
    }
    else {
        //  Help upstream filter (eg TIP filter which is having to do a copy)
        //  by providing a temp allocator here - we'll never use
        //  this allocator because when our output is connected we'll
        //  reconnect this pin
        hr = CTransformInputPin::GetAllocator( ppAllocator );
    }
    return hr;

} // GetAllocator
开发者ID:DishBird,项目名称:VideoSuiteUtilities,代码行数:26,代码来源:transip.cpp

示例9: cObjectLock

STDMETHODIMP CTTASplitter::Pause(void)
{
	CAutoLock cObjectLock(m_pLock); 

	if (m_State == State_Stopped) {

		if (m_pOutputPin->IsConnected()) {
			HRESULT hr = m_pOutputPin->Active();

			if (FAILED(hr)) {
				return hr;
			}
		}

		if (m_pInputPin->IsConnected()) {
			HRESULT hr = m_pInputPin->Active();

			if (FAILED(hr)) {
				return hr;
			}
		}
	}

	m_State = State_Paused;

	return S_OK;
}
开发者ID:avdbg,项目名称:MPC-BE,代码行数:27,代码来源:TTASplitter.cpp

示例10: cObjectLock

int CDictionary::Load(LOADINFO* pInfo)
{
	CAutoLock cObjectLock(this);

	if (!pInfo) {
		return E_FAIL;
	}

	if (IsLoaded(pInfo->pDictionaryName)) {
		return S_OK;
	}

	CSubDictionary* pSD = new CSubDictionary(pInfo->pDictionaryName);
	AssertValid(pSD);
	if (pSD->Load(pInfo) != S_OK) {
		delete pSD;
		Log("Can't load %s\n", pInfo->pDictionaryName);
		return E_FAIL;
	}

	m_vecDicts.push_back(pSD);
	Log("Load %s successful!\n", pInfo->pDictionaryName);

	return S_OK;
}
开发者ID:czxttkl,项目名称:HelloMAD,代码行数:25,代码来源:Dictionary.cpp

示例11: cObjectLock

//
// Stop
//
// Overriden to close the dump file
//
STDMETHODIMP CNetworkProviderFilter::Stop()
{
	CAutoLock cObjectLock(m_pLock);
	LOG4CPLUS_DEBUG(logger,"CNetworkProviderFilter::Stop()");
	HRESULT result =  CBaseFilter::Stop();
	LOG4CPLUS_DEBUG(logger,"CNetworkProviderFilter::Stop() completed");
	return result;
}
开发者ID:MisterD81,项目名称:SourceFilters,代码行数:13,代码来源:NetworkProvider.cpp

示例12: cObjectLock

STDMETHODIMP
CBasePin::SetSink(IQualityControl * piqc)
{
	CComAutoLock cObjectLock(m_pLock);
	if (piqc) ValidateReadPtr(piqc,sizeof(IQualityControl));
	m_pQSink = piqc;
	return NOERROR;
} // SetSink
开发者ID:EnoroF,项目名称:easygamelibs,代码行数:8,代码来源:BasePin.cpp

示例13: DebugPrintf

// Run
//
    // the start parameter is the difference to be added to the
    // sample's stream time to get the reference time for
    // its presentation
STDMETHODIMP CWasapiFilter::Run(REFERENCE_TIME tStart)
{
	bStarted=true;
 	DebugPrintf(L"CWasapiFilter::Run \n");
    CAutoLock cObjectLock(m_pLock);
	HRESULT hr=CBaseFilter::Run(tStart);
	m_pManager->StartRendering();
    return hr;
}
开发者ID:9060,项目名称:WasapiRenderer,代码行数:14,代码来源:CWasapiFilter.cpp

示例14: cObjectLock

//
// Stop
//
// Overriden to close the dump file
//
STDMETHODIMP CDumpFilter::Stop()
{
    CAutoLock cObjectLock(m_pLock);

    if (m_pDump)
        m_pDump->CloseFile();

    return CBaseFilter::Stop();
}
开发者ID:synther,项目名称:dump-filter,代码行数:14,代码来源:dump.cpp

示例15: cObjectLock

//
// Run
//
// Overriden to open the dump file
//
STDMETHODIMP EMReadFrameFilter::Run(REFERENCE_TIME tStart)
{
	IReferenceClock *pClock = m_pClock;
    CAutoLock cObjectLock(m_pLock);
	CRefTime agnusStreamTimeObject;
	StreamTime(agnusStreamTimeObject);
	long millisekunder = agnusStreamTimeObject.Millisecs();
    return CBaseFilter::Run(tStart);
}
开发者ID:Barrett17,项目名称:libvodoo,代码行数:14,代码来源:EMReadFrame.cpp


注:本文中的cObjectLock函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。