Skip to content

Commit 6f33737

Browse files
committed
vidcaps with multiple inputs: use vidcap_params_get_count
common code
1 parent 7a77df6 commit 6f33737

File tree

6 files changed

+21
-34
lines changed

6 files changed

+21
-34
lines changed

src/video_capture/aggregate.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -112,17 +112,10 @@ vidcap_aggregate_init(const struct vidcap_params *params, void **state)
112112
}
113113

114114

115-
s->devices_cnt = 0;
116-
const struct vidcap_params *tmp = params;
117-
while((tmp = vidcap_params_get_next(tmp))) {
118-
if (vidcap_params_get_driver(tmp) != NULL)
119-
s->devices_cnt++;
120-
else
121-
break;
122-
}
115+
s->devices_cnt = (int) vidcap_params_get_count(params);
123116

124117
s->devices = calloc(s->devices_cnt, sizeof(struct vidcap *));
125-
tmp = params;
118+
const struct vidcap_params *tmp = params;
126119
for (int i = 0; i < s->devices_cnt; ++i) {
127120
tmp = vidcap_params_get_next(tmp);
128121
struct vidcap_params *copy = vidcap_params_copy(tmp);

src/video_capture/gpustitch.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -533,14 +533,8 @@ vidcap_gpustitch_init(const vidcap_params *params, void **state)
533533

534534
parse_fmt(s, vidcap_params_get_fmt(params));
535535

536-
s->devices_cnt = 0;
536+
s->devices_cnt = vidcap_params_get_count(params);
537537
auto tmp = params;
538-
while((tmp = vidcap_params_get_next(tmp))) {
539-
if (vidcap_params_get_driver(tmp) != nullptr)
540-
s->devices_cnt++;
541-
else
542-
break;
543-
}
544538

545539
if(s->tiled_capture && s->devices_cnt != 1){
546540
log_msg(LOG_LEVEL_ERROR, "Number of capture devices must be exactly 1 when using tiled capture!\n");

src/video_capture/switcher.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -202,14 +202,7 @@ vidcap_switcher_init(const struct vidcap_params *params, void **state)
202202
module_init_default(&s->mod);
203203
s->mod.cls = MODULE_CLASS_DATA;
204204
module_register(&s->mod, vidcap_params_get_parent(params));
205-
s->devices_cnt = 0;
206-
const struct vidcap_params *tmp = params;
207-
while((tmp = vidcap_params_get_next(tmp))) {
208-
if (vidcap_params_get_driver(tmp) == NULL) {
209-
break;
210-
}
211-
s->devices_cnt++;
212-
}
205+
s->devices_cnt = vidcap_params_get_count(params);
213206

214207
if (s->selected_device >= s->devices_cnt) {
215208
MSG(ERROR, "Error: device #%d not available!\n",
@@ -219,7 +212,7 @@ vidcap_switcher_init(const struct vidcap_params *params, void **state)
219212

220213
s->devices = calloc(s->devices_cnt, sizeof(struct vidcap *));
221214
s->device_names = calloc(s->devices_cnt, sizeof s->device_names[0]);
222-
tmp = params;
215+
const struct vidcap_params *tmp = params;
223216
for (unsigned int i = 0; i < s->devices_cnt; ++i) {
224217
tmp = vidcap_params_get_next(tmp);
225218

src/video_capture/swmix.c

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,14 +1050,7 @@ static bool parse(struct vidcap_swmix_state *s, struct video_desc *desc, char *f
10501050
return false;
10511051
}
10521052

1053-
s->devices_cnt = 0;
1054-
const struct vidcap_params *tmp = params;
1055-
while((tmp = vidcap_params_get_next(tmp))) {
1056-
if (vidcap_params_get_driver(tmp) != NULL)
1057-
s->devices_cnt++;
1058-
else
1059-
break;
1060-
}
1053+
s->devices_cnt = vidcap_params_get_count(params);
10611054

10621055
if (s->grid_x != 0 && s->devices_cnt > s->grid_x * s->grid_y) {
10631056
log_msg(LOG_LEVEL_ERROR, "[swmix] Invalid layout! More devices given than layout size.\n");
@@ -1073,7 +1066,7 @@ static bool parse(struct vidcap_swmix_state *s, struct video_desc *desc, char *f
10731066
pthread_mutex_init(&(s->slaves[i].lock), NULL);
10741067
}
10751068

1076-
tmp = params;
1069+
const struct vidcap_params *tmp = params;
10771070
for (int i = 0; i < s->devices_cnt; ++i) {
10781071
tmp = vidcap_params_get_next(tmp);
10791072
s->slaves[i].device_params = vidcap_params_copy(tmp);

src/video_capture_params.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,16 @@ vidcap_params_free(struct vidcap_params *params)
338338
params = next;
339339
}
340340
}
341+
342+
unsigned
343+
vidcap_params_get_count(const struct vidcap_params *params)
344+
{
345+
unsigned count = 0;
346+
while ((params = vidcap_params_get_next(params)) != nullptr) {
347+
if (vidcap_params_get_driver(params) == nullptr) {
348+
return count;
349+
}
350+
count += 1;
351+
}
352+
return count;
353+
}

src/video_capture_params.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ void vidcap_params_set_flags(struct vidcap_params *params, unsi
8484
void vidcap_params_add_flags(struct vidcap_params *params, unsigned int flags);
8585
void vidcap_params_replace_fmt(struct vidcap_params *params,
8686
const char *new_fmt);
87+
unsigned vidcap_params_get_count(const struct vidcap_params *params);
8788
/// @}
8889

8990
#ifdef __cplusplus

0 commit comments

Comments
 (0)