Mercurial > mplayer.hg
annotate libaf/af_karaoke.c @ 34338:4a507d3a039a
Add highly experimental support for OpenGL ES.
It only supports EGL/X11, uses/supports only ES v1,
will crash if certain features are used, compiling
without desktop GL installed is not tested and
possibly more caveats.
However it is close enough to be able to display
a video on a BeagleBoard via OpenGL.
Performance could not be tested properly since I do
not have a display that is compatible with the
BeagleBoard output...
author | reimar |
---|---|
date | Sat, 10 Dec 2011 20:55:31 +0000 |
parents | 8fa2f43cb760 |
children |
rev | line source |
---|---|
18470 | 1 /* |
28229
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
2 * simple voice removal filter |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
3 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
4 * copyright (c) 2006 Reynaldo H. Verdejo Pinochet |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
5 * Based on code by Alex Beregszaszi for his 'center' filter. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
6 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
7 * This file is part of MPlayer. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
8 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
9 * MPlayer is free software; you can redistribute it and/or modify |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
10 * it under the terms of the GNU General Public License as published by |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
11 * the Free Software Foundation; either version 2 of the License, or |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
12 * (at your option) any later version. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
13 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
14 * MPlayer is distributed in the hope that it will be useful, |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
17 * GNU General Public License for more details. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
18 * |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
19 * You should have received a copy of the GNU General Public License along |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
72d0b1444141
Replace informal license notices by standard license header
diego
parents:
24888
diff
changeset
|
22 */ |
18470 | 23 |
24 #include <stdio.h> | |
25 #include <stdlib.h> | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
26 #include <string.h> |
18470 | 27 |
28 #include "af.h" | |
29 | |
30 // Data for specific instances of this filter | |
31 | |
32 // Initialization and runtime control | |
33 static int control(struct af_instance_s* af, int cmd, void* arg) | |
34 { | |
35 switch(cmd){ | |
36 case AF_CONTROL_REINIT: | |
37 af->data->rate = ((af_data_t*)arg)->rate; | |
38 af->data->nch = ((af_data_t*)arg)->nch; | |
39 af->data->format= AF_FORMAT_FLOAT_NE; | |
19199 | 40 af->data->bps = 4; |
18470 | 41 return af_test_output(af,(af_data_t*)arg); |
42 } | |
43 return AF_UNKNOWN; | |
44 } | |
45 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
46 // Deallocate memory |
18470 | 47 static void uninit(struct af_instance_s* af) |
48 { | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
29263
diff
changeset
|
49 free(af->data); |
18470 | 50 } |
51 | |
52 // Filter data through filter | |
53 static af_data_t* play(struct af_instance_s* af, af_data_t* data) | |
54 { | |
55 af_data_t* c = data; // Current working data | |
56 float* a = c->audio; // Audio data | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
57 int len = c->len/4; // Number of samples in current audio block |
18470 | 58 int nch = c->nch; // Number of channels |
59 register int i; | |
60 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
61 /* |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
62 FIXME1 add a low band pass filter to avoid suppressing |
18470 | 63 centered bass/drums |
18589 | 64 FIXME2 better calculated* attenuation factor |
18470 | 65 */ |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
66 |
18470 | 67 for(i=0;i<len;i+=nch) |
68 { | |
69 a[i] = (a[i] - a[i+1]) * 0.7; | |
70 a[i+1]=a[i]; | |
71 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
72 |
18470 | 73 return c; |
74 } | |
75 | |
76 // Allocate memory and set function pointers | |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
19199
diff
changeset
|
77 static int af_open(af_instance_t* af){ |
18470 | 78 af->control = control; |
79 af->uninit = uninit; | |
80 af->play = play; | |
24888 | 81 af->mul = 1; |
18470 | 82 af->data = calloc(1,sizeof(af_data_t)); |
83 | |
84 if(af->data == NULL) | |
85 return AF_ERROR; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28229
diff
changeset
|
86 |
18470 | 87 return AF_OK; |
88 } | |
89 | |
90 // Description of this filter | |
91 af_info_t af_info_karaoke = { | |
92 "Simple karaoke/voice-removal audio filter", | |
93 "karaoke", | |
94 "Reynaldo H. Verdejo Pinochet", | |
95 "", | |
96 AF_FLAGS_NOT_REENTRANT, | |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
19199
diff
changeset
|
97 af_open |
18470 | 98 }; |