Mercurial > mplayer.hg
changeset 18611:1c2f694d5232
Rename sinesupress to sinesuppress, including af_sinesupress.c file rename.
author | corey |
---|---|
date | Wed, 07 Jun 2006 00:02:51 +0000 |
parents | e0df832235c6 |
children | 3e5c6886c11c |
files | ChangeLog DOCS/man/cs/mplayer.1 DOCS/man/de/mplayer.1 DOCS/man/en/mplayer.1 DOCS/man/fr/mplayer.1 DOCS/man/hu/mplayer.1 libaf/Makefile libaf/af.c libaf/af_sinesuppress.c libaf/control.h |
diffstat | 10 files changed, 188 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Tue Jun 06 23:42:33 2006 +0000 +++ b/ChangeLog Wed Jun 07 00:02:51 2006 +0000 @@ -160,7 +160,7 @@ * screenshot filter * -af pan command line fix, now outputs the right number of channels and accepts values < 0 or > 1. Channel order had to be changed. - * -af sinesupress to remove a sine at a certain frequency + * -af sinesuppress to remove a sine at a certain frequency * negative stride support in swscale * big-endian and AltiVec fixes and performance improvements for swscaler, color conversions and post-processing
--- a/DOCS/man/cs/mplayer.1 Tue Jun 06 23:42:33 2006 +0000 +++ b/DOCS/man/cs/mplayer.1 Wed Jun 07 00:02:51 2006 +0000 @@ -4094,7 +4094,7 @@ .PD 1 . .TP -.B sinesupress[=frekv:zpoždění] +.B sinesuppress[=frekv:zpoždění] Odstaní sinusovku zadaného kmitočtu. Vhodné pro odstranění 50/60Hz rušení na nekvalitním audio zařízení. Pravděpodobně pracuje pouze na mono vstupu.
--- a/DOCS/man/de/mplayer.1 Tue Jun 06 23:42:33 2006 +0000 +++ b/DOCS/man/de/mplayer.1 Wed Jun 07 00:02:51 2006 +0000 @@ -4319,7 +4319,7 @@ .PD 1 . .TP -.B sinesupress[=freq:delay] +.B sinesuppress[=freq:delay] Entfernt einen Sinus an der angegebenen Frequenz. Nützlich, um bei Audiogeräten niedriger Qualität das 50/60hz-Rauschen loszuwerden.
--- a/DOCS/man/en/mplayer.1 Tue Jun 06 23:42:33 2006 +0000 +++ b/DOCS/man/en/mplayer.1 Wed Jun 07 00:02:51 2006 +0000 @@ -4108,7 +4108,7 @@ .PD 1 . .TP -.B sinesupress[=freq:delay] +.B sinesuppress[=freq:delay] Remove a sine at the specified frequency. Useful to get rid of the 50/60hz noise on low quality audio equipment. It probably only works on mono input.
--- a/DOCS/man/fr/mplayer.1 Tue Jun 06 23:42:33 2006 +0000 +++ b/DOCS/man/fr/mplayer.1 Wed Jun 07 00:02:51 2006 +0000 @@ -4361,7 +4361,7 @@ .PD 1 . .TP -.B sinesupress[=freq:decay] +.B sinesuppress[=freq:decay] Enlčve un sinosoďde ŕ la fréquence spécifiée. Utile pour supprimer le bruit ŕ 50/60hz que l'on trouve dans les équipements audios bon marchés.
--- a/DOCS/man/hu/mplayer.1 Tue Jun 06 23:42:33 2006 +0000 +++ b/DOCS/man/hu/mplayer.1 Wed Jun 07 00:02:51 2006 +0000 @@ -4131,7 +4131,7 @@ .PD 1 . .TP -.B sinesupress[=frek:késleltetés] +.B sinesuppress[=frek:késleltetés] Eltávolít egy szinuszgörbét a megadott frekvencián. Hasznos az 50/60 Hz-es zaj eltávolításához gyenge minőségű audió berendezésnél. Valószínűleg csak mono bemeneten működik.
--- a/libaf/Makefile Tue Jun 06 23:42:33 2006 +0000 +++ b/libaf/Makefile Wed Jun 07 00:02:51 2006 +0000 @@ -17,7 +17,7 @@ af_karaoke.c \ af_pan.c \ af_resample.c \ - af_sinesupress.c \ + af_sinesuppress.c \ af_sub.c \ af_surround.c \ af_sweep.c \
--- a/libaf/af.c Tue Jun 06 23:42:33 2006 +0000 +++ b/libaf/af.c Wed Jun 07 00:02:51 2006 +0000 @@ -29,7 +29,7 @@ extern af_info_t af_info_hrtf; extern af_info_t af_info_ladspa; extern af_info_t af_info_center; -extern af_info_t af_info_sinesupress; +extern af_info_t af_info_sinesuppress; extern af_info_t af_info_karaoke; static af_info_t* filter_list[]={ @@ -59,7 +59,7 @@ &af_info_ladspa, #endif &af_info_center, - &af_info_sinesupress, + &af_info_sinesuppress, &af_info_karaoke, NULL };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libaf/af_sinesuppress.c Wed Jun 07 00:02:51 2006 +0000 @@ -0,0 +1,178 @@ +/*============================================================================= +// +// This software has been released under the terms of the GNU General Public +// license. See http://www.gnu.org/copyleft/gpl.html for details. +// +// Copyright 2006 Michael Niedermayer +// Copyright 2004 Alex Beregszaszi & Pierre Lombard (original af_extrastereo.c upon which this is based) +// +//============================================================================= +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <unistd.h> +#include <inttypes.h> +#include <math.h> +#include <limits.h> + +#include "af.h" + +// Data for specific instances of this filter +typedef struct af_sinesuppress_s +{ + double freq; + double decay; + double real; + double imag; + double ref; + double pos; +}af_sinesuppress_t; + +static af_data_t* play_s16(struct af_instance_s* af, af_data_t* data); +static af_data_t* play_float(struct af_instance_s* af, af_data_t* data); + +// Initialization and runtime control +static int control(struct af_instance_s* af, int cmd, void* arg) +{ + af_sinesuppress_t* s = (af_sinesuppress_t*)af->setup; + + switch(cmd){ + case AF_CONTROL_REINIT:{ + // Sanity check + if(!arg) return AF_ERROR; + + af->data->rate = ((af_data_t*)arg)->rate; + af->data->nch = 1; +#if 0 + if (((af_data_t*)arg)->format == AF_FORMAT_FLOAT_NE) + { + af->data->format = AF_FORMAT_FLOAT_NE; + af->data->bps = 4; + af->play = play_float; + }// else +#endif + { + af->data->format = AF_FORMAT_S16_NE; + af->data->bps = 2; + af->play = play_s16; + } + + return af_test_output(af,(af_data_t*)arg); + } + case AF_CONTROL_COMMAND_LINE:{ + float f1,f2; + sscanf((char*)arg,"%f:%f", &f1,&f2); + s->freq = f1; + s->decay = f2; + return AF_OK; + } + case AF_CONTROL_SS_FREQ | AF_CONTROL_SET: + s->freq = *(float*)arg; + return AF_OK; + case AF_CONTROL_SS_FREQ | AF_CONTROL_GET: + *(float*)arg = s->freq; + return AF_OK; + case AF_CONTROL_SS_DECAY | AF_CONTROL_SET: + s->decay = *(float*)arg; + return AF_OK; + case AF_CONTROL_SS_DECAY | AF_CONTROL_GET: + *(float*)arg = s->decay; + return AF_OK; + } + return AF_UNKNOWN; +} + +// Deallocate memory +static void uninit(struct af_instance_s* af) +{ + if(af->data) + free(af->data); + if(af->setup) + free(af->setup); +} + +// Filter data through filter +static af_data_t* play_s16(struct af_instance_s* af, af_data_t* data) +{ + af_sinesuppress_t *s = af->setup; + register int i = 0; + int16_t *a = (int16_t*)data->audio; // Audio data + int len = data->len/2; // Number of samples + int avg, l, r; + + for (i = 0; i < len; i++) + { + double co= cos(s->pos); + double si= sin(s->pos); + + s->real += co * a[i]; + s->imag += si * a[i]; + s->ref += co * co; + + a[i] -= (s->real * co + s->imag * si) / s->ref; + + s->real -= s->real * s->decay; + s->imag -= s->imag * s->decay; + s->ref -= s->ref * s->decay; + + s->pos += 2 * M_PI * s->freq / data->rate; + } + + af_msg(AF_MSG_VERBOSE,"[sinesuppress] f:%8.2f: amp:%8.2f\n", s->freq, sqrt(s->real*s->real + s->imag*s->imag) / s->ref); + + return data; +} + +#if 0 +static af_data_t* play_float(struct af_instance_s* af, af_data_t* data) +{ + af_sinesuppress_t *s = af->setup; + register int i = 0; + float *a = (float*)data->audio; // Audio data + int len = data->len/4; // Number of samples + float avg, l, r; + + for (i = 0; i < len; i+=2) + { + avg = (a[i] + a[i + 1]) / 2; + +/* l = avg + (s->mul * (a[i] - avg)); + r = avg + (s->mul * (a[i + 1] - avg));*/ + + a[i] = af_softclip(l); + a[i + 1] = af_softclip(r); + } + + return data; +} +#endif + +// Allocate memory and set function pointers +static int open(af_instance_t* af){ + af->control=control; + af->uninit=uninit; + af->play=play_s16; + af->mul.n=1; + af->mul.d=1; + af->data=calloc(1,sizeof(af_data_t)); + af->setup=calloc(1,sizeof(af_sinesuppress_t)); + if(af->data == NULL || af->setup == NULL) + return AF_ERROR; + + ((af_sinesuppress_t*)af->setup)->freq = 50.0; + ((af_sinesuppress_t*)af->setup)->decay = 0.0001; + return AF_OK; +} + +// Description of this filter +af_info_t af_info_sinesuppress = { + "Sine Suppress", + "sinesuppress", + "Michael Niedermayer", + "", + 0, + open +};
--- a/libaf/control.h Tue Jun 06 23:42:33 2006 +0000 +++ b/libaf/control.h Wed Jun 07 00:02:51 2006 +0000 @@ -225,7 +225,7 @@ #define AF_CONTROL_CENTER_CH 0x00002200 | AF_CONTROL_FILTER_SPECIFIC -// SineSupress +// SineSuppress #define AF_CONTROL_SS_FREQ 0x00002300 | AF_CONTROL_FILTER_SPECIFIC #define AF_CONTROL_SS_DECAY 0x00002400 | AF_CONTROL_FILTER_SPECIFIC