void asource_deinit(void *arg) { #ifdef WIN32 ga_wasapi_close(&audioparam); #else ga_alsa_close(audioparam.handle, audioparam.sndlog); #endif return; }
static int asource_deinit(void *arg) { #ifdef WIN32 ga_wasapi_close(&audioparam); #else ga_alsa_close(audioparam.handle, audioparam.sndlog); #endif asource_initialized = 0; return 0; }
int asource_init(void *arg) { int delay = 0; struct RTSPConf *rtspconf = rtspconf_global(); if(initialized) return 0; // if((delay = ga_conf_readint("audio-init-delay")) > 0) { usleep(delay*1000); } // audioparam.channels = rtspconf->audio_channels; audioparam.samplerate = rtspconf->audio_samplerate; if(rtspconf->audio_device_format == AV_SAMPLE_FMT_S16) { #ifdef WIN32 #else audioparam.format = SND_PCM_FORMAT_S16_LE; #endif audioparam.bits_per_sample = 16; } else { ga_error("audio source: unsupported audio format (%d).\n", rtspconf->audio_device_format); return -1; } if(rtspconf->audio_device_channel_layout != AV_CH_LAYOUT_STEREO) { ga_error("audio source: unsupported channel layout (%llu).\n", rtspconf->audio_device_channel_layout); return -1; } #ifdef WIN32 if(ga_wasapi_init(&audioparam) < 0) { ga_error("WASAPI: initialization failed.\n"); return -1; } #else if((audioparam.handle = ga_alsa_init(&audioparam.sndlog)) == NULL) { ga_error("ALSA: initialization failed.\n"); return -1; } if(ga_alsa_set_param(&audioparam) < 0) { ga_alsa_close(audioparam.handle, audioparam.sndlog); ga_error("ALSA: cannot set parameters\n"); return -1; } #endif if(audio_source_setup(audioparam.chunk_size, audioparam.samplerate, audioparam.bits_per_sample, audioparam.channels) < 0) { ga_error("audio source: setup failed.\n"); #ifdef WIN32 ga_wasapi_close(&audioparam); #else ga_alsa_close(audioparam.handle, audioparam.sndlog); #endif return -1; } initialized = true; ga_error("audio source: setup chunk=%d, samplerate=%d, bps=%d, channels=%d\n", audioparam.chunk_size, audioparam.samplerate, audioparam.bits_per_sample, audioparam.channels); return 0; }