| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // THREAD SAFETY | 5 // THREAD SAFETY |
| 6 // | 6 // |
| 7 // The AlsaPcmOutputStream object's internal state is accessed by two threads: | 7 // The AlsaPcmOutputStream object's internal state is accessed by two threads: |
| 8 // | 8 // |
| 9 // client thread - creates the object and calls the public APIs. | 9 // client thread - creates the object and calls the public APIs. |
| 10 // message loop thread - executes all the internal tasks including querying | 10 // message loop thread - executes all the internal tasks including querying |
| (...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 // TODO(ajwong): Retry on certain errors? | 749 // TODO(ajwong): Retry on certain errors? |
| 750 LOG(WARNING) << "Unable to close audio device. Leaking handle."; | 750 LOG(WARNING) << "Unable to close audio device. Leaking handle."; |
| 751 } | 751 } |
| 752 return NULL; | 752 return NULL; |
| 753 } | 753 } |
| 754 | 754 |
| 755 return handle; | 755 return handle; |
| 756 } | 756 } |
| 757 | 757 |
| 758 bool AlsaPcmOutputStream::CloseDevice(snd_pcm_t* handle) { | 758 bool AlsaPcmOutputStream::CloseDevice(snd_pcm_t* handle) { |
| 759 std::string name = wrapper_->PcmName(handle); |
| 759 int error = wrapper_->PcmClose(handle); | 760 int error = wrapper_->PcmClose(handle); |
| 760 if (error < 0) { | 761 if (error < 0) { |
| 761 LOG(ERROR) << "Cannot close audio device (" << wrapper_->PcmName(handle) | 762 LOG(ERROR) << "Error closing audio device (" << name << "): " |
| 762 << "): " << wrapper_->StrError(error); | 763 << wrapper_->StrError(error); |
| 763 return false; | 764 return false; |
| 764 } | 765 } |
| 765 | 766 |
| 766 return true; | 767 return true; |
| 767 } | 768 } |
| 768 | 769 |
| 769 snd_pcm_sframes_t AlsaPcmOutputStream::GetAvailableFrames() { | 770 snd_pcm_sframes_t AlsaPcmOutputStream::GetAvailableFrames() { |
| 770 DCHECK_EQ(MessageLoop::current(), message_loop_); | 771 DCHECK_EQ(MessageLoop::current(), message_loop_); |
| 771 | 772 |
| 772 if (stop_stream_) { | 773 if (stop_stream_) { |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 } | 949 } |
| 949 | 950 |
| 950 // Changes the AudioSourceCallback to proxy calls to. Pass in NULL to | 951 // Changes the AudioSourceCallback to proxy calls to. Pass in NULL to |
| 951 // release ownership of the currently registered callback. | 952 // release ownership of the currently registered callback. |
| 952 void AlsaPcmOutputStream::SharedData::set_source_callback( | 953 void AlsaPcmOutputStream::SharedData::set_source_callback( |
| 953 AudioSourceCallback* callback) { | 954 AudioSourceCallback* callback) { |
| 954 DCHECK_EQ(MessageLoop::current(), state_transition_loop_); | 955 DCHECK_EQ(MessageLoop::current(), state_transition_loop_); |
| 955 AutoLock l(lock_); | 956 AutoLock l(lock_); |
| 956 source_callback_ = callback; | 957 source_callback_ = callback; |
| 957 } | 958 } |
| OLD | NEW |