comparison libao2/audio_out.c @ 13632:b633ce0aa5c5

fixed small memleaks
author reimar
date Wed, 13 Oct 2004 16:22:59 +0000
parents ed7e91827ead
children 66637fa67531
comparison
equal deleted inserted replaced
13631:e6f34ebeb40d 13632:b633ce0aa5c5
135 ao_functions_t* init_best_audio_out(char** ao_list,int use_plugin,int rate,int channels,int format,int flags){ 135 ao_functions_t* init_best_audio_out(char** ao_list,int use_plugin,int rate,int channels,int format,int flags){
136 int i; 136 int i;
137 // first try the preferred drivers, with their optional subdevice param: 137 // first try the preferred drivers, with their optional subdevice param:
138 if(ao_list && ao_list[0]) 138 if(ao_list && ao_list[0])
139 while(ao_list[0][0]){ 139 while(ao_list[0][0]){
140 char* ao=strdup(ao_list[0]); 140 char* ao=ao_list[0];
141 int ao_len;
141 if (strncmp(ao, "alsa9", 5) == 0 || strncmp(ao, "alsa1x", 6) == 0) { 142 if (strncmp(ao, "alsa9", 5) == 0 || strncmp(ao, "alsa1x", 6) == 0) {
142 mp_msg(MSGT_AO, MSGL_FATAL, MSGTR_AO_ALSA9_1x_Removed); 143 mp_msg(MSGT_AO, MSGL_FATAL, MSGTR_AO_ALSA9_1x_Removed);
143 free(ao);
144 exit_player(NULL); 144 exit_player(NULL);
145 }
146 if (ao_subdevice) {
147 free(ao_subdevice);
148 ao_subdevice = NULL;
145 } 149 }
146 ao_subdevice=strchr(ao,':'); 150 ao_subdevice=strchr(ao,':');
147 if(ao_subdevice){ 151 if(ao_subdevice){
148 ao_subdevice[0]=0; 152 ao_len = ao_subdevice - ao;
149 ++ao_subdevice; 153 ao_subdevice = strdup(&ao[ao_len + 1]);
150 } 154 }
155 else
156 ao_len = strlen(ao);
151 for(i=0;audio_out_drivers[i];i++){ 157 for(i=0;audio_out_drivers[i];i++){
152 ao_functions_t* audio_out=audio_out_drivers[i]; 158 ao_functions_t* audio_out=audio_out_drivers[i];
153 if(!strcmp(audio_out->info->short_name,ao)){ 159 if(!strncmp(audio_out->info->short_name,ao,ao_len)){
154 // name matches, try it 160 // name matches, try it
155 if(use_plugin){ 161 if(use_plugin){
156 audio_out_plugin.control(AOCONTROL_SET_PLUGIN_DRIVER,audio_out); 162 audio_out_plugin.control(AOCONTROL_SET_PLUGIN_DRIVER,audio_out);
157 audio_out=&audio_out_plugin; 163 audio_out=&audio_out_plugin;
158 } 164 }
159 if(audio_out->init(rate,channels,format,flags)) 165 if(audio_out->init(rate,channels,format,flags))
160 return audio_out; // success! 166 return audio_out; // success!
161 } 167 }
162 } 168 }
163 // continue... 169 // continue...
164 free(ao);
165 ++ao_list; 170 ++ao_list;
166 if(!(ao_list[0])) return NULL; // do NOT fallback to others 171 if(!(ao_list[0])) return NULL; // do NOT fallback to others
167 } 172 }
173 if (ao_subdevice) {
174 free(ao_subdevice);
175 ao_subdevice = NULL;
176 }
168 // now try the rest... 177 // now try the rest...
169 ao_subdevice=NULL;
170 for(i=0;audio_out_drivers[i];i++){ 178 for(i=0;audio_out_drivers[i];i++){
171 ao_functions_t* audio_out=audio_out_drivers[i]; 179 ao_functions_t* audio_out=audio_out_drivers[i];
172 if(use_plugin){ 180 if(use_plugin){
173 audio_out_plugin.control(AOCONTROL_SET_PLUGIN_DRIVER,audio_out); 181 audio_out_plugin.control(AOCONTROL_SET_PLUGIN_DRIVER,audio_out);
174 audio_out=&audio_out_plugin; 182 audio_out=&audio_out_plugin;