@@ -265,7 +265,29 @@ void init_demod(demod_params_t* params, Signal* signal, int device_start, int de
265265#endif /* WITH_BCM_VC */
266266}
267267
268- void init_output (output_params_t * params, int device_start, int device_end, int mixer_start, int mixer_end) {
268+ bool init_output (channel_t * channel, output_t * output) {
269+ if (output->has_mp3_output ) {
270+ output->lame = airlame_init (channel->mode , channel->highpass , channel->lowpass );
271+ output->lamebuf = (unsigned char *)malloc (sizeof (unsigned char ) * LAMEBUF_SIZE);
272+ }
273+ if (output->type == O_ICECAST) {
274+ shout_setup ((icecast_data*)(output->data ), channel->mode );
275+ } else if (output->type == O_UDP_STREAM) {
276+ udp_stream_data* sdata = (udp_stream_data*)(output->data );
277+ if (!udp_stream_init (sdata, channel->mode , (size_t )WAVE_BATCH * sizeof (float ))) {
278+ return false ;
279+ }
280+ #ifdef WITH_PULSEAUDIO
281+ } else if (output->type == O_PULSE) {
282+ pulse_init ();
283+ pulse_setup ((pulse_data*)(output->data ), channel->mode );
284+ #endif /* WITH_PULSEAUDIO */
285+ }
286+
287+ return true ;
288+ }
289+
290+ void init_output_params (output_params_t * params, int device_start, int device_end, int mixer_start, int mixer_end) {
269291 assert (params != NULL );
270292
271293 params->mp3_signal = new Signal;
@@ -949,19 +971,9 @@ int main(int argc, char* argv[]) {
949971 channel_t * channel = &mixers[i].channel ;
950972 for (int k = 0 ; k < channel->output_count ; k++) {
951973 output_t * output = channel->outputs + k;
952- if (output->type == O_ICECAST) {
953- shout_setup ((icecast_data*)(output->data ), channel->mode );
954- } else if (output->type == O_UDP_STREAM) {
955- udp_stream_data* sdata = (udp_stream_data*)(output->data );
956- if (!udp_stream_init (sdata, channel->mode , (size_t )WAVE_BATCH * sizeof (float ))) {
957- cerr << " Failed to initialize mixer " << i << " output " << k << " - aborting\n " ;
958- error ();
959- }
960- #ifdef WITH_PULSEAUDIO
961- } else if (output->type == O_PULSE) {
962- pulse_init ();
963- pulse_setup ((pulse_data*)(output->data ), channel->mode );
964- #endif /* WITH_PULSEAUDIO */
974+ if (!init_output (channel, output)) {
975+ cerr << " Failed to initialize mixer " << i << " output " << k << " - aborting\n " ;
976+ error ();
965977 }
966978 }
967979 }
@@ -972,19 +984,9 @@ int main(int argc, char* argv[]) {
972984
973985 for (int k = 0 ; k < channel->output_count ; k++) {
974986 output_t * output = channel->outputs + k;
975- if (output->type == O_ICECAST) {
976- shout_setup ((icecast_data*)(output->data ), channel->mode );
977- } else if (output->type == O_UDP_STREAM) {
978- udp_stream_data* sdata = (udp_stream_data*)(output->data );
979- if (!udp_stream_init (sdata, channel->mode , (size_t )WAVE_BATCH * sizeof (float ))) {
980- cerr << " Failed to initialize device " << i << " channel " << j << " output " << k << " - aborting\n " ;
981- error ();
982- }
983- #ifdef WITH_PULSEAUDIO
984- } else if (output->type == O_PULSE) {
985- pulse_init ();
986- pulse_setup ((pulse_data*)(output->data ), channel->mode );
987- #endif /* WITH_PULSEAUDIO */
987+ if (!init_output (channel, output)) {
988+ cerr << " Failed to initialize device " << i << " channel " << j << " output " << k << " - aborting\n " ;
989+ error ();
988990 }
989991 }
990992 }
@@ -1055,7 +1057,7 @@ int main(int argc, char* argv[]) {
10551057
10561058 // Setup the output and demod threads
10571059 if (multiple_output_threads == false ) {
1058- init_output (&output_params[0 ], 0 , device_count, 0 , mixer_count);
1060+ init_output_params (&output_params[0 ], 0 , device_count, 0 , mixer_count);
10591061
10601062 if (multiple_demod_threads == false ) {
10611063 init_demod (&demod_params[0 ], output_params[0 ].mp3_signal , 0 , device_count);
@@ -1066,16 +1068,16 @@ int main(int argc, char* argv[]) {
10661068 }
10671069 } else {
10681070 if (multiple_demod_threads == false ) {
1069- init_output (&output_params[0 ], 0 , device_count, 0 , 0 );
1071+ init_output_params (&output_params[0 ], 0 , device_count, 0 , 0 );
10701072 init_demod (&demod_params[0 ], output_params[0 ].mp3_signal , 0 , device_count);
10711073 } else {
10721074 for (int i = 0 ; i < device_count; i++) {
1073- init_output (&output_params[i], i, i + 1 , 0 , 0 );
1075+ init_output_params (&output_params[i], i, i + 1 , 0 , 0 );
10741076 init_demod (&demod_params[i], output_params[i].mp3_signal , i, i + 1 );
10751077 }
10761078 }
10771079 if (mixer_count > 0 ) {
1078- init_output (&output_params[output_thread_count - 1 ], 0 , 0 , 0 , mixer_count);
1080+ init_output_params (&output_params[output_thread_count - 1 ], 0 , 0 , 0 , mixer_count);
10791081 }
10801082 }
10811083
0 commit comments