OLD | NEW |
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_impl.h" | 5 #include "webkit/media/webmediaplayer_impl.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 static WebKit::WebTimeRanges ConvertToWebTimeRanges( | 104 static WebKit::WebTimeRanges ConvertToWebTimeRanges( |
105 const media::Ranges<base::TimeDelta>& ranges) { | 105 const media::Ranges<base::TimeDelta>& ranges) { |
106 WebKit::WebTimeRanges result(ranges.size()); | 106 WebKit::WebTimeRanges result(ranges.size()); |
107 for (size_t i = 0; i < ranges.size(); i++) { | 107 for (size_t i = 0; i < ranges.size(); i++) { |
108 result[i].start = ranges.start(i).InSecondsF(); | 108 result[i].start = ranges.start(i).InSecondsF(); |
109 result[i].end = ranges.end(i).InSecondsF(); | 109 result[i].end = ranges.end(i).InSecondsF(); |
110 } | 110 } |
111 return result; | 111 return result; |
112 } | 112 } |
113 | 113 |
114 // TODO(acolwell): Investigate whether the key_system & session_id parameters | |
115 // are really necessary. | |
116 typedef base::Callback<void(const std::string&, | |
117 const std::string&, | |
118 scoped_array<uint8>, | |
119 int)> OnNeedKeyCB; | |
120 | |
121 static void LogMediaSourceError(const scoped_refptr<media::MediaLog>& media_log, | 114 static void LogMediaSourceError(const scoped_refptr<media::MediaLog>& media_log, |
122 const std::string& error) { | 115 const std::string& error) { |
123 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); | 116 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); |
124 } | 117 } |
125 | 118 |
126 WebMediaPlayerImpl::WebMediaPlayerImpl( | 119 WebMediaPlayerImpl::WebMediaPlayerImpl( |
127 WebKit::WebFrame* frame, | 120 WebKit::WebFrame* frame, |
128 WebKit::WebMediaPlayerClient* client, | 121 WebKit::WebMediaPlayerClient* client, |
129 base::WeakPtr<WebMediaPlayerDelegate> delegate, | 122 base::WeakPtr<WebMediaPlayerDelegate> delegate, |
130 media::FilterCollection* collection, | 123 media::FilterCollection* collection, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 MessageLoop::current()->PostTask( | 166 MessageLoop::current()->PostTask( |
174 FROM_HERE, | 167 FROM_HERE, |
175 base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory, | 168 base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory, |
176 AsWeakPtr())); | 169 AsWeakPtr())); |
177 | 170 |
178 // Also we want to be notified of |main_loop_| destruction. | 171 // Also we want to be notified of |main_loop_| destruction. |
179 main_loop_->AddDestructionObserver(this); | 172 main_loop_->AddDestructionObserver(this); |
180 | 173 |
181 media::SetDecryptorReadyCB set_decryptor_ready_cb; | 174 media::SetDecryptorReadyCB set_decryptor_ready_cb; |
182 if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) { | 175 if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) { |
183 decryptor_.reset(new ProxyDecryptor(proxy_.get(), client, frame)); | 176 decryptor_.reset(new ProxyDecryptor( |
| 177 client, |
| 178 frame, |
| 179 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyAdded), |
| 180 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyError), |
| 181 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyMessage), |
| 182 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey))); |
184 set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, | 183 set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, |
185 base::Unretained(decryptor_.get())); | 184 base::Unretained(decryptor_.get())); |
186 } | 185 } |
187 | 186 |
188 // Create default video renderer. | 187 // Create default video renderer. |
189 scoped_refptr<media::VideoRendererBase> video_renderer = | 188 scoped_refptr<media::VideoRendererBase> video_renderer = |
190 new media::VideoRendererBase( | 189 new media::VideoRendererBase( |
191 pipeline_message_loop, | 190 pipeline_message_loop, |
192 set_decryptor_ready_cb, | 191 set_decryptor_ready_cb, |
193 base::Bind(&WebMediaPlayerProxy::Repaint, proxy_), | 192 base::Bind(&WebMediaPlayerProxy::Repaint, proxy_), |
(...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1081 GetClient()->keyError( | 1080 GetClient()->keyError( |
1082 WebString::fromUTF8(key_system), | 1081 WebString::fromUTF8(key_system), |
1083 WebString::fromUTF8(session_id), | 1082 WebString::fromUTF8(session_id), |
1084 static_cast<WebKit::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), | 1083 static_cast<WebKit::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), |
1085 system_code); | 1084 system_code); |
1086 } | 1085 } |
1087 | 1086 |
1088 void WebMediaPlayerImpl::OnKeyMessage(const std::string& key_system, | 1087 void WebMediaPlayerImpl::OnKeyMessage(const std::string& key_system, |
1089 const std::string& session_id, | 1088 const std::string& session_id, |
1090 const std::string& message, | 1089 const std::string& message, |
1091 const GURL& default_url) { | 1090 const std::string& default_url) { |
1092 DCHECK_EQ(main_loop_, MessageLoop::current()); | 1091 DCHECK_EQ(main_loop_, MessageLoop::current()); |
1093 | 1092 |
| 1093 const GURL default_url_gurl(default_url); |
| 1094 DLOG_IF(WARNING, !default_url.empty() && !default_url_gurl.is_valid()) |
| 1095 << "Invalid URL in default_url: " << default_url; |
| 1096 |
1094 GetClient()->keyMessage(WebString::fromUTF8(key_system), | 1097 GetClient()->keyMessage(WebString::fromUTF8(key_system), |
1095 WebString::fromUTF8(session_id), | 1098 WebString::fromUTF8(session_id), |
1096 reinterpret_cast<const uint8*>(message.data()), | 1099 reinterpret_cast<const uint8*>(message.data()), |
1097 message.size(), | 1100 message.size(), |
1098 default_url); | 1101 default_url_gurl); |
1099 } | 1102 } |
1100 | 1103 |
1101 void WebMediaPlayerImpl::SetOpaque(bool opaque) { | 1104 void WebMediaPlayerImpl::SetOpaque(bool opaque) { |
1102 DCHECK_EQ(main_loop_, MessageLoop::current()); | 1105 DCHECK_EQ(main_loop_, MessageLoop::current()); |
1103 | 1106 |
1104 GetClient()->setOpaque(opaque); | 1107 GetClient()->setOpaque(opaque); |
1105 } | 1108 } |
1106 | 1109 |
1107 void WebMediaPlayerImpl::DataSourceInitialized(const GURL& gurl, bool success) { | 1110 void WebMediaPlayerImpl::DataSourceInitialized(const GURL& gurl, bool success) { |
1108 DCHECK_EQ(main_loop_, MessageLoop::current()); | 1111 DCHECK_EQ(main_loop_, MessageLoop::current()); |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1211 return audio_source_provider_; | 1214 return audio_source_provider_; |
1212 } | 1215 } |
1213 | 1216 |
1214 void WebMediaPlayerImpl::IncrementExternallyAllocatedMemory() { | 1217 void WebMediaPlayerImpl::IncrementExternallyAllocatedMemory() { |
1215 DCHECK_EQ(main_loop_, MessageLoop::current()); | 1218 DCHECK_EQ(main_loop_, MessageLoop::current()); |
1216 incremented_externally_allocated_memory_ = true; | 1219 incremented_externally_allocated_memory_ = true; |
1217 v8::V8::AdjustAmountOfExternalAllocatedMemory(kPlayerExtraMemory); | 1220 v8::V8::AdjustAmountOfExternalAllocatedMemory(kPlayerExtraMemory); |
1218 } | 1221 } |
1219 | 1222 |
1220 } // namespace webkit_media | 1223 } // namespace webkit_media |
OLD | NEW |