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

Side by Side Diff: webkit/media/webmediaplayer_ms.cc

Issue 11270012: Adding audio support to the new webmediaplyer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: added a lock to protect the |renderer_| Created 8 years, 1 month 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "webkit/media/webmediaplayer_ms.h" 5 #include "webkit/media/webmediaplayer_ms.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
13 #include "media/base/media_log.h" 13 #include "media/base/media_log.h"
14 #include "media/base/rtc_audio_renderer.h"
14 #include "media/base/video_frame.h" 15 #include "media/base/video_frame.h"
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient. h" 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient. h"
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h"
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" 21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" 22 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h"
22 #include "webkit/media/media_stream_client.h" 23 #include "webkit/media/media_stream_client.h"
23 #include "webkit/media/video_frame_provider.h" 24 #include "webkit/media/video_frame_provider.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 59 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
59 } 60 }
60 61
61 WebMediaPlayerMS::~WebMediaPlayerMS() { 62 WebMediaPlayerMS::~WebMediaPlayerMS() {
62 DVLOG(1) << "WebMediaPlayerMS::dtor"; 63 DVLOG(1) << "WebMediaPlayerMS::dtor";
63 DCHECK(thread_checker_.CalledOnValidThread()); 64 DCHECK(thread_checker_.CalledOnValidThread());
64 if (video_frame_provider_) { 65 if (video_frame_provider_) {
65 video_frame_provider_->Stop(); 66 video_frame_provider_->Stop();
66 } 67 }
67 68
69 if (audio_renderer_) {
70 audio_renderer_->Stop();
71 }
72
68 media_log_->AddEvent( 73 media_log_->AddEvent(
69 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); 74 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED));
70 75
71 if (delegate_) 76 if (delegate_)
72 delegate_->PlayerGone(this); 77 delegate_->PlayerGone(this);
73 } 78 }
74 79
75 void WebMediaPlayerMS::load(const WebKit::WebURL& url, CORSMode cors_mode) { 80 void WebMediaPlayerMS::load(const WebKit::WebURL& url, CORSMode cors_mode) {
76 DVLOG(1) << "WebMediaPlayerMS::load"; 81 DVLOG(1) << "WebMediaPlayerMS::load";
77 DCHECK(thread_checker_.CalledOnValidThread()); 82 DCHECK(thread_checker_.CalledOnValidThread());
78 83
79 GURL gurl(url); 84 GURL gurl(url);
80 85
81 setVolume(GetClient()->volume()); 86 setVolume(GetClient()->volume());
82 SetNetworkState(WebMediaPlayer::NetworkStateLoading); 87 SetNetworkState(WebMediaPlayer::NetworkStateLoading);
83 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); 88 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing);
84 media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); 89 media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec()));
85 90
86 // Check if this url is media stream. 91 // Check if this url is media stream.
87 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( 92 video_frame_provider_ = media_stream_client_->GetVideoFrameProvider(
88 url, 93 url,
89 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), 94 base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()),
90 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); 95 base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr()));
91 if (video_frame_provider_) { 96
97 audio_renderer_ = media_stream_client_->GetAudioRenderer(url);
98
99 if (video_frame_provider_ || audio_renderer_) {
92 SetNetworkState(WebMediaPlayer::NetworkStateLoaded); 100 SetNetworkState(WebMediaPlayer::NetworkStateLoaded);
93 GetClient()->sourceOpened(); 101 GetClient()->sourceOpened();
94 GetClient()->setOpaque(true); 102 GetClient()->setOpaque(true);
95 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 103 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
96 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); 104 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
97 RepaintInternal(); 105 RepaintInternal();
98 } else { 106 } else {
99 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); 107 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError);
100 } 108 }
101 } 109 }
102 110
103 void WebMediaPlayerMS::cancelLoad() { 111 void WebMediaPlayerMS::cancelLoad() {
104 DCHECK(thread_checker_.CalledOnValidThread()); 112 DCHECK(thread_checker_.CalledOnValidThread());
105 } 113 }
106 114
107 void WebMediaPlayerMS::play() { 115 void WebMediaPlayerMS::play() {
108 DVLOG(1) << "WebMediaPlayerMS::play"; 116 DVLOG(1) << "WebMediaPlayerMS::play";
109 DCHECK(thread_checker_.CalledOnValidThread()); 117 DCHECK(thread_checker_.CalledOnValidThread());
110 118
111 paused_ = false; 119 paused_ = false;
112 if (video_frame_provider_) { 120 if (video_frame_provider_) {
113 if (video_frame_provider_started_) { 121 if (video_frame_provider_started_) {
114 video_frame_provider_->Play(); 122 video_frame_provider_->Play();
115 } else { 123 } else {
116 video_frame_provider_started_ = true; 124 video_frame_provider_started_ = true;
117 video_frame_provider_->Start(); 125 video_frame_provider_->Start();
118 } 126 }
119 } 127 }
120 // TODO(wjia): add audio. See crbug.com/142988. 128
129 if (audio_renderer_)
130 audio_renderer_->Play();
121 131
122 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); 132 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY));
123 133
124 if (delegate_) 134 if (delegate_)
125 delegate_->DidPlay(this); 135 delegate_->DidPlay(this);
126 } 136 }
127 137
128 void WebMediaPlayerMS::pause() { 138 void WebMediaPlayerMS::pause() {
129 DVLOG(1) << "WebMediaPlayerMS::pause"; 139 DVLOG(1) << "WebMediaPlayerMS::pause";
130 DCHECK(thread_checker_.CalledOnValidThread()); 140 DCHECK(thread_checker_.CalledOnValidThread());
131 141
132 if (video_frame_provider_) 142 if (video_frame_provider_)
133 video_frame_provider_->Pause(); 143 video_frame_provider_->Pause();
134 // TODO(wjia): add audio. See crbug.com/142988. 144
145 if (audio_renderer_)
146 audio_renderer_->Pause();
135 paused_ = true; 147 paused_ = true;
136 148
137 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); 149 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE));
138 150
139 if (delegate_) 151 if (delegate_)
140 delegate_->DidPause(this); 152 delegate_->DidPause(this);
141 } 153 }
142 154
143 bool WebMediaPlayerMS::supportsFullscreen() const { 155 bool WebMediaPlayerMS::supportsFullscreen() const {
144 DCHECK(thread_checker_.CalledOnValidThread()); 156 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 12 matching lines...) Expand all
157 void WebMediaPlayerMS::setEndTime(float seconds) { 169 void WebMediaPlayerMS::setEndTime(float seconds) {
158 DCHECK(thread_checker_.CalledOnValidThread()); 170 DCHECK(thread_checker_.CalledOnValidThread());
159 } 171 }
160 172
161 void WebMediaPlayerMS::setRate(float rate) { 173 void WebMediaPlayerMS::setRate(float rate) {
162 DCHECK(thread_checker_.CalledOnValidThread()); 174 DCHECK(thread_checker_.CalledOnValidThread());
163 } 175 }
164 176
165 void WebMediaPlayerMS::setVolume(float volume) { 177 void WebMediaPlayerMS::setVolume(float volume) {
166 DCHECK(thread_checker_.CalledOnValidThread()); 178 DCHECK(thread_checker_.CalledOnValidThread());
167 // TODO(wjia): set audio volume. See crbug.com/142988. 179 if (audio_renderer_)
168 NOTIMPLEMENTED(); 180 audio_renderer_->SetVolume(volume);
169 } 181 }
170 182
171 void WebMediaPlayerMS::setVisible(bool visible) { 183 void WebMediaPlayerMS::setVisible(bool visible) {
172 DCHECK(thread_checker_.CalledOnValidThread()); 184 DCHECK(thread_checker_.CalledOnValidThread());
173 } 185 }
174 186
175 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) { 187 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) {
176 DCHECK(thread_checker_.CalledOnValidThread()); 188 DCHECK(thread_checker_.CalledOnValidThread());
177 } 189 }
178 190
179 bool WebMediaPlayerMS::totalBytesKnown() { 191 bool WebMediaPlayerMS::totalBytesKnown() {
180 DCHECK(thread_checker_.CalledOnValidThread()); 192 DCHECK(thread_checker_.CalledOnValidThread());
181 return false; 193 return false;
182 } 194 }
183 195
184 bool WebMediaPlayerMS::hasVideo() const { 196 bool WebMediaPlayerMS::hasVideo() const {
185 DCHECK(thread_checker_.CalledOnValidThread()); 197 DCHECK(thread_checker_.CalledOnValidThread());
186 return (video_frame_provider_ != NULL); 198 return (video_frame_provider_ != NULL);
187 } 199 }
188 200
189 bool WebMediaPlayerMS::hasAudio() const { 201 bool WebMediaPlayerMS::hasAudio() const {
190 DCHECK(thread_checker_.CalledOnValidThread()); 202 DCHECK(thread_checker_.CalledOnValidThread());
191 // TODO(wjia): add audio support. See crbug.com/142988. 203 // TODO(wjia): add audio support. See crbug.com/142988.
wjia(left Chromium) 2012/10/24 22:05:15 nit: remove this TODO.
no longer working on chromium 2012/10/25 10:19:41 Done.
192 return false; 204 return (audio_renderer_);
wjia(left Chromium) 2012/10/24 22:05:15 nit: no need to have parentheses.
no longer working on chromium 2012/10/25 10:19:41 I changed it to be the same style as in hasVideo()
193 } 205 }
194 206
195 WebKit::WebSize WebMediaPlayerMS::naturalSize() const { 207 WebKit::WebSize WebMediaPlayerMS::naturalSize() const {
196 DCHECK(thread_checker_.CalledOnValidThread()); 208 DCHECK(thread_checker_.CalledOnValidThread());
197 209
198 gfx::Size size; 210 gfx::Size size;
199 if (current_frame_) 211 if (current_frame_)
200 size = current_frame_->natural_size(); 212 size = current_frame_->natural_size();
201 DVLOG(1) << "WebMediaPlayerMS::naturalSize, " << size.ToString(); 213 DVLOG(1) << "WebMediaPlayerMS::naturalSize, " << size.ToString();
202 return WebKit::WebSize(size); 214 return WebKit::WebSize(size);
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 GetClient()->readyStateChanged(); 409 GetClient()->readyStateChanged();
398 } 410 }
399 411
400 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { 412 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() {
401 DCHECK(thread_checker_.CalledOnValidThread()); 413 DCHECK(thread_checker_.CalledOnValidThread());
402 DCHECK(client_); 414 DCHECK(client_);
403 return client_; 415 return client_;
404 } 416 }
405 417
406 } // namespace webkit_media 418 } // namespace webkit_media
OLDNEW
« media/base/rtc_audio_renderer.cc ('K') | « webkit/media/webmediaplayer_ms.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698