XnStatus XnFrameStream::ReadImpl(XnStreamData* pStreamOutput)
{
	XnStatus nRetVal = XN_STATUS_OK;

	// release previous buffer
	if (pStreamOutput->pInternal->pLockedBuffer != NULL)
	{
		m_pBufferPool->DecRef(pStreamOutput->pInternal->pLockedBuffer);
	}
	else if (pStreamOutput->pInternal->nAllocSize > 0)
	{
		// no need for this buffer, we're replacing it with a pointer to the 
		// buffer pool
		nRetVal = XnStreamDataUpdateSize(pStreamOutput, 0);
		XN_IS_STATUS_OK(nRetVal);
	}

	m_pBufferManager->ReadLastStableBuffer(
		&pStreamOutput->pInternal->pLockedBuffer, 
		&pStreamOutput->nTimestamp,
		&pStreamOutput->nFrameID);

	pStreamOutput->pData = (void*)pStreamOutput->pInternal->pLockedBuffer->GetData();
	pStreamOutput->nDataSize = pStreamOutput->pInternal->pLockedBuffer->GetSize();
	pStreamOutput->nFrameID = ++m_nLastReadFrame;

	nRetVal = PostProcessFrame(pStreamOutput);
	XN_IS_STATUS_OK(nRetVal);

	return XN_STATUS_OK;
}
Exemplo n.º 2
0
XnStatus XnFrameStream::ReadImpl(XnStreamData* pStreamOutput)
{
    XnStatus nRetVal = XN_STATUS_OK;

    // release previous buffer
    m_pBufferPool->DecRef(pStreamOutput->pInternal->pLockedBuffer);

    m_pBufferManager->ReadLastStableBuffer(
        &pStreamOutput->pInternal->pLockedBuffer,
        &pStreamOutput->nTimestamp,
        &pStreamOutput->nFrameID);

    pStreamOutput->pData = (void*)pStreamOutput->pInternal->pLockedBuffer->GetData();
    pStreamOutput->nDataSize = pStreamOutput->pInternal->pLockedBuffer->GetSize();
    pStreamOutput->nFrameID = ++m_nLastReadFrame;

    nRetVal = PostProcessFrame(pStreamOutput);
    XN_IS_STATUS_OK(nRetVal);

    return XN_STATUS_OK;
}