Mercurial > mplayer.hg
changeset 6319:76baa05a63ab
disables those plugins that can't handle the audio format.
it also fixes a bug(and i'm pretty sure this _is_ a bug) where, when playing
multiple files, after the first file only the first audio plugin is used.
patch by Christian Ohm <chr.ohm@gmx.net>
author | arpi |
---|---|
date | Fri, 07 Jun 2002 00:30:32 +0000 |
parents | d14ae909f855 |
children | 12136df07dbd |
files | libao2/ao_plugin.c |
diffstat | 1 files changed, 24 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libao2/ao_plugin.c Thu Jun 06 22:58:18 2002 +0000 +++ b/libao2/ao_plugin.c Fri Jun 07 00:30:32 2002 +0000 @@ -116,13 +116,21 @@ // open & setup audio device and plugins // return: 1=success 0=fail static int init(int rate,int channels,int format,int flags){ + int use_plugin[NPL]; + int x,npl,unused=0; int ok=1; + char *config; // Create list of plugins from cfg option int i=0; if(ao_plugin_cfg.plugin_list){ - if(!add_plugin(i,ao_plugin_cfg.plugin_list)) + config = malloc(strlen(ao_plugin_cfg.plugin_list)); + if(!config) return 0; + if(!strcpy(config, ao_plugin_cfg.plugin_list) || !add_plugin(i,config)){ + free(config); return 0; + } + free(config); } /* Set input parameters and itterate through plugins each plugin @@ -139,11 +147,21 @@ ao_plugin_data.sz_fix=0; ao_plugin_data.delay_mult=1; ao_plugin_data.delay_fix=0; - i=0; - while(plugin(i)&&ok) - ok=plugin(i++)->init(); - - if(!ok) return 0; + + for(i=0;i<NPL,plugin(i);i++){ + use_plugin[i]=plugin(i)->init(); + if(!use_plugin[i]) plugin(i)->uninit(); + } + npl=i; + for(i=0;i<npl,plugin(i);i++) + if(!use_plugin[i+unused]){ + unused++; + for(x=i;x<npl,plugin(x+1);x++) plugin(x)=plugin(x+1); + plugin(x)=NULL; + npl--; + i--; + } + i=npl; // Calculate bps ao_plugin_local_data.bps=(float)(ao_plugin_data.rate *