OniStatus Context::createStream(OniDeviceHandle device, OniSensorType sensorType, OniStreamHandle* pStream) { // Create the stream. Device* pDevice = device->pDevice; VideoStream* pMyStream = pDevice->createStream(sensorType); if (pMyStream == NULL) { m_errorLogger.Append("Context: Couldn't create stream from device:%08x, source: %d", device, sensorType); return ONI_STATUS_ERROR; } pMyStream->setNewFrameCallback(newFrameCallback, this); // Create stream frame holder and connect it to the stream. StreamFrameHolder* pFrameHolder = XN_NEW(StreamFrameHolder, m_frameManager, pMyStream); if (pFrameHolder == NULL) { m_errorLogger.Append("Context: Couldn't create stream frame holder from device:%08x, source: %d", device, sensorType); XN_DELETE(pMyStream); return ONI_STATUS_ERROR; } pMyStream->setFrameHolder(pFrameHolder); // Create handle object. _OniStream* pStreamHandle = XN_NEW(_OniStream); if (pStreamHandle == NULL) { m_errorLogger.Append("Couldn't allocate memory for StreamHandle"); XN_DELETE(pFrameHolder); pFrameHolder = NULL; XN_DELETE(pMyStream); pMyStream = NULL; return ONI_STATUS_ERROR; } *pStream = pStreamHandle; pStreamHandle->pStream = pMyStream; m_cs.Lock(); m_streams.AddLast(pMyStream); m_cs.Unlock(); return ONI_STATUS_OK; }