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