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