testcamera: Add [--camera name] parameter
This commit is contained in:
committed by
Sam Lantinga
parent
a3adc41f79
commit
14f7eebac6
@@ -30,6 +30,7 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
int devcount = 0;
|
int devcount = 0;
|
||||||
int i;
|
int i;
|
||||||
|
const char *camera_name = NULL;
|
||||||
|
|
||||||
/* Initialize test framework */
|
/* Initialize test framework */
|
||||||
state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO | SDL_INIT_CAMERA);
|
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 */
|
/* Enable standard application logging */
|
||||||
SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
|
SDL_SetLogPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
|
||||||
|
|
||||||
if (!SDLTest_CommonDefaultArgs(state, argc, argv)) {
|
/* Parse commandline */
|
||||||
return SDL_APP_FAILURE;
|
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;
|
state->num_windows = 1;
|
||||||
@@ -72,6 +92,8 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
|
|||||||
return SDL_APP_FAILURE;
|
return SDL_APP_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_CameraDeviceID camera_id = 0;
|
||||||
|
|
||||||
SDL_Log("Saw %d camera devices.", devcount);
|
SDL_Log("Saw %d camera devices.", devcount);
|
||||||
for (i = 0; i < devcount; i++) {
|
for (i = 0; i < devcount; i++) {
|
||||||
const SDL_CameraDeviceID device = devices[i];
|
const SDL_CameraDeviceID device = devices[i];
|
||||||
@@ -85,14 +107,28 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
|
|||||||
back_camera = device;
|
back_camera = device;
|
||||||
posstr = "[back-facing] ";
|
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_Log(" - Camera #%d: %s %s", i, posstr, name);
|
||||||
SDL_free(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);
|
SDL_free(devices);
|
||||||
|
|
||||||
if (!devid) {
|
if (!camera_id) {
|
||||||
SDL_Log("No cameras available?");
|
SDL_Log("No cameras available?");
|
||||||
return SDL_APP_FAILURE;
|
return SDL_APP_FAILURE;
|
||||||
}
|
}
|
||||||
@@ -101,7 +137,7 @@ int SDL_AppInit(void **appstate, int argc, char *argv[])
|
|||||||
spec.interval_numerator = 1000;
|
spec.interval_numerator = 1000;
|
||||||
spec.interval_denominator = 1;
|
spec.interval_denominator = 1;
|
||||||
|
|
||||||
camera = SDL_OpenCameraDevice(devid, pspec);
|
camera = SDL_OpenCameraDevice(camera_id, pspec);
|
||||||
if (!camera) {
|
if (!camera) {
|
||||||
SDL_Log("Failed to open camera device: %s", SDL_GetError());
|
SDL_Log("Failed to open camera device: %s", SDL_GetError());
|
||||||
return SDL_APP_FAILURE;
|
return SDL_APP_FAILURE;
|
||||||
|
|||||||
Reference in New Issue
Block a user