Mercurial > mplayer.hg
annotate libaf/af_karaoke.c @ 33500:c36fec5ba5b6
Always choose AV_SAMPLE_FMT_S16 then the encoder supports it.
author | reimar |
---|---|
date | Sat, 11 Jun 2011 23:36:52 +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 }; |