camera-streamer/device/device_list.c
2022-09-03 10:21:46 +02:00

69 lines
1.5 KiB
C

#include "device/device_list.h"
#include <stddef.h>
#include <stdlib.h>
bool device_info_has_format(device_info_t *info, bool capture, unsigned format)
{
if (!info) {
return false;
}
device_info_formats_t *formats = capture ? &info->capture_formats : &info->output_formats;
for (int i = 0; i < formats->n; i++) {
if (formats->formats[i] == format) {
return true;
}
}
return false;
}
device_info_t *device_list_find_m2m_format(device_list_t *list, unsigned output, unsigned capture)
{
if (!list)
return NULL;
for (int i = 0; i < list->ndevices; i++) {
device_info_t *info = &list->devices[i];
if (info->m2m && device_info_has_format(info, false, output) && device_info_has_format(info, true, capture)) {
return info;
}
}
return NULL;
}
device_info_t *device_list_find_m2m_formats(device_list_t *list, unsigned output, unsigned capture_formats[], unsigned *found_format)
{
for (int i = 0; capture_formats[i]; i++) {
device_info_t *info = device_list_find_m2m_format(list, output, capture_formats[i]);
if (info) {
if (found_format) {
*found_format = capture_formats[i];
}
return info;
}
}
return NULL;
}
void device_list_free(device_list_t *list)
{
if (!list)
return;
for (int i = 0; i < list->ndevices; i++) {
device_info_t *info = &list->devices[i];
free(info->name);
free(info->path);
free(info->output_formats.formats);
free(info->capture_formats.formats);
}
free(list);
}