testcamera: Add [--camera name] parameter

This commit is contained in:
Hunter Kvalevog 2024-06-04 17:28:24 -05:00 committed by Sam Lantinga
parent a3adc41f79
commit 14f7eebac6
1 changed files with 41 additions and 5 deletions

View File

@ -30,6 +30,7 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
{
int devcount = 0;
int i;
const char *camera_name = NULL;
/* Initialize test framework */
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO | SDL_INIT_CAMERA);
@ -40,8 +41,27 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
/* Enable standard application logging */
SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
if (!SDLTest_CommonDefaultArgs(state, argc, argv)) {
return SDL_APP_FAILURE;
/* Parse commandline */
for (i = 1; i < argc;) {
int consumed;
consumed = SDLTest_CommonArg(state, i);
if (!consumed) {
if (SDL_strcmp(argv[i], "--camera") == 0 && argv[i+1]) {
camera_name = argv[i+1];
consumed = 2;
}
}
if (consumed <= 0) {
static const char *options[] = {
"[--camera name]",
NULL,
};
SDLTest_CommonLogUsage(state, argv[0], options);
SDLTest_CommonDestroyState(state);
return 1;
}
i += consumed;
}
state->num_windows = 1;
@ -72,6 +92,8 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
return SDL_APP_FAILURE;
}
SDL_CameraDeviceID camera_id = 0;
SDL_Log("Saw %d camera devices.", devcount);
for (i = 0; i < devcount; i++) {
const SDL_CameraDeviceID device = devices[i];
@ -85,14 +107,28 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
back_camera = device;
posstr = "[back-facing] ";
}
if (camera_name && SDL_strcasecmp(name, camera_name) == 0) {
camera_id = device;
}
SDL_Log(" - Camera #%d: %s %s", i, posstr, name);
SDL_free(name);
}
const SDL_CameraDeviceID devid = front_camera ? front_camera : devices[0]; /* no front-facing? just take the first one. */
if (!camera_id) {
if (camera_name) {
SDL_Log("Could not find camera \"%s\"", camera_name);
return SDL_APP_FAILURE;
}
if (front_camera) {
camera_id = front_camera;
} else if (devcount > 0) {
camera_id = devices[0];
}
}
SDL_free(devices);
if (!devid) {
if (!camera_id) {
SDL_Log("No cameras available?");
return SDL_APP_FAILURE;
}
@ -101,7 +137,7 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
spec.interval_numerator = 1000;
spec.interval_denominator = 1;
camera = SDL_OpenCameraDevice(devid, pspec);
camera = SDL_OpenCameraDevice(camera_id, pspec);
if (!camera) {
SDL_Log("Failed to open camera device: %s", SDL_GetError());
return SDL_APP_FAILURE;