audioconvert: send the command to the children

Send the command on the converter to all children as well.
Reset the resampler when we are paused so that we don't end up
with old data.

Fixes #288
This commit is contained in:
Wim Taymans 2020-09-14 16:39:42 +02:00
parent 310ed89aad
commit e59c4675a7
7 changed files with 26 additions and 3 deletions

View file

@ -791,7 +791,7 @@ static int impl_node_set_param(void *object, uint32_t id, uint32_t flags,
static int impl_node_send_command(void *object, const struct spa_command *command)
{
struct impl *this = object;
int res;
int res, i;
spa_return_val_if_fail(this != NULL, -EINVAL);
spa_return_val_if_fail(command != NULL, -EINVAL);
@ -802,7 +802,6 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
return res;
if ((res = setup_buffers(this, SPA_DIRECTION_INPUT)) < 0)
return res;
this->started = true;
break;
case SPA_NODE_COMMAND_Suspend:
@ -811,10 +810,23 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
case SPA_NODE_COMMAND_Pause:
this->started = false;
break;
default:
return -ENOTSUP;
}
for (i = 0; i < this->n_nodes; i++) {
if ((res = spa_node_send_command(this->nodes[i], command)) < 0) {
spa_log_error(this->log, NAME " %p: can't send command to node %d: %s",
this, i, spa_strerror(res));
}
}
switch (SPA_NODE_COMMAND_ID(command)) {
case SPA_NODE_COMMAND_Start:
this->started = true;
break;
}
return 0;
}

View file

@ -442,6 +442,8 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
case SPA_NODE_COMMAND_Start:
this->started = true;
break;
case SPA_NODE_COMMAND_Suspend:
/* fallthrough */
case SPA_NODE_COMMAND_Pause:
this->started = false;
break;

View file

@ -244,6 +244,8 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
case SPA_NODE_COMMAND_Start:
this->started = true;
break;
case SPA_NODE_COMMAND_Suspend:
/* fallthrough */
case SPA_NODE_COMMAND_Pause:
this->started = false;
break;

View file

@ -347,6 +347,8 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
case SPA_NODE_COMMAND_Start:
this->started = true;
break;
case SPA_NODE_COMMAND_Suspend:
/* fallthrough */
case SPA_NODE_COMMAND_Pause:
this->started = false;
break;

View file

@ -305,6 +305,8 @@ static void impl_native_process(struct resample *r,
static void impl_native_reset (struct resample *r)
{
struct native_data *d = r->data;
if (d == NULL)
return;
memset(d->hist_mem, 0, r->channels * sizeof(float) * d->n_taps * 2);
d->hist = (d->n_taps / 2) - 1;
d->phase = 0;

View file

@ -252,6 +252,7 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
case SPA_NODE_COMMAND_Suspend:
/* fallthrough */
case SPA_NODE_COMMAND_Pause:
resample_reset(&this->resample);
this->started = false;
break;
default:

View file

@ -329,6 +329,8 @@ static int impl_node_send_command(void *object, const struct spa_command *comman
case SPA_NODE_COMMAND_Start:
this->started = true;
break;
case SPA_NODE_COMMAND_Suspend:
/* fallthrough */
case SPA_NODE_COMMAND_Pause:
this->started = false;
break;