audio: add af_lavrresample, remove old resampling filters
[mplayer.git] / libaf / af_sweep.c
blob3280125be13b7ddf376e3831b6654ee4a41d098f
1 /*
2 * Copyright (c) 2004 Michael Niedermayer <michaelni@gmx.at>
4 * This file is part of MPlayer.
6 * MPlayer is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * MPlayer is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <inttypes.h>
25 #include <math.h>
27 #include "config.h"
28 #include "af.h"
30 typedef struct af_sweep_s{
31 double x;
32 double delta;
33 }af_sweept;
36 // Initialization and runtime control
37 static int control(struct af_instance_s* af, int cmd, void* arg)
39 af_sweept* s = (af_sweept*)af->setup;
40 af_data_t *data= (af_data_t*)arg;
42 switch(cmd){
43 case AF_CONTROL_REINIT:
44 af->data->nch = data->nch;
45 af->data->format = AF_FORMAT_S16_NE;
46 af->data->bps = 2;
47 af->data->rate = data->rate;
49 return AF_OK;
50 case AF_CONTROL_COMMAND_LINE:
51 sscanf((char*)arg,"%lf", &s->delta);
52 return AF_OK;
53 /* case AF_CONTROL_RESAMPLE_RATE | AF_CONTROL_SET:
54 af->data->rate = *(int*)arg;
55 return AF_OK;*/
57 return AF_UNKNOWN;
60 // Deallocate memory
61 static void uninit(struct af_instance_s* af)
63 free(af->data);
64 free(af->setup);
67 // Filter data through filter
68 static af_data_t* play(struct af_instance_s* af, af_data_t* data)
70 af_sweept *s = af->setup;
71 int i, j;
72 int16_t *in = (int16_t*)data->audio;
73 int chans = data->nch;
74 int in_len = data->len/(2*chans);
76 for(i=0; i<in_len; i++){
77 for(j=0; j<chans; j++)
78 in[i*chans+j]= 32000*sin(s->x*s->x);
79 s->x += s->delta;
80 if(2*s->x*s->delta >= 3.141592) s->x=0;
83 return data;
86 static int af_open(af_instance_t* af){
87 af->control=control;
88 af->uninit=uninit;
89 af->play=play;
90 af->mul=1;
91 af->data=calloc(1,sizeof(af_data_t));
92 af->setup=calloc(1,sizeof(af_sweept));
93 return AF_OK;
96 af_info_t af_info_sweep = {
97 "sine sweep",
98 "sweep",
99 "Michael Niedermayer",
101 AF_FLAGS_REENTRANT,
102 af_open