Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Unified Diff: media/audio/win/audio_low_latency_output_win.cc

Issue 10970010: Extended sanity checks in WASAPIAudioOutputStream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/win/audio_low_latency_output_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/win/audio_low_latency_output_win.cc
diff --git a/media/audio/win/audio_low_latency_output_win.cc b/media/audio/win/audio_low_latency_output_win.cc
index 496576c43f88011b96c95e746ebffa6b889dc757..b1e522c33e16cf7871524009d4ef14374e7e83c4 100644
--- a/media/audio/win/audio_low_latency_output_win.cc
+++ b/media/audio/win/audio_low_latency_output_win.cc
@@ -389,7 +389,6 @@ WASAPIAudioOutputStream::WASAPIAudioOutputStream(AudioManagerWin* manager,
: creating_thread_id_(base::PlatformThread::CurrentId()),
manager_(manager),
opened_(false),
- started_(false),
restart_rendering_mode_(false),
volume_(1.0),
endpoint_buffer_size_frames_(0),
@@ -562,13 +561,13 @@ bool WASAPIAudioOutputStream::Open() {
void WASAPIAudioOutputStream::Start(AudioSourceCallback* callback) {
DCHECK_EQ(GetCurrentThreadId(), creating_thread_id_);
- DCHECK(callback);
- DLOG_IF(ERROR, !opened_) << "Open() has not been called successfully";
- if (!opened_)
- return;
+ CHECK(callback);
+ CHECK(opened_);
- if (started_)
+ if (render_thread_.get()) {
+ CHECK_EQ(callback, source_);
return;
+ }
if (restart_rendering_mode_) {
// The selected audio device has been removed or disabled and a new
@@ -610,10 +609,6 @@ void WASAPIAudioOutputStream::Start(AudioSourceCallback* callback) {
render_thread_.reset(
new base::DelegateSimpleThread(this, "wasapi_render_thread"));
render_thread_->Start();
- if (!render_thread_->HasBeenStarted()) {
- DLOG(ERROR) << "Failed to start WASAPI render thread.";
- return;
- }
// Start streaming data between the endpoint buffer and the audio engine.
hr = audio_client_->Start();
@@ -622,22 +617,14 @@ void WASAPIAudioOutputStream::Start(AudioSourceCallback* callback) {
render_thread_->Join();
render_thread_.reset();
HandleError(hr);
- return;
}
-
- started_ = true;
}
void WASAPIAudioOutputStream::Stop() {
DCHECK_EQ(GetCurrentThreadId(), creating_thread_id_);
- if (!started_)
+ if (!render_thread_.get())
return;
- // Shut down the render thread.
- if (stop_render_event_.IsValid()) {
- SetEvent(stop_render_event_.Get());
- }
-
// Stop output audio streaming.
HRESULT hr = audio_client_->Stop();
if (FAILED(hr)) {
@@ -646,11 +633,13 @@ void WASAPIAudioOutputStream::Stop() {
}
// Wait until the thread completes and perform cleanup.
- if (render_thread_.get()) {
- SetEvent(stop_render_event_.Get());
- render_thread_->Join();
- render_thread_.reset();
- }
+ SetEvent(stop_render_event_.Get());
+ render_thread_->Join();
+ render_thread_.reset();
+
+ // Ensure that we don't quit the main thread loop immediately next
+ // time Start() is called.
+ ResetEvent(stop_render_event_.Get());
// Clear source callback, it'll be set again on the next Start() call.
source_ = NULL;
@@ -671,12 +660,6 @@ void WASAPIAudioOutputStream::Stop() {
audio_client_->GetCurrentPadding(&num_queued_frames);
DCHECK_EQ(0u, num_queued_frames);
}
-
- // Ensure that we don't quit the main thread loop immediately next
- // time Start() is called.
- ResetEvent(stop_render_event_.Get());
-
- started_ = false;
}
void WASAPIAudioOutputStream::Close() {
@@ -999,6 +982,8 @@ void WASAPIAudioOutputStream::Run() {
}
void WASAPIAudioOutputStream::HandleError(HRESULT err) {
+ CHECK(started() && (GetCurrentThreadId() == render_thread_->tid() ||
tommi (sloooow) - chröme 2012/09/20 12:15:38 I see you've changed the parenthesis, but the chec
henrika (OOO until Aug 14) 2012/09/20 12:27:19 Done.
+ GetCurrentThreadId() == creating_thread_id_));
NOTREACHED() << "Error code: " << std::hex << err;
if (source_)
source_->OnError(this, static_cast<int>(err));
« no previous file with comments | « media/audio/win/audio_low_latency_output_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698