XnBool XnSensorDepthGenerator::IsSensorImageNode(xn::ProductionNode& OtherNode)
{
    xn::NodeInfo info = OtherNode.GetInfo();

    XnVersion Version;
    Version.nMajor = XN_PS_MAJOR_VERSION;
    Version.nMinor = XN_PS_MINOR_VERSION;
    Version.nMaintenance = XN_PS_MAINTENANCE_VERSION;
    Version.nBuild = XN_PS_BUILD_VERSION;

    // check if this view point is image from this DLL
    if (info.GetDescription().Type != XN_NODE_TYPE_IMAGE ||
            strcmp(info.GetDescription().strName, XN_DEVICE_NAME) != 0 ||
            strcmp(info.GetDescription().strVendor, XN_VENDOR_PRIMESENSE) != 0 ||
            xnVersionCompare(&info.GetDescription().Version, &Version) != 0)
    {
        return FALSE;
    }

    // check if it uses the same device
    xn::NodeInfoList needed = info.GetNeededNodes();
    for (xn::NodeInfoList::Iterator it = needed.Begin(); it != needed.End(); ++it)
    {
        if ((*it).GetDescription().Type == XN_NODE_TYPE_DEVICE &&
                strcmp((*it).GetCreationInfo(), m_device.GetInfo().GetCreationInfo()) == 0)
        {
            return TRUE;
        }
    }

    return FALSE;
}
示例#2
0
XnStatus XnFileDevice::CreateCodec(xn::ProductionNode& node)
{
    XnStatus nRetVal = XN_STATUS_OK;

    XnNodeInfo* pNodeInfo = NULL;
    if (m_nodeInfoMap.Get(node.GetName(), pNodeInfo) == XN_STATUS_OK)
    {
        XnUInt64 nValue;
        nRetVal = node.GetIntProperty(XN_STREAM_PROPERTY_COMPRESSION, nValue);
        XN_IS_STATUS_OK(nRetVal);

        // create new one
        XnCodecID codecID = XnCodec::GetCodecIDFromCompressionFormat((XnCompressionFormats)nValue);
        if (codecID == XN_CODEC_NULL)
        {
            XN_LOG_WARNING_RETURN(XN_STATUS_CORRUPT_FILE, XN_MASK_FILE, "Invalid compression type: %llu", nValue);
        }

        if (pNodeInfo->pXnCodec == NULL || pNodeInfo->pXnCodec->GetCompressionFormat() != nValue)
        {
            // release old codec
            XN_DELETE(pNodeInfo->pXnCodec);
            if (pNodeInfo->codec.IsValid())
            {
                xnRemoveNeededNode(GetSelfNodeHandle(), pNodeInfo->codec);
                pNodeInfo->codec.Release();
            }

            // special case: IR recorded with JPEG. This mode is no longer allowed by OpenNI (JPEG
            // can now only be used for image). We'll have to handle it ourselves.
            if (node.GetInfo().GetDescription().Type == XN_NODE_TYPE_IR &&
                    codecID == XN_CODEC_JPEG)
            {
                xn::IRGenerator irGen(node);
                XnMapOutputMode outputMode;
                nRetVal = irGen.GetMapOutputMode(outputMode);
                XN_IS_STATUS_OK(nRetVal);

                XN_VALIDATE_NEW_AND_INIT(pNodeInfo->pXnCodec, XnJpegCodec, TRUE, outputMode.nXRes, outputMode.nYRes);
            }
            else
            {
                // normal case
                nRetVal = m_context.CreateCodec(codecID, node, pNodeInfo->codec);
                XN_IS_STATUS_OK(nRetVal);

                // we need to make the codec a needed node, so that if xnForceShutdown() is called, we will be
                // destroyed *before* it does (as we hold a reference to it).
                nRetVal = xnAddNeededNode(GetSelfNodeHandle(), pNodeInfo->codec);
                XN_IS_STATUS_OK(nRetVal);

                XN_VALIDATE_NEW(pNodeInfo->pXnCodec, XnNiCodec, pNodeInfo->codec);
            }
        }
    }

    return (XN_STATUS_OK);
}
示例#3
0
XnStatus XnFileDevice::CheckIRCompatibility(xn::ProductionNode& node)
{
    XnStatus nRetVal = XN_STATUS_OK;

    XnNodeInfo* pNodeInfo = NULL;
    if (node.GetInfo().GetDescription().Type == XN_NODE_TYPE_IR &&
            m_nodeInfoMap.Get(node.GetName(), pNodeInfo) == XN_STATUS_OK)
    {
        XnUInt64 nValue;
        nRetVal = node.GetIntProperty(XN_STREAM_PROPERTY_OUTPUT_FORMAT, nValue);
        XN_IS_STATUS_OK(nRetVal);

        pNodeInfo->bIRisRGB = (nValue == XN_OUTPUT_FORMAT_RGB24);
    }

    return (XN_STATUS_OK);
}