summaryrefslogtreecommitdiffstats
path: root/libaf/af_channels.c
diff options
context:
space:
mode:
authoruau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-01 06:52:01 +0000
committeruau <uau@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-11-01 06:52:01 +0000
commit7deec05ea0d14dd950715f232b9e7cb7183dd333 (patch)
treea669500520b58be3ba988f7a3e7e0b7d802e0313 /libaf/af_channels.c
parentc6824f577ee5da01a7bb0b787d0253da925c2c0f (diff)
downloadmpv-7deec05ea0d14dd950715f232b9e7cb7183dd333.tar.bz2
mpv-7deec05ea0d14dd950715f232b9e7cb7183dd333.tar.xz
libaf: change filter input/output ratio calculations
Change the audio filters to use a double instead of rationals for the ratio of output to input size. The rationals could overflow when calculating the overall ratio of a filter chain and gave no real advantage compared to doubles. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24916 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libaf/af_channels.c')
-rw-r--r--libaf/af_channels.c11
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))