mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
v4l2: Check device node
Check the device node on init. Only remove the source once
This commit is contained in:
parent
43e3ecdb3b
commit
91a10d7c9e
2 changed files with 9 additions and 3 deletions
|
|
@ -993,6 +993,7 @@ impl_init(const struct spa_handle_factory *factory,
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
const char *str;
|
const char *str;
|
||||||
struct port *port;
|
struct port *port;
|
||||||
|
int res;
|
||||||
|
|
||||||
spa_return_val_if_fail(factory != NULL, -EINVAL);
|
spa_return_val_if_fail(factory != NULL, -EINVAL);
|
||||||
spa_return_val_if_fail(handle != NULL, -EINVAL);
|
spa_return_val_if_fail(handle != NULL, -EINVAL);
|
||||||
|
|
@ -1042,6 +1043,9 @@ impl_init(const struct spa_handle_factory *factory,
|
||||||
|
|
||||||
if (info && (str = spa_dict_lookup(info, "device.path"))) {
|
if (info && (str = spa_dict_lookup(info, "device.path"))) {
|
||||||
strncpy(this->props.device, str, 63);
|
strncpy(this->props.device, str, 63);
|
||||||
|
if ((res = spa_v4l2_open(this)) < 0)
|
||||||
|
return res;
|
||||||
|
spa_v4l2_close(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -1194,8 +1194,9 @@ static void v4l2_on_fd_events(struct spa_source *source)
|
||||||
|
|
||||||
if (source->rmask & SPA_IO_ERR) {
|
if (source->rmask & SPA_IO_ERR) {
|
||||||
struct port *port = &this->out_ports[0];
|
struct port *port = &this->out_ports[0];
|
||||||
spa_log_error(this->log, "v4l2 %p: error %d", this, source->rmask);
|
spa_log_error(this->log, "v4l2 %p: error %08x", this, source->rmask);
|
||||||
spa_loop_remove_source(port->data_loop, &port->source);
|
if (port->source.loop)
|
||||||
|
spa_loop_remove_source(port->data_loop, &port->source);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1471,7 +1472,8 @@ static int do_remove_source(struct spa_loop *loop,
|
||||||
void *user_data)
|
void *user_data)
|
||||||
{
|
{
|
||||||
struct port *port = user_data;
|
struct port *port = user_data;
|
||||||
spa_loop_remove_source(port->data_loop, &port->source);
|
if (port->source.loop)
|
||||||
|
spa_loop_remove_source(port->data_loop, &port->source);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue