AUDIO_IO_LOGD("pa_context[%p], success[%d], user_data[%p]", c, success, user_data);
}
+void CPulseAudioClient::resetStreamCallbacks() {
+ if (!__mpStream)
+ return;
+
+ if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK)
+ pa_stream_set_write_callback(__mpStream, NULL, NULL);
+ else
+ pa_stream_set_read_callback(__mpStream, NULL, NULL);
+
+ pa_stream_set_latency_update_callback(__mpStream, NULL, NULL);
+ pa_stream_set_event_callback(__mpStream, NULL, NULL);
+}
+
+void CPulseAudioClient::resetInternalObjects() {
+ if (__mpMainloop)
+ pa_threaded_mainloop_stop(__mpMainloop);
+
+ if (__mpStream) {
+ pa_stream_disconnect(__mpStream);
+ pa_stream_unref(__mpStream);
+ __mpStream = nullptr;
+ }
+
+ if (__mpContext) {
+ pa_context_disconnect(__mpContext);
+ pa_context_unref(__mpContext);
+ __mpContext = nullptr;
+ }
+
+ if (__mpMainloop) {
+ pa_threaded_mainloop_free(__mpMainloop);
+ __mpMainloop = nullptr;
+ }
+
+ if (__mpPropList) {
+ pa_proplist_free(__mpPropList);
+ __mpPropList = nullptr;
+ }
+}
+
void CPulseAudioClient::initialize() {
if (__mIsInit)
return;
// __mIsInit = true; // Moved to __streamStateChangeCb()
} catch (const CAudioError& e) {
//LCOV_EXCL_START
- finalize();
+ resetStreamCallbacks();
+ resetInternalObjects();
throw;
//LCOV_EXCL_END
}
pa_threaded_mainloop_lock(__mpMainloop);
__mIsInit = false;
- /* clear callbacks */
- if (__mpStream) {
- if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK)
- pa_stream_set_write_callback(__mpStream, NULL, NULL);
- else
- pa_stream_set_read_callback(__mpStream, NULL, NULL);
- pa_stream_set_latency_update_callback(__mpStream, NULL, NULL);
- pa_stream_set_event_callback(__mpStream, NULL, NULL);
- }
+
+ resetStreamCallbacks();
if (!is_in_thread)
pa_threaded_mainloop_unlock(__mpMainloop);
drain_wait_count, drain_wait_interval);
}
- if (__mpMainloop)
- pa_threaded_mainloop_stop(__mpMainloop);
-
- if (__mpStream) {
- pa_stream_disconnect(__mpStream);
- pa_stream_unref(__mpStream);
- __mpStream = nullptr;
- }
-
- if (__mpContext) {
- pa_context_disconnect(__mpContext);
- pa_context_unref(__mpContext);
- __mpContext = nullptr;
- }
-
- if (__mpMainloop) {
- pa_threaded_mainloop_free(__mpMainloop);
- __mpMainloop = nullptr;
- }
-
- if (__mpPropList) {
- pa_proplist_free(__mpPropList);
- __mpPropList = nullptr;
- }
+ resetInternalObjects();
AUDIO_IO_LOGD("Done");
}