@@ -215,14 +215,19 @@ static void quit(int rc);
215
215
static void reshape (int w, int h);
216
216
static void drawView (void );
217
217
218
- // static void init(int argc, char *argv[]);
219
- // static void usage(char *com);
218
+ static void init (int argc, char *argv[]);
219
+ static void usage (char *com);
220
220
static void saveParam (const ARParam *param, ARdouble err_min, ARdouble err_avg, ARdouble err_max, void *userdata);
221
221
222
222
static void startVideo (void )
223
223
{
224
- char buf[256 ];
225
- snprintf (buf, sizeof (buf), " %s %s" , (gPreferenceCameraOpenToken ? gPreferenceCameraOpenToken : " " ), (gPreferenceCameraResolutionToken ? gPreferenceCameraResolutionToken : " " ));
224
+ char *buf = NULL ;
225
+ if (asprintf (&buf, " %s%s%s" ,
226
+ (gPreferenceCameraOpenToken ? gPreferenceCameraOpenToken : " " ),
227
+ (gPreferenceCameraOpenToken && gPreferenceCameraResolutionToken ? " " : " " ),
228
+ (gPreferenceCameraResolutionToken ? gPreferenceCameraResolutionToken : " " )) < 0 ) {
229
+ ARLOGe (" Error: out of memory!!!.\n " );
230
+ }
226
231
227
232
vs = new ARVideoSource;
228
233
if (!vs) {
@@ -236,6 +241,7 @@ static void startVideo(void)
236
241
}
237
242
}
238
243
gPostVideoSetupDone = false ;
244
+ free (buf);
239
245
}
240
246
241
247
static void stopVideo (void )
@@ -350,6 +356,9 @@ int main(int argc, char *argv[])
350
356
gCalibrationPatternSize = getPreferencesCalibrationPatternSize (gPreferences );
351
357
gCalibrationPatternSpacing = getPreferencesCalibrationPatternSpacing (gPreferences );
352
358
359
+ // Allow command-line to override preferences.
360
+ init (argc, argv);
361
+
353
362
gSDLEventPreferencesChanged = SDL_RegisterEvents (1 );
354
363
355
364
// Create a window.
@@ -704,23 +713,22 @@ static void usage(char *com)
704
713
exit (0 );
705
714
}
706
715
707
- /*
708
716
static void init (int argc, char *argv[])
709
717
{
710
- ARGViewport viewport;
711
- char *vconf = NULL;
712
- int i;
713
- int gotTwoPartOption;
714
- int screenWidth, screenHeight, screenMargin;
718
+ int i;
719
+ int gotTwoPartOption;
715
720
716
- chessboardCornerNumX = 0;
717
- chessboardCornerNumY = 0;
718
- calibImageNum = 0;
719
- patternWidth = 0.0f;
721
+ char *vconf = NULL ;
722
+ int cornerNumX = 0 ;
723
+ int cornerNumY = 0 ;
724
+ int calibImageNum = 0 ;
725
+ float patternWidth = 0 .0f ;
720
726
727
+ char *cwd = NULL ;
721
728
arMalloc (cwd, char , MAXPATHLEN);
722
729
if (!getcwd (cwd, MAXPATHLEN)) ARLOGe (" Unable to read current working directory.\n " );
723
730
else ARPRINT (" Current working directory is '%s'\n " , cwd);
731
+ free (cwd);
724
732
725
733
i = 1 ; // argv[0] is name of app, so start at 1.
726
734
while (i < argc) {
@@ -741,35 +749,48 @@ static void init(int argc, char *argv[])
741
749
ARPRINT (" %s version %s\n " , argv[0 ], AR_HEADER_VERSION_STRING);
742
750
exit (0 );
743
751
} else if ( strncmp (argv[i], " -cornerx=" , 9 ) == 0 ) {
744
- if( sscanf(&(argv[i][9]), "%d", &chessboardCornerNumX ) != 1 ) usage(argv[0]);
745
- if( chessboardCornerNumX <= 0 ) usage(argv[0]);
752
+ if ( sscanf (&(argv[i][9 ]), " %d" , &cornerNumX ) != 1 ) usage (argv[0 ]);
753
+ if ( cornerNumX <= 0 ) usage (argv[0 ]);
746
754
} else if ( strncmp (argv[i], " -cornery=" , 9 ) == 0 ) {
747
- if( sscanf(&(argv[i][9]), "%d", &chessboardCornerNumY ) != 1 ) usage(argv[0]);
748
- if( chessboardCornerNumY <= 0 ) usage(argv[0]);
755
+ if ( sscanf (&(argv[i][9 ]), " %d" , &cornerNumY ) != 1 ) usage (argv[0 ]);
756
+ if ( cornerNumY <= 0 ) usage (argv[0 ]);
749
757
} else if ( strncmp (argv[i], " -imagenum=" , 10 ) == 0 ) {
750
758
if ( sscanf (&(argv[i][10 ]), " %d" , &calibImageNum) != 1 ) usage (argv[0 ]);
751
759
if ( calibImageNum <= 0 ) usage (argv[0 ]);
752
760
} else if ( strncmp (argv[i], " -pattwidth=" , 11 ) == 0 ) {
753
761
if ( sscanf (&(argv[i][11 ]), " %f" , &patternWidth) != 1 ) usage (argv[0 ]);
754
- if( patternWidth <= 0 ) usage(argv[0]);
762
+ if ( patternWidth <= 0.0 ) usage (argv[0 ]);
755
763
} else {
756
764
ARLOGe (" Error: invalid command line argument '%s'.\n " , argv[i]);
757
765
usage (argv[0 ]);
758
766
}
759
767
}
760
768
i++;
761
769
}
762
- if( chessboardCornerNumX == 0 ) chessboardCornerNumX = CHESSBOARD_CORNER_NUM_X;
763
- if( chessboardCornerNumY == 0 ) chessboardCornerNumY = CHESSBOARD_CORNER_NUM_Y;
764
- if( calibImageNum == 0 ) calibImageNum = CALIB_IMAGE_NUM;
765
- if( patternWidth == 0.0f ) patternWidth = (float)CHESSBOARD_PATTERN_WIDTH;
766
- ARPRINT("CHESSBOARD_CORNER_NUM_X = %d\n", chessboardCornerNumX);
767
- ARPRINT("CHESSBOARD_CORNER_NUM_Y = %d\n", chessboardCornerNumY);
768
- ARPRINT("CHESSBOARD_PATTERN_WIDTH = %f\n", patternWidth);
769
- ARPRINT("CALIB_IMAGE_NUM = %d\n", calibImageNum);
770
- ARPRINT("Video parameter: %s\n", vconf);
771
-
772
- */
770
+ if (cornerNumX != 0 ) {
771
+ ARPRINT (" gCalibrationPatternSize.width = %d\n " , cornerNumX);
772
+ gCalibrationPatternSize .width = cornerNumX;
773
+ }
774
+ if (cornerNumY != 0 ) {
775
+ ARPRINT (" gCalibrationPatternSize.height = %d\n " , cornerNumY);
776
+ gCalibrationPatternSize .height = cornerNumY;
777
+ }
778
+ if (patternWidth != 0 .0f ) {
779
+ ARPRINT (" gCalibrationPatternSpacing = %f\n " , patternWidth);
780
+ gCalibrationPatternSpacing = patternWidth;
781
+ }
782
+ if (calibImageNum != 0 ) {
783
+ ARPRINT (" gPreferencesCalibImageCountMax = %d\n " , calibImageNum);
784
+ gPreferencesCalibImageCountMax = calibImageNum;
785
+ }
786
+ if (vconf != NULL ) {
787
+ ARPRINT (" gPreferenceCameraOpenToken = '%s'\n " , vconf);
788
+ free (gPreferenceCameraOpenToken );
789
+ gPreferenceCameraOpenToken = strdup (vconf);
790
+ free (gPreferenceCameraResolutionToken );
791
+ gPreferenceCameraResolutionToken = NULL ;
792
+ }
793
+ }
773
794
774
795
static void drawBackground (const float width, const float height, const float x, const float y, const bool drawBorder)
775
796
{
0 commit comments