Update FFmpeg and libass
[mplayer/kovensky.git] / libaf / af_sweep.c
blobe1890c6b3bb5618032801cc28c69b42247bca6d4
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 if(af->data)
64 free(af->data);
65 if(af->setup){
66 af_sweept *s = af->setup;
67 free(s);
71 // Filter data through filter
72 static af_data_t* play(struct af_instance_s* af, af_data_t* data)
74 af_sweept *s = af->setup;
75 int i, j;
76 int16_t *in = (int16_t*)data->audio;
77 int chans = data->nch;
78 int in_len = data->len/(2*chans);
80 for(i=0; i<in_len; i++){
81 for(j=0; j<chans; j++)
82 in[i*chans+j]= 32000*sin(s->x*s->x);
83 s->x += s->delta;
84 if(2*s->x*s->delta >= 3.141592) s->x=0;
87 return data;
90 static int af_open(af_instance_t* af){
91 af->control=control;
92 af->uninit=uninit;
93 af->play=play;
94 af->mul=1;
95 af->data=calloc(1,sizeof(af_data_t));
96 af->setup=calloc(1,sizeof(af_sweept));
97 return AF_OK;
100 af_info_t af_info_sweep = {
101 "sine sweep",
102 "sweep",
103 "Michael Niedermayer",
105 AF_FLAGS_REENTRANT,
106 af_open