changeset 7993:ea0680d87f3f

Changing the behavour of the commandline parameter -af to conform with -vop. Adding new commanline parameter -af-adv for advanced af options. Adding changes to volume control to support commandline parameters.
author anders
date Thu, 31 Oct 2002 08:03:51 +0000
parents 39d486e8836d
children 458992506962
files cfg-mplayer.h libaf/af.c libaf/af_volume.c libaf/control.h
diffstat 4 files changed, 51 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/cfg-mplayer.h	Thu Oct 31 05:07:43 2002 +0000
+++ b/cfg-mplayer.h	Thu Oct 31 08:03:51 2002 +0000
@@ -181,7 +181,8 @@
 	{"fixed-vo", &fixed_vo, CONF_TYPE_FLAG, 0, 0, 1, NULL},
 
 	{"aop", ao_plugin_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
-	{"af", audio_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
+	{"af-adv", audio_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL},
+	{"af", &af_cfg.list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
 	{"dsp", "Use -ao oss:dsp_path!\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL},
         {"mixer", &mixer_device, CONF_TYPE_STRING, 0, 0, 0, NULL},
 	{"master", "Option -master has been removed, use -aop list=volume instead.\n", CONF_TYPE_PRINT, 0, 0, 0, NULL},
--- a/libaf/af.c	Thu Oct 31 05:07:43 2002 +0000
+++ b/libaf/af.c	Thu Oct 31 08:03:51 2002 +0000
@@ -57,9 +57,12 @@
   return NULL;
 }
 
-// Function for creating a new filter of type name
+/*/ Function for creating a new filter of type name. The name may
+  contain the commandline parameters for the filter */
 af_instance_t* af_create(af_stream_t* s, char* name)
 {
+  char* cmdline = name;
+  char* delim   = "=";
   // Allocate space for the new filter and reset all pointers
   af_instance_t* new=malloc(sizeof(af_instance_t));
   if(!new){
@@ -68,11 +71,15 @@
   }  
   memset(new,0,sizeof(af_instance_t));
 
+  // Check for commandline parameters
+  strsep(&cmdline, delim);
+
   // Find filter from name
   if(NULL == (new->info=af_find(name)))
     return NULL;
 
-  // Make sure that the filter is not already in the list if it is non-reentrant
+  /* Make sure that the filter is not already in the list if it is
+     non-reentrant */
   if(new->info->flags & AF_FLAGS_NOT_REENTRANT){
     if(af_get(s,name)){
       mp_msg(MSGT_AFILTER,MSGL_ERR,"There can only be one instance of the filter '%s' in each stream\n",name);  
@@ -80,14 +87,22 @@
       return NULL;
     }
   }
-
+  
+  mp_msg(MSGT_AFILTER,MSGL_V,"Adding filter %s \n",name);
+  
   // Initialize the new filter
   if(AF_OK == new->info->open(new) && 
-     AF_ERROR < new->control(new,AF_CONTROL_POST_CREATE,&s->cfg))
-    return new;
+     AF_ERROR < new->control(new,AF_CONTROL_POST_CREATE,&s->cfg)){
+    if(cmdline){
+      if(AF_ERROR<new->control(new,AF_CONTROL_COMMAND_LINE,cmdline))
+	return new;
+    }
+    else
+      return new; 
+  }
   
   free(new);
-  mp_msg(MSGT_AFILTER,MSGL_ERR,"Couldn't create audio filter '%s'\n",name);  
+  mp_msg(MSGT_AFILTER,MSGL_ERR,"Couldn't create or open audio filter '%s'\n",name);  
   return NULL;
 }
 
--- a/libaf/af_volume.c	Thu Oct 31 05:07:43 2002 +0000
+++ b/libaf/af_volume.c	Thu Oct 31 08:03:51 2002 +0000
@@ -1,7 +1,7 @@
 /* This audio filter changes the volume of the sound, and can be used
    when the mixer doesn't support the PCM channel. It can handel
    between 1 and 6 channels. The volume can be adjusted between -60dB
-   to +10dB and is set on a per channels basis. The volume can be
+   to +20dB and is set on a per channels basis. The volume can be
    written ad read by AF_CONTROL_VOLUME_SET and AF_CONTROL_VOLUME_GET
    respectivly.
 
@@ -32,7 +32,7 @@
 #define MIN_S16 -32650
 #define MAX_S16  32650
 
-#define MAX_VOL +10.0
+#define MAX_VOL +20.0
 #define MIN_VOL	-60.0
 
 // Number of channels
@@ -55,7 +55,7 @@
 
 /* Convert to gain value from dB. Returns AF_OK if of and AF_ERROR if
    fail */
-inline int from_dB(double* in, double* out) 
+inline int from_dB(double* in, double* out, double k) 
 {
   int i = 0; 
   // Sanity check
@@ -63,13 +63,13 @@
     return AF_ERROR;
 
   for(i=0;i<NCH;i++) 
-    out[i]=pow(10.0,clamp(in[i],MIN_VOL,MAX_VOL)/10.0);
+    out[i]=pow(10.0,clamp(in[i],MIN_VOL,MAX_VOL)/k);
   return AF_OK;
 }
 
 /* Convert from gain value to dB. Returns AF_OK if of and AF_ERROR if
    fail */
-inline int to_dB(double* in, double* out) 
+inline int to_dB(double* in, double* out, double k) 
 {
   int i = 0; 
   // Sanity check
@@ -77,7 +77,7 @@
     return AF_ERROR;
 
   for(i=0;i<NCH;i++) 
-    out[i]=10.0*log10(clamp(in[i],MIN_VOL,MAX_VOL));
+    out[i]=k*log10(clamp(in[i],MIN_VOL,MAX_VOL));
   return AF_OK;
 }
 
@@ -104,14 +104,21 @@
        af->data->bps != ((af_data_t*)arg)->bps)
       return AF_FALSE;
     return AF_OK;
+  case AF_CONTROL_COMMAND_LINE:{
+    double vol[6]={-10.0,-10.0,-10.0,-10.0,-10.0,-10.0};
+    sscanf((char*)arg,"%lf:%lf:%lf:%lf:%lf:%lf:%i:%i:%i",
+	   &vol[0], &vol[1], &vol[2], &vol[3], &vol[4], &vol[5],
+	   &(s->softclip), &(s->probe), &(s->onoff));
+    return from_dB(vol,s->volume,20.0);
+  }
   case AF_CONTROL_VOLUME_SET:
-    return from_dB((double*)arg,s->volume);
+    return from_dB((double*)arg,s->volume,20.0);
   case AF_CONTROL_VOLUME_GET:
-    return to_dB(s->volume,(double*)arg);
+    return to_dB(s->volume,(double*)arg,20.0);
   case AF_CONTROL_VOLUME_PROBE_GET:
-    return to_dB(s->power,(double*)arg);
+    return to_dB(s->power,(double*)arg,10.0);
   case AF_CONTROL_VOLUME_PROBE_GET_MAX:
-    return to_dB(s->maxpower,(double*)arg);
+    return to_dB(s->maxpower,(double*)arg,10.0);
   case AF_CONTROL_VOLUME_SOFTCLIP:
     s->softclip = (int)arg;
     return AF_OK;
@@ -203,10 +210,13 @@
   af->setup=calloc(1,sizeof(af_volume_t));
   if(af->data == NULL || af->setup == NULL)
     return AF_ERROR;
-  // Enable volume control and set initial volume to 0.1
+  /* Enable volume control and set initial volume to 0.1 this is a
+     safety mesure to ensure that the user doesn't blow his
+     speakers. If the user isn't happy with this he can use the
+     commandline parameters to set the initial volume */
   ((af_volume_t*)af->setup)->onoff = 1;
   for(i=0;i<NCH;i++)
-    ((af_volume_t*)af->setup)->volume[i]=1.0; //0.1;
+    ((af_volume_t*)af->setup)->volume[i]=0.1;
 
   return AF_OK;
 }
--- a/libaf/control.h	Thu Oct 31 05:07:43 2002 +0000
+++ b/libaf/control.h	Thu Oct 31 08:03:51 2002 +0000
@@ -29,12 +29,17 @@
 
 /* Called just after creation with the af_cfg for the stream in which
    the filter resides as input parameter this call can be used by the
-   filter to initialize itself using commandline parameters */
+   filter to initialize itself */
 #define AF_CONTROL_POST_CREATE 		1 + AF_CONTROL_OPTIONAL_BASE
 
 // Called just before destruction of a filter
 #define AF_CONTROL_PRE_DESTROY 		2 + AF_CONTROL_OPTIONAL_BASE
 
+/* Commandline parameters. If there were any commandline parameters
+   for this specific filter, they will be given as a char* in the
+   argument */
+#define AF_CONTROL_COMMAND_LINE		3 + AF_CONTROL_OPTIONAL_BASE
+
 
 // FILTER SPECIFIC CALLS