OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/media/android/webmediaplayer_android.h" | 5 #include "content/renderer/media/android/webmediaplayer_android.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/android/build_info.h" | 9 #include "base/android/build_info.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 } // namespace | 108 } // namespace |
109 | 109 |
110 namespace content { | 110 namespace content { |
111 | 111 |
112 WebMediaPlayerAndroid::WebMediaPlayerAndroid( | 112 WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
113 blink::WebFrame* frame, | 113 blink::WebFrame* frame, |
114 blink::WebMediaPlayerClient* client, | 114 blink::WebMediaPlayerClient* client, |
115 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, | 115 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, |
116 RendererMediaPlayerManager* player_manager, | 116 RendererMediaPlayerManager* player_manager, |
117 RendererCdmManager* cdm_manager, | 117 RendererCdmManager* cdm_manager, |
| 118 blink::WebContentDecryptionModule* initial_cdm, |
118 scoped_refptr<StreamTextureFactory> factory, | 119 scoped_refptr<StreamTextureFactory> factory, |
119 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 120 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
120 media::MediaLog* media_log) | 121 media::MediaLog* media_log) |
121 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), | 122 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), |
122 frame_(frame), | 123 frame_(frame), |
123 client_(client), | 124 client_(client), |
124 delegate_(delegate), | 125 delegate_(delegate), |
125 buffered_(static_cast<size_t>(1)), | 126 buffered_(static_cast<size_t>(1)), |
126 media_task_runner_(task_runner), | 127 media_task_runner_(task_runner), |
127 ignore_metadata_duration_change_(false), | 128 ignore_metadata_duration_change_(false), |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 HasSwitch(switches::kForceUseOverlayEmbeddedVideo); | 167 HasSwitch(switches::kForceUseOverlayEmbeddedVideo); |
167 if (force_use_overlay_embedded_video_ || | 168 if (force_use_overlay_embedded_video_ || |
168 player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) { | 169 player_manager_->ShouldUseVideoOverlayForEmbeddedEncryptedVideo()) { |
169 // Defer stream texture creation until we are sure it's necessary. | 170 // Defer stream texture creation until we are sure it's necessary. |
170 needs_establish_peer_ = false; | 171 needs_establish_peer_ = false; |
171 current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1)); | 172 current_frame_ = VideoFrame::CreateBlackFrame(gfx::Size(1, 1)); |
172 } | 173 } |
173 #endif // defined(VIDEO_HOLE) | 174 #endif // defined(VIDEO_HOLE) |
174 TryCreateStreamTextureProxyIfNeeded(); | 175 TryCreateStreamTextureProxyIfNeeded(); |
175 interpolator_.SetUpperBound(base::TimeDelta()); | 176 interpolator_.SetUpperBound(base::TimeDelta()); |
| 177 |
| 178 // Set the initial CDM, if specified. |
| 179 if (initial_cdm) { |
| 180 web_cdm_ = ToWebContentDecryptionModuleImpl(initial_cdm); |
| 181 if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId) |
| 182 player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); |
| 183 } |
176 } | 184 } |
177 | 185 |
178 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { | 186 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { |
179 DCHECK(main_thread_checker_.CalledOnValidThread()); | 187 DCHECK(main_thread_checker_.CalledOnValidThread()); |
180 SetVideoFrameProviderClient(NULL); | 188 SetVideoFrameProviderClient(NULL); |
181 client_->setWebLayer(NULL); | 189 client_->setWebLayer(NULL); |
182 | 190 |
183 if (player_manager_) { | 191 if (player_manager_) { |
184 player_manager_->DestroyPlayer(player_id_); | 192 player_manager_->DestroyPlayer(player_id_); |
185 player_manager_->UnregisterMediaPlayer(player_id_); | 193 player_manager_->UnregisterMediaPlayer(player_id_); |
(...skipping 1481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1667 } else { | 1675 } else { |
1668 // No pipeline/decoder connected, so resolve the promise. When something | 1676 // No pipeline/decoder connected, so resolve the promise. When something |
1669 // is connected, setting the CDM will happen in SetDecryptorReadyCB(). | 1677 // is connected, setting the CDM will happen in SetDecryptorReadyCB(). |
1670 ContentDecryptionModuleAttached(result, true); | 1678 ContentDecryptionModuleAttached(result, true); |
1671 } | 1679 } |
1672 | 1680 |
1673 if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId) | 1681 if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId) |
1674 player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); | 1682 player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); |
1675 } | 1683 } |
1676 | 1684 |
1677 void WebMediaPlayerAndroid::setContentDecryptionModuleSync( | |
1678 blink::WebContentDecryptionModule* cdm) { | |
1679 DCHECK(main_thread_checker_.CalledOnValidThread()); | |
1680 | |
1681 // TODO(xhwang): Support setMediaKeys(0) if necessary: http://crbug.com/330324 | |
1682 if (!cdm) | |
1683 return; | |
1684 | |
1685 DCHECK(decryptor_ready_cb_.is_null()); | |
1686 | |
1687 web_cdm_ = ToWebContentDecryptionModuleImpl(cdm); | |
1688 if (web_cdm_->GetCdmId() != RendererCdmManager::kInvalidCdmId) | |
1689 player_manager_->SetCdm(player_id_, web_cdm_->GetCdmId()); | |
1690 } | |
1691 | |
1692 void WebMediaPlayerAndroid::ContentDecryptionModuleAttached( | 1685 void WebMediaPlayerAndroid::ContentDecryptionModuleAttached( |
1693 blink::WebContentDecryptionModuleResult result, | 1686 blink::WebContentDecryptionModuleResult result, |
1694 bool success) { | 1687 bool success) { |
1695 if (success) { | 1688 if (success) { |
1696 result.complete(); | 1689 result.complete(); |
1697 return; | 1690 return; |
1698 } | 1691 } |
1699 | 1692 |
1700 result.completeWithError( | 1693 result.completeWithError( |
1701 blink::WebContentDecryptionModuleExceptionNotSupportedError, | 1694 blink::WebContentDecryptionModuleExceptionNotSupportedError, |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1821 | 1814 |
1822 bool WebMediaPlayerAndroid::IsHLSStream() const { | 1815 bool WebMediaPlayerAndroid::IsHLSStream() const { |
1823 std::string mime; | 1816 std::string mime; |
1824 GURL url = redirected_url_.is_empty() ? url_ : redirected_url_; | 1817 GURL url = redirected_url_.is_empty() ? url_ : redirected_url_; |
1825 if (!net::GetMimeTypeFromFile(base::FilePath(url.path()), &mime)) | 1818 if (!net::GetMimeTypeFromFile(base::FilePath(url.path()), &mime)) |
1826 return false; | 1819 return false; |
1827 return !mime.compare("application/x-mpegurl"); | 1820 return !mime.compare("application/x-mpegurl"); |
1828 } | 1821 } |
1829 | 1822 |
1830 } // namespace content | 1823 } // namespace content |
OLD | NEW |