diff options
Diffstat (limited to 'libaf/af_channels.c')
-rw-r--r-- | libaf/af_channels.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/libaf/af_channels.c b/libaf/af_channels.c index 3ebb894f56..772242038e 100644 --- a/libaf/af_channels.c +++ b/libaf/af_channels.c @@ -148,9 +148,7 @@ static int control(struct af_instance_s* af, int cmd, void* arg) af->data->rate = ((af_data_t*)arg)->rate; af->data->format = ((af_data_t*)arg)->format; af->data->bps = ((af_data_t*)arg)->bps; - af->mul.n = af->data->nch; - af->mul.d = ((af_data_t*)arg)->nch; - af_frac_cancel(&af->mul); + af->mul = (double)af->data->nch / ((af_data_t*)arg)->nch; return check_routes(s,((af_data_t*)arg)->nch,af->data->nch); case AF_CONTROL_COMMAND_LINE:{ int nch = 0; @@ -251,7 +249,7 @@ static af_data_t* play(struct af_instance_s* af, af_data_t* data) return NULL; // Reset unused channels - memset(l->audio,0,(c->len*af->mul.n)/af->mul.d); + memset(l->audio,0,c->len / c->nch * l->nch); if(AF_OK == check_routes(s,c->nch,l->nch)) for(i=0;i<s->nr;i++) @@ -260,7 +258,7 @@ static af_data_t* play(struct af_instance_s* af, af_data_t* data) // Set output data c->audio = l->audio; - c->len = (c->len*af->mul.n)/af->mul.d; + c->len = c->len / c->nch * l->nch; c->nch = l->nch; return c; @@ -271,8 +269,7 @@ static int af_open(af_instance_t* af){ af->control=control; af->uninit=uninit; af->play=play; - af->mul.n=1; - af->mul.d=1; + af->mul=1; af->data=calloc(1,sizeof(af_data_t)); af->setup=calloc(1,sizeof(af_channels_t)); if((af->data == NULL) || (af->setup == NULL)) |