aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redist/linmath.c26
-rw-r--r--src/poser_general_optimizer.c4
-rw-r--r--src/survive_driverman.c4
-rw-r--r--src/survive_playback.c2
4 files changed, 25 insertions, 11 deletions
diff --git a/redist/linmath.c b/redist/linmath.c
index 7d21e5c..19b792f 100644
--- a/redist/linmath.c
+++ b/redist/linmath.c
@@ -649,20 +649,20 @@ void KabschCentered(LinmathQuat qout, const FLT *ptsA, const FLT *ptsB, int num_
CvMat A = cvMat(num_pts, 3, CV_64F, (FLT *)ptsA);
CvMat B = cvMat(num_pts, 3, CV_64F, (FLT *)ptsB);
- double _C[9] = {};
+ double _C[9] = { 0 };
CvMat C = cvMat(3, 3, CV_64F, _C);
cvGEMM(&B, &A, 1, 0, 0, &C, GEMM_1_T);
- double _U[9] = {};
- double _W[9] = {};
- double _VT[9] = {};
+ double _U[9] = { 0 };
+ double _W[9] = { 0 };
+ double _VT[9] = { 0 };
CvMat U = cvMat(3, 3, CV_64F, _U);
CvMat W = cvMat(3, 3, CV_64F, _W);
CvMat VT = cvMat(3, 3, CV_64F, _VT);
cvSVD(&C, &W, &U, &VT, CV_SVD_V_T | CV_SVD_MODIFY_A);
- double _R[9] = {};
+ double _R[9] = { 0 };
CvMat R = cvMat(3, 3, CV_64F, _R);
cvGEMM(&U, &VT, 1, 0, 0, &R, 0);
@@ -678,8 +678,8 @@ void KabschCentered(LinmathQuat qout, const FLT *ptsA, const FLT *ptsB, int num_
}
LINMATH_EXPORT void Kabsch(LinmathPose *B2Atx, const FLT *_ptsA, const FLT *_ptsB, int num_pts) {
- FLT centerA[3] = {};
- FLT centerB[3] = {};
+ FLT centerA[3] = { 0 };
+ FLT centerB[3] = { 0 };
for (int i = 0; i < num_pts; i++) {
for (int j = 0; j < 3; j++) {
@@ -693,9 +693,13 @@ LINMATH_EXPORT void Kabsch(LinmathPose *B2Atx, const FLT *_ptsA, const FLT *_pts
centerB[j] = centerB[j] / (FLT)num_pts;
}
+#ifndef _WIN32
FLT ptsA[num_pts * 3];
FLT ptsB[num_pts * 3];
-
+#else
+ FLT* ptsA = malloc(num_pts * 3 * sizeof(FLT));
+ FLT* ptsB = malloc(num_pts * 3 * sizeof(FLT));
+#endif
for (int i = 0; i < num_pts; i++) {
for (int j = 0; j < 3; j++) {
ptsA[i * 3 + j] = _ptsA[i * 3 + j] - centerA[j];
@@ -706,6 +710,12 @@ LINMATH_EXPORT void Kabsch(LinmathPose *B2Atx, const FLT *_ptsA, const FLT *_pts
KabschCentered(B2Atx->Rot, ptsA, ptsB, num_pts);
quatrotatevector(centerA, B2Atx->Rot, centerA);
sub3d(B2Atx->Pos, centerB, centerA);
+
+
+#ifdef _WIN32
+ free(ptsA);
+ free(ptsB);
+#endif
}
LinmathQuat LinmathQuat_Identity = {1.0};
diff --git a/src/poser_general_optimizer.c b/src/poser_general_optimizer.c
index 6f181a3..4894ce8 100644
--- a/src/poser_general_optimizer.c
+++ b/src/poser_general_optimizer.c
@@ -7,7 +7,7 @@
STATIC_CONFIG_ITEM( CONFIG_MAX_ERROR, "max-error", 'f', "Maximum error permitted by poser_general_optimizer", .0001 );
STATIC_CONFIG_ITEM( CONFIG_FAIL_TO_RESET, "failures-to-reset", 'i', "Failures needed before seed poser is re-run", 1 );
-STATIC_CONFIG_ITEM( CONFIG_SUC_TO_RESET, "successes-to-reset", 'i', "[TODO: I don't know what this does]", -1 );
+STATIC_CONFIG_ITEM( CONFIG_SUC_TO_RESET, "successes-to-reset", 'i', "Reset periodically even if there were no failures", -1 );
STATIC_CONFIG_ITEM( CONFIG_SEED_POSER, "seed-poser", 's', "Poser to be used to seed optimizer", "PoserEPNP" );
void *GetDriver(const char *name);
@@ -21,7 +21,7 @@ void general_optimizer_data_init(GeneralOptimizerData *d, SurviveObject *so) {
survive_attach_configi( ctx, "failures-to-reset", &d->failures_to_reset );
survive_attach_configi( ctx, "successes-to-reset", &d->successes_to_reset );
- const char *subposer = survive_configs(ctx, "seed-poser", SC_GET, 0 );
+ const char *subposer = survive_configs(ctx, "seed-poser", SC_GET, "PoserEPNP");
d->seed_poser = (PoserCB)GetDriver(subposer);
SV_INFO("Initializing general optimizer:");
diff --git a/src/survive_driverman.c b/src/survive_driverman.c
index c43e8ec..71a4c10 100644
--- a/src/survive_driverman.c
+++ b/src/survive_driverman.c
@@ -19,6 +19,10 @@ void RegisterDriver(const char *element, void *data) {
void *GetDriver(const char *element) {
int i;
+
+ if (element == 0)
+ return 0;
+
for (i = 0; i < NrDrivers; i++) {
if (strcmp(element, DriverNames[i]) == 0)
return Drivers[i];
diff --git a/src/survive_playback.c b/src/survive_playback.c
index c616aea..ab5a4c2 100644
--- a/src/survive_playback.c
+++ b/src/survive_playback.c
@@ -187,7 +187,7 @@ typedef struct SurvivePlaybackData SurvivePlaybackData;
static int parse_and_run_imu(const char *line, SurvivePlaybackData *driver) {
char dev[10];
int timecode = 0;
- FLT accelgyro[9] = {};
+ FLT accelgyro[9] = { 0 };
int mask;
int id;