QuelSolaar/betray_plugin_PXC.c

63 lines
2.3 KiB
C

#include "betray_plugin_api.h"
#include "betray_plugin_pxc_wrapper.h"
#include "imagine.h"
#include <stdio.h>
#include <math.h>
//#define DRAW_IMAGE
FILE *output_file = NULL;
uint pxc_plugin_setting_ids[3];
float pxc_plugin_setting_values[3];
float pxc_plugin_vantage[3] = {0, 0, 2};
void *pxc_plugin_mutex = NULL;
void betray_view_vantage2(float *view);
extern void pxc_facial_tracking(float *view, float delta_time, float screen_size, float x_displace, float y_displace);
void pxc_plugin_vantage_func(float *pos)
{
imagine_mutex_lock(pxc_plugin_mutex);
pos[0] = pxc_plugin_vantage[0];
pos[1] = pxc_plugin_vantage[1];
pos[2] = pxc_plugin_vantage[2];
pxc_plugin_setting_values[0] = betray_settings_number_float_get(pxc_plugin_setting_ids[0]);
pxc_plugin_setting_values[1] = betray_settings_number_float_get(pxc_plugin_setting_ids[1]);
pxc_plugin_setting_values[2] = betray_settings_number_float_get(pxc_plugin_setting_ids[2]);
imagine_mutex_unlock(pxc_plugin_mutex);
}
void pxc_plugin_thread_func(void *data)
{
float vantage[3] = {0, 0, 2}, settings[3];
settings[0] = pxc_plugin_setting_values[0];
settings[1] = pxc_plugin_setting_values[1];
settings[2] = pxc_plugin_setting_values[2];
while(TRUE)
{
pxc_facial_tracking(vantage, 0.01, settings[0], settings[1], settings[2]);
imagine_mutex_lock(pxc_plugin_mutex);
pxc_plugin_vantage[0] = vantage[0];
pxc_plugin_vantage[1] = vantage[1];
pxc_plugin_vantage[2] = vantage[2];
settings[0] = pxc_plugin_setting_values[0];
settings[1] = pxc_plugin_setting_values[1];
settings[2] = pxc_plugin_setting_values[2];
imagine_mutex_unlock(pxc_plugin_mutex);
}
}
void betray_plugin_init(void)
{
uint status;
pxc_plugin_mutex = imagine_mutex_create();
betray_plugin_callback_set_view_vantage(pxc_plugin_vantage_func, FALSE);
pxc_plugin_setting_ids[0] = betray_settings_create(BETRAY_ST_NUMBER_FLOAT, "Screen Width MM", 0, NULL);
betray_settings_number_float_set(pxc_plugin_setting_ids[0], 240);
pxc_plugin_setting_ids[1] = betray_settings_create(BETRAY_ST_NUMBER_FLOAT, "Camera Offset X", 0, NULL);
betray_settings_number_float_set(pxc_plugin_setting_ids[1], 0);
pxc_plugin_setting_ids[2] = betray_settings_create(BETRAY_ST_NUMBER_FLOAT, "Camera Offset Y", 0, NULL);
betray_settings_number_float_set(pxc_plugin_setting_ids[2], 1);
imagine_thread(pxc_plugin_thread_func, NULL, "Betray PXC plugin");
}