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

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: addressed the nits from Andrew and fixed the chromeOS testbot error 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/video_frame.h" 14 #include "media/base/video_frame.h"
15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient. h" 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient. h"
17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h" 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h"
18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" 21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h"
22 #include "webkit/media/media_stream_audio_renderer.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"
24 #include "webkit/media/webmediaplayer_delegate.h" 25 #include "webkit/media/webmediaplayer_delegate.h"
25 #include "webkit/media/webmediaplayer_util.h" 26 #include "webkit/media/webmediaplayer_util.h"
26 #include "webkit/media/webvideoframe_impl.h" 27 #include "webkit/media/webvideoframe_impl.h"
27 28
28 using WebKit::WebCanvas; 29 using WebKit::WebCanvas;
29 using WebKit::WebMediaPlayer; 30 using WebKit::WebMediaPlayer;
30 using WebKit::WebRect; 31 using WebKit::WebRect;
31 using WebKit::WebSize; 32 using WebKit::WebSize;
(...skipping 26 matching lines...) Expand all
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 video_frame_provider_->Start(); 103 video_frame_provider_->Start();
96 } else { 104 } else {
97 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); 105 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError);
98 } 106 }
99 } 107 }
100 108
101 void WebMediaPlayerMS::cancelLoad() { 109 void WebMediaPlayerMS::cancelLoad() {
102 DCHECK(thread_checker_.CalledOnValidThread()); 110 DCHECK(thread_checker_.CalledOnValidThread());
103 } 111 }
104 112
105 void WebMediaPlayerMS::play() { 113 void WebMediaPlayerMS::play() {
106 DVLOG(1) << "WebMediaPlayerMS::play"; 114 DVLOG(1) << "WebMediaPlayerMS::play";
107 DCHECK(thread_checker_.CalledOnValidThread()); 115 DCHECK(thread_checker_.CalledOnValidThread());
108 116
109 if (video_frame_provider_ && paused_) { 117 if (video_frame_provider_ && paused_)
110 video_frame_provider_->Play(); 118 video_frame_provider_->Play();
111 } 119
120 if (audio_renderer_ && paused_)
121 audio_renderer_->Play();
122
112 paused_ = false; 123 paused_ = false;
113 124
114 // TODO(wjia): add audio. See crbug.com/142988.
115
116 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); 125 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY));
117 126
118 if (delegate_) 127 if (delegate_)
119 delegate_->DidPlay(this); 128 delegate_->DidPlay(this);
120 } 129 }
121 130
122 void WebMediaPlayerMS::pause() { 131 void WebMediaPlayerMS::pause() {
123 DVLOG(1) << "WebMediaPlayerMS::pause"; 132 DVLOG(1) << "WebMediaPlayerMS::pause";
124 DCHECK(thread_checker_.CalledOnValidThread()); 133 DCHECK(thread_checker_.CalledOnValidThread());
125 134
126 if (video_frame_provider_) 135 if (video_frame_provider_)
127 video_frame_provider_->Pause(); 136 video_frame_provider_->Pause();
128 // TODO(wjia): add audio. See crbug.com/142988. 137
138 if (audio_renderer_)
139 audio_renderer_->Pause();
140
129 paused_ = true; 141 paused_ = true;
130 142
131 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); 143 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE));
132 144
133 if (delegate_) 145 if (delegate_)
134 delegate_->DidPause(this); 146 delegate_->DidPause(this);
135 } 147 }
136 148
137 bool WebMediaPlayerMS::supportsFullscreen() const { 149 bool WebMediaPlayerMS::supportsFullscreen() const {
138 DCHECK(thread_checker_.CalledOnValidThread()); 150 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 12 matching lines...) Expand all
151 void WebMediaPlayerMS::setEndTime(float seconds) { 163 void WebMediaPlayerMS::setEndTime(float seconds) {
152 DCHECK(thread_checker_.CalledOnValidThread()); 164 DCHECK(thread_checker_.CalledOnValidThread());
153 } 165 }
154 166
155 void WebMediaPlayerMS::setRate(float rate) { 167 void WebMediaPlayerMS::setRate(float rate) {
156 DCHECK(thread_checker_.CalledOnValidThread()); 168 DCHECK(thread_checker_.CalledOnValidThread());
157 } 169 }
158 170
159 void WebMediaPlayerMS::setVolume(float volume) { 171 void WebMediaPlayerMS::setVolume(float volume) {
160 DCHECK(thread_checker_.CalledOnValidThread()); 172 DCHECK(thread_checker_.CalledOnValidThread());
161 // TODO(wjia): set audio volume. See crbug.com/142988. 173 if (audio_renderer_)
162 NOTIMPLEMENTED(); 174 audio_renderer_->SetVolume(volume);
163 } 175 }
164 176
165 void WebMediaPlayerMS::setVisible(bool visible) { 177 void WebMediaPlayerMS::setVisible(bool visible) {
166 DCHECK(thread_checker_.CalledOnValidThread()); 178 DCHECK(thread_checker_.CalledOnValidThread());
167 } 179 }
168 180
169 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) { 181 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) {
170 DCHECK(thread_checker_.CalledOnValidThread()); 182 DCHECK(thread_checker_.CalledOnValidThread());
171 } 183 }
172 184
173 bool WebMediaPlayerMS::totalBytesKnown() { 185 bool WebMediaPlayerMS::totalBytesKnown() {
174 DCHECK(thread_checker_.CalledOnValidThread()); 186 DCHECK(thread_checker_.CalledOnValidThread());
175 return false; 187 return false;
176 } 188 }
177 189
178 bool WebMediaPlayerMS::hasVideo() const { 190 bool WebMediaPlayerMS::hasVideo() const {
179 DCHECK(thread_checker_.CalledOnValidThread()); 191 DCHECK(thread_checker_.CalledOnValidThread());
180 return (video_frame_provider_ != NULL); 192 return (video_frame_provider_ != NULL);
181 } 193 }
182 194
183 bool WebMediaPlayerMS::hasAudio() const { 195 bool WebMediaPlayerMS::hasAudio() const {
184 DCHECK(thread_checker_.CalledOnValidThread()); 196 DCHECK(thread_checker_.CalledOnValidThread());
185 // TODO(wjia): add audio support. See crbug.com/142988. 197 return (audio_renderer_ != NULL);
186 return false;
187 } 198 }
188 199
189 WebKit::WebSize WebMediaPlayerMS::naturalSize() const { 200 WebKit::WebSize WebMediaPlayerMS::naturalSize() const {
190 DCHECK(thread_checker_.CalledOnValidThread()); 201 DCHECK(thread_checker_.CalledOnValidThread());
191 202
192 gfx::Size size; 203 gfx::Size size;
193 if (current_frame_) 204 if (current_frame_)
194 size = current_frame_->natural_size(); 205 size = current_frame_->natural_size();
195 DVLOG(3) << "WebMediaPlayerMS::naturalSize, " << size.ToString(); 206 DVLOG(3) << "WebMediaPlayerMS::naturalSize, " << size.ToString();
196 return WebKit::WebSize(size); 207 return WebKit::WebSize(size);
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 GetClient()->readyStateChanged(); 415 GetClient()->readyStateChanged();
405 } 416 }
406 417
407 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { 418 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() {
408 DCHECK(thread_checker_.CalledOnValidThread()); 419 DCHECK(thread_checker_.CalledOnValidThread());
409 DCHECK(client_); 420 DCHECK(client_);
410 return client_; 421 return client_;
411 } 422 }
412 423
413 } // namespace webkit_media 424 } // namespace webkit_media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698