| 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 |