Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Include/OniCAPI.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
/******************************************** General APIs */

/** Initialize OpenNI2. Use ONI_API_VERSION as the version. */
ONI_C_API OniStatus oniInitialize(int apiVersion);
ONI_C_API OniStatus oniInitialize(int apiVersion, const char* iniFileParentDirectory);
/** Shutdown OpenNI2 */
ONI_C_API void oniShutdown();

Expand Down
5 changes: 3 additions & 2 deletions Include/OpenNI.h
Original file line number Diff line number Diff line change
Expand Up @@ -1947,10 +1947,11 @@ class OpenNI
Initialize the library.
This will load all available drivers, and see which devices are available
It is forbidden to call any other method in OpenNI before calling @ref initialize().
@param iniFileParentDirectory The path the the parent directory containing the OpenNI ini configuration files.
*/
static Status initialize()
static Status initialize(const char* iniFileParentDirectory = NULL)
{
return (Status)oniInitialize(ONI_API_VERSION); // provide version of API, to make sure proper struct sizes are used
return (Status)oniInitialize(ONI_API_VERSION, iniFileParentDirectory); // provide version of API, to make sure proper struct sizes are used
}

/**
Expand Down
24 changes: 15 additions & 9 deletions Source/Core/OniContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
#include "OniStreamFrameHolder.h"
#include <XnLog.h>

#include <string>

static const char* ONI_CONFIGURATION_FILE = XN_FILE_LOCAL_DIR "OpenNI.ini";
#if (XN_PLATFORM == XN_PLATFORM_WIN32) && (_M_X64)
static const char* ONI_ENV_VAR_DRIVERS_REPOSITORY = "OPENNI2_DRIVERS_PATH64";
Expand All @@ -44,7 +46,7 @@ Context::~Context()
s_valid = FALSE;
}

OniStatus Context::initialize()
OniStatus Context::initialize(const char* iniFileParentDirectory)
{
XnBool repositoryOverridden = FALSE;
XnChar repositoryFromINI[XN_FILE_MAX_PATH] = {0};
Expand All @@ -68,51 +70,55 @@ OniStatus Context::initialize()
s_valid = TRUE;

// Read configuration file
std::string configurationFilePath(ONI_CONFIGURATION_FILE);
if (iniFileParentDirectory) {
configurationFilePath = std::string(iniFileParentDirectory) + XN_FILE_DIR_SEP + ONI_CONFIGURATION_FILE;
}

XnBool configurationFileExists = FALSE;
rc = xnOSDoesFileExist(ONI_CONFIGURATION_FILE, &configurationFileExists);
rc = xnOSDoesFileExist(configurationFilePath.c_str(), &configurationFileExists);
if (configurationFileExists)
{
rc = xnOSReadStringFromINI(ONI_CONFIGURATION_FILE, "Device", "Override", m_overrideDevice, XN_FILE_MAX_PATH);
rc = xnOSReadStringFromINI(configurationFilePath.c_str(), "Device", "Override", m_overrideDevice, XN_FILE_MAX_PATH);
if (rc != XN_STATUS_OK)
{
xnLogVerbose(XN_LOG_MASK_ALL, "No override device in configuration file");
}

XnInt32 nValue;
rc = xnOSReadIntFromINI(ONI_CONFIGURATION_FILE, "Log", "Verbosity", &nValue);
rc = xnOSReadIntFromINI(configurationFilePath.c_str(), "Log", "Verbosity", &nValue);
if (rc == XN_STATUS_OK)
{
xnLogSetMaskMinSeverity(XN_LOG_MASK_ALL, (XnLogSeverity)nValue);
}

rc = xnOSReadIntFromINI(ONI_CONFIGURATION_FILE, "Log", "LogToConsole", &nValue);
rc = xnOSReadIntFromINI(configurationFilePath.c_str(), "Log", "LogToConsole", &nValue);
if (rc == XN_STATUS_OK)
{
xnLogSetConsoleOutput(nValue == 1);
}
rc = xnOSReadIntFromINI(ONI_CONFIGURATION_FILE, "Log", "LogToFile", &nValue);
rc = xnOSReadIntFromINI(configurationFilePath.c_str(), "Log", "LogToFile", &nValue);
if (rc == XN_STATUS_OK)
{
xnLogSetFileOutput(nValue == 1);
}
rc = xnOSReadStringFromINI(ONI_CONFIGURATION_FILE, "Drivers", "Repository", repositoryFromINI, XN_FILE_MAX_PATH);
rc = xnOSReadStringFromINI(configurationFilePath.c_str(), "Drivers", "Repository", repositoryFromINI, XN_FILE_MAX_PATH);
if (rc == XN_STATUS_OK)
{
repositoryOverridden = TRUE;
}
}
else
{
xnLogVerbose(XN_LOG_MASK_ALL, "Couldn't find configuration file '%s'", ONI_CONFIGURATION_FILE);
xnLogVerbose(XN_LOG_MASK_ALL, "Couldn't find configuration file '%s'", configurationFilePath.c_str());
}

xnLogVerbose(XN_LOG_MASK_ALL, "OpenNI %s", ONI_VERSION_STRING);

// Use path specified in ini file
if (repositoryOverridden)
{
xnLogVerbose(XN_LOG_MASK_ALL, "Using '%s' as driver path, as configured in file '%s'", repositoryFromINI, ONI_CONFIGURATION_FILE);
xnLogVerbose(XN_LOG_MASK_ALL, "Using '%s' as driver path, as configured in file '%s'", repositoryFromINI, configurationFilePath.c_str());
rc = loadLibraries(repositoryFromINI);
return OniStatusFromXnStatus(rc);
}
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/OniContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class Context
Context();
~Context();

OniStatus initialize();
OniStatus initialize(const char* iniFileParentDirectory = NULL);
void shutdown();

OniStatus registerDeviceConnectedCallback(OniDeviceInfoCallback handler, void* pCookie, OniCallbackHandle& handle);
Expand Down
4 changes: 2 additions & 2 deletions Source/Core/OpenNI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@

oni::implementation::Context g_Context;

ONI_C_API OniStatus oniInitialize(int /*apiVersion*/)
ONI_C_API OniStatus oniInitialize(int /*apiVersion*/, const char* iniFileParentDirectory)
{
g_Context.clearErrorLogger();
OniStatus rc = g_Context.initialize();
OniStatus rc = g_Context.initialize(iniFileParentDirectory);
return rc;
}

Expand Down