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


C++ XnDeviceStream::SetNewDataCallback方法代码示例

本文整理汇总了C++中XnDeviceStream::SetNewDataCallback方法的典型用法代码示例。如果您正苦于以下问题:C++ XnDeviceStream::SetNewDataCallback方法的具体用法?C++ XnDeviceStream::SetNewDataCallback怎么用?C++ XnDeviceStream::SetNewDataCallback使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在XnDeviceStream的用法示例。


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

示例1: CreateStreamImpl

XnStatus XnDeviceBase::CreateStreamImpl(const XnChar* strType, const XnChar* strName, const XnActualPropertiesHash* pInitialSet)
{
    XnStatus nRetVal = XN_STATUS_OK;

    xnLogInfo(XN_MASK_DDK, "Creating stream '%s' of type '%s'...", strName, strType);

    xnl::AutoCSLocker lock(m_hLock);

    XnDeviceModule* pModule;
    if (FindModule(strName, &pModule) == XN_STATUS_OK)
    {
        // already exists. check sharing mode (when shared, we allow "creating" the same stream)
        if (!IsStream(pModule) ||
                strcmp(strType, ((XnDeviceStream*)pModule)->GetType()) != 0)
        {
            XN_LOG_WARNING_RETURN(XN_STATUS_STREAM_ALREADY_EXISTS, XN_MASK_DDK, "A stream with this name already exists!");
        }

        // OK, we'll allow this. Just set new configuration
        if (pInitialSet != NULL)
        {
            nRetVal = pModule->BatchConfig(*pInitialSet);
            XN_IS_STATUS_OK(nRetVal);
        }

        ((XnDeviceStream*)pModule)->AddRef();
    }
    else
    {
        // create stream
        XnDeviceModuleHolder* pNewStreamHolder = NULL;

        nRetVal = CreateStreamModule(strType, strName, &pNewStreamHolder);
        XN_IS_STATUS_OK(nRetVal);

        XnDeviceStream* pNewStream = (XnDeviceStream*)(pNewStreamHolder->GetModule());
        if (pNewStream == NULL)
        {
            DestroyStreamModule(pNewStreamHolder);
            XN_LOG_ERROR_RETURN(XN_STATUS_ERROR, XN_MASK_DDK, "Internal Error: Invalid new stream!");
        }

        // initialize the stream
        xnLogVerbose(XN_MASK_DDK, "Initializing stream '%s'...", strName);

        nRetVal = pNewStreamHolder->Init(pInitialSet);
        if (nRetVal != XN_STATUS_OK)
        {
            DestroyStreamModule(pNewStreamHolder);
            return (nRetVal);
        }

        // set it's mirror value (if not requested otherwise)
        XnBool bSetMirror = TRUE;

        if (pInitialSet != NULL)
        {
            XnActualPropertiesHash::ConstIterator it = pInitialSet->End();
            if (XN_STATUS_OK == pInitialSet->Find(XN_MODULE_PROPERTY_MIRROR, it))
            {
                bSetMirror = FALSE;
            }
        }

        if (bSetMirror)
        {
            nRetVal = pNewStream->SetMirror((XnBool)m_DeviceMirror.GetValue());
            if (nRetVal != XN_STATUS_OK)
            {
                DestroyStreamModule(pNewStreamHolder);
                return (nRetVal);
            }
        }

        // add it to the list of existing modules
        nRetVal = AddModule(pNewStreamHolder);
        if (nRetVal != XN_STATUS_OK)
        {
            DestroyStreamModule(pNewStreamHolder);
            return (nRetVal);
        }

        xnLogInfo(XN_MASK_DDK, "Stream '%s' was initialized.", strName);

        pNewStream->SetNewDataCallback(NewStreamDataCallback, this);

        xnLogInfo(XN_MASK_DDK, "'%s' stream was created.", strName);
    }

    return (XN_STATUS_OK);
}
开发者ID:higuchi-yuuki,项目名称:OpenNI2,代码行数:91,代码来源:XnDeviceBase.cpp


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