Mercurial > mplayer.hg
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; |