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

Side by Side Diff: media/audio/audio_output_dispatcher.cc

Issue 6822019: Fix erratic HTML5 audio playback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "media/audio/audio_output_dispatcher.h" 5 #include "media/audio/audio_output_dispatcher.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "media/audio/audio_io.h" 9 #include "media/audio/audio_io.h"
10 10
11 AudioOutputDispatcher::AudioOutputDispatcher( 11 AudioOutputDispatcher::AudioOutputDispatcher(
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 // Schedule task to allocate streams for other proxies if we need to. 55 // Schedule task to allocate streams for other proxies if we need to.
56 message_loop_->PostTask(FROM_HERE, NewRunnableMethod( 56 message_loop_->PostTask(FROM_HERE, NewRunnableMethod(
57 this, &AudioOutputDispatcher::OpenTask)); 57 this, &AudioOutputDispatcher::OpenTask));
58 58
59 return stream; 59 return stream;
60 } 60 }
61 61
62 void AudioOutputDispatcher::StreamStopped(AudioOutputStream* stream) { 62 void AudioOutputDispatcher::StreamStopped(AudioOutputStream* stream) {
63 DCHECK_EQ(MessageLoop::current(), message_loop_); 63 DCHECK_EQ(MessageLoop::current(), message_loop_);
64
64 paused_proxies_++; 65 paused_proxies_++;
66
67 idle_streams_.push_front(stream);
Sergey Ulanov 2011/04/09 07:02:05 Looks to me that we may leak streams that are in i
68
69 // Don't recycle stream until two buffers worth of time has elapsed
Sergey Ulanov 2011/04/09 07:02:05 nit: period at the end of the comment.
70 message_loop_->PostDelayedTask(FROM_HERE, NewRunnableMethod(
71 this, &AudioOutputDispatcher::StopStreamTask),
72 2 * params_.samples_per_packet * 1000 / params_.sample_rate);
Sergey Ulanov 2011/04/09 07:02:05 nit: This line is not indented properly. I would m
Sergey Ulanov 2011/04/09 07:02:05 nit: replace 1000 with Time::kMillisecondsPerSecon
scherkus (not reviewing) 2011/04/11 22:32:33 it looks like you can pre-calculate this since par
73 }
74
75 void AudioOutputDispatcher::StopStreamTask() {
76 if (idle_streams_.empty())
77 return;
78 AudioOutputStream* stream = idle_streams_.back();
79 idle_streams_.pop_back();
65 streams_.push_back(stream); 80 streams_.push_back(stream);
66 close_timer_.Reset(); 81 close_timer_.Reset();
67 } 82 }
68 83
69 void AudioOutputDispatcher::StreamClosed() { 84 void AudioOutputDispatcher::StreamClosed() {
70 DCHECK_EQ(MessageLoop::current(), message_loop_); 85 DCHECK_EQ(MessageLoop::current(), message_loop_);
71 86
72 DCHECK_GT(paused_proxies_, 0u); 87 DCHECK_GT(paused_proxies_, 0u);
73 paused_proxies_--; 88 paused_proxies_--;
74 89
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 close_timer_.Reset(); 121 close_timer_.Reset();
107 } 122 }
108 123
109 // This method is called by |close_timer_|. 124 // This method is called by |close_timer_|.
110 void AudioOutputDispatcher::ClosePendingStreams() { 125 void AudioOutputDispatcher::ClosePendingStreams() {
111 while (!streams_.empty()) { 126 while (!streams_.empty()) {
112 streams_.back()->Close(); 127 streams_.back()->Close();
113 streams_.pop_back(); 128 streams_.pop_back();
114 } 129 }
115 } 130 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698