openni context 초기화
9394 단어 context
Context::Init
xnInit 캡슐화
<1>XnOSInit:
xnOSStartHighResTimer(&g_xnOSHighResGlobalTimer);
typedef struct XnOSTimer
{
XnDouble dTicksPerTimeUnit;
LARGE_INTEGER nStartTick;
} XnOSTimer;
XnOSTimer g_xnOSHighResGlobalTimer;
xnOSStartHighResTimer의 주요 내용:
bRetVal = QueryPerformanceFrequency(&nTicksPerSecond);
pTimer->dTicksPerTimeUnit = (XnDouble)nTicksPerSecond.QuadPart/1000.0;
bRetVal = QueryPerformanceCounter(&pTimer->nStartTick);
여기서 알 수 있듯이 이 함수는 주로 시스템 CPU가 프레임마다 운행하는 데 필요한 시간과 시스템의 고해상도 성능 계수기의 현재 값, 즉 CPU가 이미 운행한 횟수를 얻어 전역 변수 g 에 저장한다.xnOSHighResGlobalTimer
<2> xnLogInitSystem()
이 안에는 현재 실행 파일이 있는 디렉터리와 현재 시간을 얻어 전역 변수 static XnLoggerData g 에 저장합니다.xnLoggerData;중간
<3> 구성원에게 메모리 공간 할당
pContext->pLicenses = XN_NEW(XnLicenseList);
pContext->pModuleLoader = XN_NEW(XnModuleLoader, pContext);
pContext->pNodesMap = XN_NEW(XnNodesMap);
pContext->pGlobalErrorChangeEvent= XN_NEW(XnErrorStateChangedEvent);
이 안에서 진행된 것은 메모리 공간을 분배하는 것일 뿐, 구조 함수 안에서는 아무런 조작도 하지 않았다
<4>xnFPSInit(&pContext->readFPS, XN_NODE_FPS_CALC_SAMPLES)
XnFPSData readFPS;
typedef struct XnFPSDataImpl* XnFPSData;
struct XnFPSDataImpl
{
/** An array of the time of each frame. */
XnUInt64* anTimes;
/** The size of the array. */
XnUInt32 nArraySize;
/** Index of the next place to write to. */
XnUInt32 nCurrIndex;
};
XnStatus xnFPSInit(XnFPSData* pFPS, XnUInt32 nSamplesCount)
{
……………..
XnFPSDataImpl* pData = *pFPS;
// Allocate array
XN_VALIDATE_ALIGNED_CALLOC(pData->anTimes, XnUInt64, nSamplesCount, XN_DEFAULT_MEM_ALIGN);
pData->nArraySize = nSamplesCount;
return XN_STATUS_OK;
}
XN_C_API XnStatus xnOSCreateEvent(XN_EVENT_HANDLE* pEventHandle, XnBool bManualReset)
{
return (xnOSCreateNamedEvent(pEventHandle, NULL, bManualReset));
}
XN_C_API XnStatus xnOSCreateNamedEvent(XN_EVENT_HANDLE* pEventHandle, const XnChar* cpEventName, XnBool bManualReset)
{
……….
// Create a named event via the OS
*pEventHandle = CreateEvent(NULL, bManualReset, FALSE, cpEventName);
……………..
return (XN_STATUS_OK);
}
이 함수에서 시스템 함수를 호출하여 이름난 이벤트 대상을 만듭니다
HANDLE WINAPI CreateEvent(
__in_opt LPSECURITY_ATTRIBUTES lpEventAttributes,
__in BOOL bManualReset,
__in BOOL bInitialState,
__in_opt LPCTSTR lpName
);
lpEventAttributes: 보안 속성 대상, 기본값은 NULL입니다. 이 라인은 계승할 수 없습니다.
bManualReset: 자동으로 리셋할지 여부입니다. 만약 그렇다면 이벤트 대상을 무신호 상태로 리셋하려면 수동 호출ResetEvent이 필요합니다. 그렇지 않으면 이 이벤트를 기다리는 라인이 종료되면 자동으로 무신호로 설정합니다.
bInitialState: 초기 상태, 트루 또는 트루 신호
lpName: 이름, 대소문자 민감성
<6> 마운트 모듈
pContext->pModuleLoader->Init();
XnStatus XnModuleLoader::Init()
{
………..
nRetVal = LoadAllModules();
…………
}
XnStatus XnModuleLoader::LoadAllModules()
{
TiXmlDocument doc;
nRetVal = loadModulesFile(doc);// modules.xml, //OPEN_NI_INSTALL_PATH modules.xml
TiXmlElement* pModule = doc.RootElement()->FirstChildElement(XN_MODULE_ELEMENT_NAME);
while (pModule != NULL)
{
const XnChar* strModulePath = NULL;
nRetVal = xnXmlReadStringAttribute(pModule, "path", &strModulePath);
XN_IS_STATUS_OK(nRetVal);
const XnChar* strConfigDir = pModule->Attribute("configDir");
nRetVal = LoadModule(strModulePath, strConfigDir);
XN_IS_STATUS_OK(nRetVal);
pModule = pModule->NextSiblingElement(XN_MODULE_ELEMENT_NAME);
}
………
return (XN_STATUS_OK);
}
이 안에는 Recorder, Mock Node, Codec, XnDeviceSensorV2 등 여러 모듈만 탑재되어 있습니다
Recorder 모듈의 노드 유형은 다음과 같습니다. XNNODE_TYPE_RECORDER,XN_NODE_TYPE_PLAYER
Mock Nodes에는 XN 이 있습니다.NODE_TYPE_DEVICE,XN_NODE_TYPE_DEPTH,XN_NODE_TYPE_IMAGE,XN_NODE_TYPE_IR,XN_NODE_TYPE_AUDIO
Codec에는 XN 이 있습니다.NODE_TYPE_CODEC, 대응하는strName은 각각 16zP, 16Zt, Im8z, NONE, JPEG
XnDeviceSensorV2에는 다양한 제품 노드 유형이 있습니다.
XnVFeatures는 장면 분석과 뼈 추출 기능을 제공합니다.
XnVHandGenerator는 제스처 인식 기능을 제공합니다.
.
.
.
.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WPF의 데이터 컨텍스트 및 자동 연결 소개 - iFour Technolab데이터 소스를 지정하는 몇 가지 방법이 있습니다. 바인딩에 Source 속성을 사용하고 DataContext를 상속할 수 있으며 ElementName 및 RelativeSource 속성도 개체 바인딩에 사용됩니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.