summaryrefslogtreecommitdiffstats
path: root/libaf/af_resample.c
diff options
context:
space:
mode:
authoranders <anders@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-31 11:06:19 +0000
committeranders <anders@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-31 11:06:19 +0000
commit437aa679375c2a9b0c5a55dcc2d169ab29a55178 (patch)
tree107130864237ff5cc64ed44c079400346cee6180 /libaf/af_resample.c
parent95760a746db5aceb0274a140eafc83b3294bea5c (diff)
downloadmpv-437aa679375c2a9b0c5a55dcc2d169ab29a55178.tar.bz2
mpv-437aa679375c2a9b0c5a55dcc2d169ab29a55178.tar.xz
Adding commandline options for filters and fixing stupid bug in cfg
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7999 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libaf/af_resample.c')
-rw-r--r--libaf/af_resample.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/libaf/af_resample.c b/libaf/af_resample.c
index f27e845100..fb5e46c14a 100644
--- a/libaf/af_resample.c
+++ b/libaf/af_resample.c
@@ -69,6 +69,8 @@ typedef struct af_resample_s
uint32_t i; // Number of new samples to put in x queue
uint32_t dn; // Down sampling factor
uint32_t up; // Up sampling factor
+ int sloppy; // Enable sloppy resampling to reduce memory usage
+ int fast; // Enable linear interpolation instead of filtering
} af_resample_t;
// Euclids algorithm for calculating Greatest Common Divisor GCD(a,b)
@@ -222,6 +224,19 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
// Calculate up and down sampling factors
d=gcd(af->data->rate,n->rate);
+ // If sloppy resampling is enabled limit the upsampling factor
+ if(s->sloppy && (af->data->rate/d > 5000)){
+ int up=af->data->rate/2;
+ int dn=n->rate/2;
+ int m=2;
+ while(af->data->rate/(d*m) > 5000){
+ d=gcd(up,dn);
+ up/=2; dn/=2; m*=2;
+ }
+ d*=m;
+ }
+ printf("\n%i %i %i\n",d,af->data->rate/d,n->rate/d);
+
// Check if the the design needs to be redone
if(s->up != af->data->rate/d || s->dn != n->rate/d){
float* w;
@@ -264,6 +279,12 @@ static int control(struct af_instance_s* af, int cmd, void* arg)
af->mul.d = s->dn;
return rv;
}
+ case AF_CONTROL_COMMAND_LINE:{
+ af_resample_t* s = (af_resample_t*)af->setup;
+ int rate=0;
+ sscanf((char*)arg,"%i:%i:%i",&rate,&(s->sloppy), &(s->fast));
+ return af->control(af,AF_CONTROL_RESAMPLE,&rate);
+ }
case AF_CONTROL_RESAMPLE:
// Reinit must be called after this function has been called