15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright (c) 2009 The Chromium Authors. All rights reserved. 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 6f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebMediaPlayerClientImpl.h" 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLMediaElement.h" 1053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/TimeRanges.h" 1153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderView.h" 12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/rendering/compositing/RenderLayerCompositor.h" 13d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "modules/encryptedmedia/HTMLMediaElementEncryptedMedia.h" 14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "modules/encryptedmedia/MediaKeyNeededEvent.h" 1593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "modules/mediastream/MediaStreamRegistry.h" 1651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/audio/AudioBus.h" 1751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/audio/AudioSourceProviderClient.h" 181e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/IntSize.h" 19a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContext.h" 20a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsLayer.h" 2109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/graphics/gpu/Extensions3DUtil.h" 22a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/skia/GaneshUtils.h" 2309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/Platform.h" 241e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "public/platform/WebAudioSourceProvider.h" 2551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebCString.h" 265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebCanvas.h" 275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebCompositorSupport.h" 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebContentDecryptionModule.h" 2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebGraphicsContext3DProvider.h" 3051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebInbandTextTrack.h" 3151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebMediaPlayer.h" 325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebString.h" 345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURL.h" 35f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDocument.h" 36f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFrameClient.h" 37f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h" 38f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebViewImpl.h" 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 40521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)#if OS(ANDROID) 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "GrContext.h" 4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "GrTypes.h" 4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "SkCanvas.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "SkGrPixelRef.h" 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 48591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Assertions.h" 49591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/CString.h" 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccistatic PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(WebMediaPlayerClient* client, const WebURL& url, LocalFrame* frame, WebContentDecryptionModule* initialCdm) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!webFrame || !webFrame->client()) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return nullptr; 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptPtr(webFrame->client()->createMediaPlayer(webFrame, url, client, initialCdm)); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)WebMediaPlayer* WebMediaPlayerClientImpl::webMediaPlayer() const 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webMediaPlayer.get(); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebMediaPlayerClient -------------------------------------------------------- 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebMediaPlayerClientImpl::~WebMediaPlayerClientImpl() 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Explicitly destroy the WebMediaPlayer to allow verification of tear down. 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_webMediaPlayer.clear(); 7310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 7410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch HTMLMediaElementEncryptedMedia::playerDestroyed(mediaElement()); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::networkStateChanged() 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_client->mediaPlayerNetworkStateChanged(); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::readyStateChanged() 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 845267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_client->mediaPlayerReadyStateChanged(); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::timeChanged() 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 895267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_client->mediaPlayerTimeChanged(); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::repaint() 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_client->mediaPlayerRepaint(); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::durationChanged() 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_client->mediaPlayerDurationChanged(); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::sizeChanged() 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1045267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_client->mediaPlayerSizeChanged(); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::playbackStateChanged() 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1095267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) m_client->mediaPlayerPlaybackStateChanged(); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::keyAdded(const WebString& keySystem, const WebString& sessionId) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 114d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HTMLMediaElementEncryptedMedia::keyAdded(mediaElement(), keySystem, sessionId); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::keyError(const WebString& keySystem, const WebString& sessionId, MediaKeyErrorCode errorCode, unsigned short systemCode) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 119d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HTMLMediaElementEncryptedMedia::keyError(mediaElement(), keySystem, sessionId, errorCode, systemCode); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebMediaPlayerClientImpl::keyMessage(const WebString& keySystem, const WebString& sessionId, const unsigned char* message, unsigned messageLength, const WebURL& defaultURL) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 124d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HTMLMediaElementEncryptedMedia::keyMessage(mediaElement(), keySystem, sessionId, message, messageLength, defaultURL); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void WebMediaPlayerClientImpl::keyNeeded(const WebString& contentType, const unsigned char* initData, unsigned initDataLength) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 129d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) HTMLMediaElementEncryptedMedia::keyNeeded(mediaElement(), contentType, initData, initDataLength); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 132e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void WebMediaPlayerClientImpl::setWebLayer(WebLayer* layer) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 134a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_client->mediaPlayerSetWebLayer(layer); 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebMediaPlayer::TrackId WebMediaPlayerClientImpl::addAudioTrack(const WebString& id, AudioTrackKind kind, const WebString& label, const WebString& language, bool enabled) 1385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 1395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return mediaElement().addAudioTrack(id, kind, label, language, enabled); 1405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 1415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void WebMediaPlayerClientImpl::removeAudioTrack(WebMediaPlayer::TrackId id) 1435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 1445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) mediaElement().removeAudioTrack(id); 1455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 1465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebMediaPlayer::TrackId WebMediaPlayerClientImpl::addVideoTrack(const WebString& id, VideoTrackKind kind, const WebString& label, const WebString& language, bool selected) 1485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 1495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return mediaElement().addVideoTrack(id, kind, label, language, selected); 1505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 1515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 1525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void WebMediaPlayerClientImpl::removeVideoTrack(WebMediaPlayer::TrackId id) 1535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 1545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) mediaElement().removeVideoTrack(id); 1555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 1565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 15781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)void WebMediaPlayerClientImpl::addTextTrack(WebInbandTextTrack* textTrack) 15881a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles){ 159d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_client->mediaPlayerDidAddTextTrack(textTrack); 16081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)} 16181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 16281a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)void WebMediaPlayerClientImpl::removeTextTrack(WebInbandTextTrack* textTrack) 16381a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles){ 164d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_client->mediaPlayerDidRemoveTextTrack(textTrack); 16581a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)} 16681a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) 167c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)void WebMediaPlayerClientImpl::mediaSourceOpened(WebMediaSource* webMediaSource) 168e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 169e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) ASSERT(webMediaSource); 17009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_client->mediaPlayerMediaSourceOpened(webMediaSource); 171e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 172e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 1731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void WebMediaPlayerClientImpl::requestFullscreen() 1741e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 1751e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_client->mediaPlayerRequestFullscreen(); 1761e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 1771e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 178e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)void WebMediaPlayerClientImpl::requestSeek(double time) 179e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 180e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) m_client->mediaPlayerRequestSeek(time); 181e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 182e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 1837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebMediaPlayerClientImpl::remoteRouteAvailabilityChanged(bool routesAvailable) 1847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mediaElement().remoteRouteAvailabilityChanged(routesAvailable); 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebMediaPlayerClientImpl::connectedToRemoteDevice() 1897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mediaElement().connectedToRemoteDevice(); 1917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebMediaPlayerClientImpl::disconnectedFromRemoteDevice() 1947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mediaElement().disconnectedFromRemoteDevice(); 1967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1977242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)// MediaPlayer ------------------------------------------------- 19907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochvoid WebMediaPlayerClientImpl::load(WebMediaPlayer::LoadType loadType, const WTF::String& url, WebMediaPlayer::CORSMode corsMode) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 20107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(!m_webMediaPlayer); 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2035267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // FIXME: Remove this cast 204d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = mediaElement().document().frame(); 20553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebURL poster = m_client->mediaPlayerPosterURL(); 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 20807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch KURL kurl(ParsedURLString, url); 2097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_webMediaPlayer = createWebMediaPlayer(this, kurl, frame, HTMLMediaElementEncryptedMedia::contentDecryptionModule(mediaElement())); 21007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!m_webMediaPlayer) 21107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 21253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 21407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // Make sure if we create/re-create the WebMediaPlayer that we update our wrapper. 21507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_audioSourceProvider.wrap(m_webMediaPlayer->audioSourceProvider()); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 218e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) m_webMediaPlayer->setVolume(mediaElement().effectiveMediaVolume()); 219d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 22007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_webMediaPlayer->setPoster(poster); 221c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 22207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_webMediaPlayer->load(loadType, kurl, corsMode); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::setPreload(MediaPlayer::Preload preload) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webMediaPlayer) 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webMediaPlayer->setPreload(static_cast<WebMediaPlayer::Preload>(preload)); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)AudioSourceProvider* WebMediaPlayerClientImpl::audioSourceProvider() 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return &m_audioSourceProvider; 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)PassOwnPtr<MediaPlayer> WebMediaPlayerClientImpl::create(MediaPlayerClient* client) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return adoptPtr(new WebMediaPlayerClientImpl(client)); 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)WebMediaPlayerClientImpl::WebMediaPlayerClientImpl(MediaPlayerClient* client) 2445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) : m_client(client) 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2465267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ASSERT(m_client); 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 249e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)HTMLMediaElement& WebMediaPlayerClientImpl::mediaElement() const 250d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 251d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return *static_cast<HTMLMediaElement*>(m_client); 252d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 253d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(WEB_AUDIO) 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::AudioSourceProviderImpl::wrap(WebAudioSourceProvider* provider) 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 257e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) MutexLocker locker(provideInputLock); 258e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 259e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) if (m_webAudioSourceProvider && provider != m_webAudioSourceProvider) 260e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) m_webAudioSourceProvider->setClient(0); 261e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webAudioSourceProvider = provider; 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webAudioSourceProvider) 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webAudioSourceProvider->setClient(m_client.get()); 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::AudioSourceProviderImpl::setClient(AudioSourceProviderClient* client) 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 269e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) MutexLocker locker(provideInputLock); 270e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (client) 2729e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) m_client = new WebMediaPlayerClientImpl::AudioClientImpl(client); 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_client.clear(); 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webAudioSourceProvider) 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webAudioSourceProvider->setClient(m_client.get()); 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::AudioSourceProviderImpl::provideInput(AudioBus* bus, size_t framesToProcess) 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(bus); 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!bus) 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 286e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) MutexTryLocker tryLocker(provideInputLock); 287e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) if (!tryLocker.locked() || !m_webAudioSourceProvider || !m_client.get()) { 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bus->zero(); 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Wrap the AudioBus channel data using WebVector. 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t n = bus->numberOfChannels(); 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebVector<float*> webAudioData(n); 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < n; ++i) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webAudioData[i] = bus->channel(i)->mutableData(); 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webAudioSourceProvider->provideInput(webAudioData, framesToProcess); 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebMediaPlayerClientImpl::AudioClientImpl::setFormat(size_t numberOfChannels, float sampleRate) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_client) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_client->setFormat(numberOfChannels, sampleRate); 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 307c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void WebMediaPlayerClientImpl::AudioClientImpl::trace(Visitor* visitor) 308c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 309c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) visitor->trace(m_client); 310c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 311c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 31451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 315