diff options
Diffstat (limited to 'media/audio/linux/alsa_input.cc')
-rw-r--r-- | media/audio/linux/alsa_input.cc | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/media/audio/linux/alsa_input.cc b/media/audio/linux/alsa_input.cc index 101c198..994c065 100644 --- a/media/audio/linux/alsa_input.cc +++ b/media/audio/linux/alsa_input.cc @@ -247,25 +247,25 @@ void AlsaPcmInputStream::Stop() { } void AlsaPcmInputStream::Close() { - scoped_ptr<AlsaPcmInputStream> self_deleter(this); + if (device_handle_) { + weak_factory_.InvalidateWeakPtrs(); // Cancel the next scheduled read. + int error = alsa_util::CloseDevice(wrapper_, device_handle_); + if (error < 0) + HandleError("PcmClose", error); - // Check in case we were already closed or not initialized yet. - if (!device_handle_) - return; + if (mixer_handle_) + alsa_util::CloseMixer(wrapper_, mixer_handle_, device_name_); - weak_factory_.InvalidateWeakPtrs(); // Cancel the next scheduled read. - int error = alsa_util::CloseDevice(wrapper_, device_handle_); - if (error < 0) - HandleError("PcmClose", error); - - if (mixer_handle_) - alsa_util::CloseMixer(wrapper_, mixer_handle_, device_name_); + audio_packet_.reset(); + device_handle_ = NULL; + mixer_handle_ = NULL; + mixer_element_handle_ = NULL; - audio_packet_.reset(); - device_handle_ = NULL; + if (callback_) + callback_->OnClose(this); + } - if (callback_) - callback_->OnClose(this); + audio_manager_->ReleaseInputStream(this); } double AlsaPcmInputStream::GetMaxVolume() { |