1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
6 #include "WebMediaPlayerClientImpl.h"
10 #include "AudioSourceProvider.h"
11 #include "AudioSourceProviderClient.h"
13 #include "GraphicsContext.h"
14 #include "HTMLMediaElement.h"
17 #include "MediaPlayer.h"
18 #include "NotImplemented.h"
19 #include "PlatformContextSkia.h"
20 #include "RenderView.h"
21 #include "TimeRanges.h"
22 #include "WebAudioSourceProvider.h"
23 #include "WebFrameClient.h"
24 #include "WebFrameImpl.h"
25 #include "WebHelperPluginImpl.h"
26 #include "WebMediaPlayer.h"
27 #include "WebViewImpl.h"
28 #include <public/Platform.h>
29 #include <public/WebCString.h>
30 #include <public/WebCanvas.h>
31 #include <public/WebMimeRegistry.h>
32 #include <public/WebRect.h>
33 #include <public/WebSize.h>
34 #include <public/WebString.h>
35 #include <public/WebURL.h>
37 #if USE(ACCELERATED_COMPOSITING)
38 #include "RenderLayerCompositor.h"
41 #include <wtf/Assertions.h>
42 #include <wtf/text/CString.h>
44 using namespace WebCore;
48 static PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(WebMediaPlayerClient* client, Frame* frame)
50 WebFrameImpl* webFrame = WebFrameImpl::fromFrame(frame);
52 if (!webFrame->client())
54 return adoptPtr(webFrame->client()->createMediaPlayer(webFrame, client));
57 bool WebMediaPlayerClientImpl::m_isEnabled = false;
59 bool WebMediaPlayerClientImpl::isEnabled()
64 void WebMediaPlayerClientImpl::setIsEnabled(bool isEnabled)
66 m_isEnabled = isEnabled;
69 void WebMediaPlayerClientImpl::registerSelf(MediaEngineRegistrar registrar)
72 registrar(WebMediaPlayerClientImpl::create,
73 WebMediaPlayerClientImpl::getSupportedTypes,
74 WebMediaPlayerClientImpl::supportsType,
81 WebMediaPlayer* WebMediaPlayerClientImpl::mediaPlayer() const
83 return m_webMediaPlayer.get();
86 // WebMediaPlayerClient --------------------------------------------------------
88 WebMediaPlayerClientImpl::~WebMediaPlayerClientImpl()
90 #if USE(ACCELERATED_COMPOSITING)
91 MutexLocker locker(m_compositingMutex);
92 if (m_videoFrameProviderClient)
93 m_videoFrameProviderClient->stopUsingProvider();
95 m_webMediaPlayer->setStreamTextureClient(0);
101 void WebMediaPlayerClientImpl::networkStateChanged()
103 ASSERT(m_mediaPlayer);
104 m_mediaPlayer->networkStateChanged();
107 void WebMediaPlayerClientImpl::readyStateChanged()
109 ASSERT(m_mediaPlayer);
110 m_mediaPlayer->readyStateChanged();
111 #if USE(ACCELERATED_COMPOSITING)
112 if (hasVideo() && supportsAcceleratedRendering() && m_videoLayer.isNull()) {
113 m_videoLayer = WebVideoLayer::create(this);
114 m_videoLayer.setOpaque(m_opaque);
119 void WebMediaPlayerClientImpl::volumeChanged(float newVolume)
121 ASSERT(m_mediaPlayer);
122 m_mediaPlayer->volumeChanged(newVolume);
125 void WebMediaPlayerClientImpl::muteChanged(bool newMute)
127 ASSERT(m_mediaPlayer);
128 m_mediaPlayer->muteChanged(newMute);
131 void WebMediaPlayerClientImpl::timeChanged()
133 ASSERT(m_mediaPlayer);
134 m_mediaPlayer->timeChanged();
137 void WebMediaPlayerClientImpl::repaint()
139 ASSERT(m_mediaPlayer);
140 #if USE(ACCELERATED_COMPOSITING)
141 if (!m_videoLayer.isNull() && supportsAcceleratedRendering())
142 m_videoLayer.invalidate();
144 m_mediaPlayer->repaint();
147 void WebMediaPlayerClientImpl::durationChanged()
149 ASSERT(m_mediaPlayer);
150 m_mediaPlayer->durationChanged();
153 void WebMediaPlayerClientImpl::rateChanged()
155 ASSERT(m_mediaPlayer);
156 m_mediaPlayer->rateChanged();
159 void WebMediaPlayerClientImpl::sizeChanged()
161 ASSERT(m_mediaPlayer);
162 m_mediaPlayer->sizeChanged();
165 void WebMediaPlayerClientImpl::setOpaque(bool opaque)
167 #if USE(ACCELERATED_COMPOSITING)
169 if (!m_videoLayer.isNull())
170 m_videoLayer.setOpaque(m_opaque);
174 void WebMediaPlayerClientImpl::sawUnsupportedTracks()
176 ASSERT(m_mediaPlayer);
177 m_mediaPlayer->mediaPlayerClient()->mediaPlayerSawUnsupportedTracks(m_mediaPlayer);
180 float WebMediaPlayerClientImpl::volume() const
183 return m_mediaPlayer->volume();
187 void WebMediaPlayerClientImpl::playbackStateChanged()
189 ASSERT(m_mediaPlayer);
190 m_mediaPlayer->playbackStateChanged();
193 WebMediaPlayer::Preload WebMediaPlayerClientImpl::preload() const
196 return static_cast<WebMediaPlayer::Preload>(m_mediaPlayer->preload());
197 return static_cast<WebMediaPlayer::Preload>(m_preload);
200 void WebMediaPlayerClientImpl::sourceOpened()
202 #if ENABLE(MEDIA_SOURCE)
203 ASSERT(m_mediaPlayer);
204 m_mediaPlayer->sourceOpened();
208 WebKit::WebURL WebMediaPlayerClientImpl::sourceURL() const
210 #if ENABLE(MEDIA_SOURCE)
211 ASSERT(m_mediaPlayer);
212 return KURL(ParsedURLString, m_mediaPlayer->sourceURL());
218 void WebMediaPlayerClientImpl::keyAdded(const WebString& keySystem, const WebString& sessionId)
220 #if ENABLE(ENCRYPTED_MEDIA)
221 ASSERT(m_mediaPlayer);
222 m_mediaPlayer->keyAdded(keySystem, sessionId);
224 UNUSED_PARAM(keySystem);
225 UNUSED_PARAM(sessionId);
229 void WebMediaPlayerClientImpl::keyError(const WebString& keySystem, const WebString& sessionId, MediaKeyErrorCode errorCode, unsigned short systemCode)
231 #if ENABLE(ENCRYPTED_MEDIA)
232 ASSERT(m_mediaPlayer);
233 m_mediaPlayer->keyError(keySystem, sessionId, static_cast<MediaPlayerClient::MediaKeyErrorCode>(errorCode), systemCode);
235 UNUSED_PARAM(keySystem);
236 UNUSED_PARAM(sessionId);
237 UNUSED_PARAM(errorCode);
238 UNUSED_PARAM(systemCode);
242 void WebMediaPlayerClientImpl::keyMessage(const WebString& keySystem, const WebString& sessionId, const unsigned char* message, unsigned messageLength)
244 #if ENABLE(ENCRYPTED_MEDIA)
245 ASSERT(m_mediaPlayer);
246 m_mediaPlayer->keyMessage(keySystem, sessionId, message, messageLength);
248 UNUSED_PARAM(keySystem);
249 UNUSED_PARAM(sessionId);
250 UNUSED_PARAM(message);
251 UNUSED_PARAM(messageLength);
255 void WebMediaPlayerClientImpl::keyNeeded(const WebString& keySystem, const WebString& sessionId, const unsigned char* initData, unsigned initDataLength)
257 #if ENABLE(ENCRYPTED_MEDIA)
258 ASSERT(m_mediaPlayer);
259 m_mediaPlayer->keyNeeded(keySystem, sessionId, initData, initDataLength);
261 UNUSED_PARAM(keySystem);
262 UNUSED_PARAM(sessionId);
263 UNUSED_PARAM(initData);
264 UNUSED_PARAM(initDataLength);
268 WebPlugin* WebMediaPlayerClientImpl::createHelperPlugin(const WebString& pluginType, WebFrame* frame)
270 ASSERT(!m_helperPlugin);
271 WebViewImpl* webView = static_cast<WebViewImpl*>(frame->view());
272 m_helperPlugin = webView->createHelperPlugin(pluginType);
276 WebPlugin* plugin = m_helperPlugin->getPlugin();
278 // There is no need to keep the helper plugin around and the caller
279 // should not be expected to call close after a failure (null pointer).
287 void WebMediaPlayerClientImpl::closeHelperPlugin()
289 ASSERT(m_helperPlugin);
290 m_helperPlugin->closeHelperPlugin();
294 void WebMediaPlayerClientImpl::disableAcceleratedCompositing()
296 m_supportsAcceleratedCompositing = false;
299 // MediaPlayerPrivateInterface -------------------------------------------------
301 void WebMediaPlayerClientImpl::load(const String& url)
305 if (m_preload == MediaPlayer::None) {
306 MutexLocker locker(m_compositingMutex);
307 #if ENABLE(WEB_AUDIO)
308 m_audioSourceProvider.wrap(0); // Clear weak reference to m_webMediaPlayer's WebAudioSourceProvider.
310 m_webMediaPlayer.clear();
311 m_delayingLoad = true;
316 void WebMediaPlayerClientImpl::loadInternal()
318 MutexLocker locker(m_compositingMutex);
319 #if ENABLE(WEB_AUDIO)
320 m_audioSourceProvider.wrap(0); // Clear weak reference to m_webMediaPlayer's WebAudioSourceProvider.
323 Frame* frame = static_cast<HTMLMediaElement*>(m_mediaPlayer->mediaPlayerClient())->document()->frame();
324 m_webMediaPlayer = createWebMediaPlayer(this, frame);
325 if (m_webMediaPlayer) {
326 #if ENABLE(WEB_AUDIO)
327 // Make sure if we create/re-create the WebMediaPlayer that we update our wrapper.
328 m_audioSourceProvider.wrap(m_webMediaPlayer->audioSourceProvider());
330 m_webMediaPlayer->load(
331 KURL(ParsedURLString, m_url),
332 static_cast<WebMediaPlayer::CORSMode>(m_mediaPlayer->mediaPlayerClient()->mediaPlayerCORSMode()));
336 void WebMediaPlayerClientImpl::cancelLoad()
338 if (m_webMediaPlayer)
339 m_webMediaPlayer->cancelLoad();
342 #if USE(ACCELERATED_COMPOSITING)
343 WebLayer* WebMediaPlayerClientImpl::platformLayer() const
345 ASSERT(m_supportsAcceleratedCompositing);
346 return const_cast<WebVideoLayer*>(&m_videoLayer);
350 PlatformMedia WebMediaPlayerClientImpl::platformMedia() const
353 pm.type = PlatformMedia::ChromiumMediaPlayerType;
354 pm.media.chromiumMediaPlayer = const_cast<WebMediaPlayerClientImpl*>(this);
358 void WebMediaPlayerClientImpl::play()
360 if (m_webMediaPlayer)
361 m_webMediaPlayer->play();
364 void WebMediaPlayerClientImpl::pause()
366 if (m_webMediaPlayer)
367 m_webMediaPlayer->pause();
370 #if USE(NATIVE_FULLSCREEN_VIDEO)
371 void WebMediaPlayerClientImpl::enterFullscreen()
373 if (m_webMediaPlayer)
374 m_webMediaPlayer->enterFullscreen();
377 void WebMediaPlayerClientImpl::exitFullscreen()
379 if (m_webMediaPlayer)
380 m_webMediaPlayer->exitFullscreen();
383 bool WebMediaPlayerClientImpl::canEnterFullscreen() const
385 return m_webMediaPlayer && m_webMediaPlayer->canEnterFullscreen();
389 #if ENABLE(MEDIA_SOURCE)
390 WebCore::MediaPlayer::AddIdStatus WebMediaPlayerClientImpl::sourceAddId(const String& id, const String& type, const Vector<String>& codecs)
392 if (!m_webMediaPlayer)
393 return WebCore::MediaPlayer::NotSupported;
395 return static_cast<WebCore::MediaPlayer::AddIdStatus>(m_webMediaPlayer->sourceAddId(id, type, codecs));
398 bool WebMediaPlayerClientImpl::sourceRemoveId(const String& id)
400 if (!m_webMediaPlayer)
403 return m_webMediaPlayer->sourceRemoveId(id);
406 PassRefPtr<TimeRanges> WebMediaPlayerClientImpl::sourceBuffered(const String& id)
408 if (!m_webMediaPlayer)
409 return TimeRanges::create();
411 WebTimeRanges webRanges = m_webMediaPlayer->sourceBuffered(id);
412 RefPtr<TimeRanges> ranges = TimeRanges::create();
413 for (size_t i = 0; i < webRanges.size(); ++i)
414 ranges->add(webRanges[i].start, webRanges[i].end);
415 return ranges.release();
418 bool WebMediaPlayerClientImpl::sourceAppend(const String& id, const unsigned char* data, unsigned length)
420 if (m_webMediaPlayer)
421 return m_webMediaPlayer->sourceAppend(id, data, length);
425 bool WebMediaPlayerClientImpl::sourceAbort(const String& id)
427 if (!m_webMediaPlayer)
430 return m_webMediaPlayer->sourceAbort(id);
433 void WebMediaPlayerClientImpl::sourceEndOfStream(WebCore::MediaPlayer::EndOfStreamStatus status)
435 if (m_webMediaPlayer)
436 m_webMediaPlayer->sourceEndOfStream(static_cast<WebMediaPlayer::EndOfStreamStatus>(status));
439 bool WebMediaPlayerClientImpl::sourceSetTimestampOffset(const String& id, double offset)
441 if (!m_webMediaPlayer)
443 return m_webMediaPlayer->sourceSetTimestampOffset(id, offset);
447 #if ENABLE(ENCRYPTED_MEDIA)
448 MediaPlayer::MediaKeyException WebMediaPlayerClientImpl::generateKeyRequest(const String& keySystem, const unsigned char* initData, unsigned initDataLength)
450 if (!m_webMediaPlayer)
451 return MediaPlayer::InvalidPlayerState;
453 WebMediaPlayer::MediaKeyException result = m_webMediaPlayer->generateKeyRequest(keySystem, initData, initDataLength);
454 return static_cast<MediaPlayer::MediaKeyException>(result);
457 MediaPlayer::MediaKeyException WebMediaPlayerClientImpl::addKey(const String& keySystem, const unsigned char* key, unsigned keyLength, const unsigned char* initData, unsigned initDataLength, const String& sessionId)
459 if (!m_webMediaPlayer)
460 return MediaPlayer::InvalidPlayerState;
462 WebMediaPlayer::MediaKeyException result = m_webMediaPlayer->addKey(keySystem, key, keyLength, initData, initDataLength, sessionId);
463 return static_cast<MediaPlayer::MediaKeyException>(result);
466 MediaPlayer::MediaKeyException WebMediaPlayerClientImpl::cancelKeyRequest(const String& keySystem, const String& sessionId)
468 if (!m_webMediaPlayer)
469 return MediaPlayer::InvalidPlayerState;
471 WebMediaPlayer::MediaKeyException result = m_webMediaPlayer->cancelKeyRequest(keySystem, sessionId);
472 return static_cast<MediaPlayer::MediaKeyException>(result);
476 void WebMediaPlayerClientImpl::prepareToPlay()
482 IntSize WebMediaPlayerClientImpl::naturalSize() const
484 if (m_webMediaPlayer)
485 return m_webMediaPlayer->naturalSize();
489 bool WebMediaPlayerClientImpl::hasVideo() const
491 if (m_webMediaPlayer)
492 return m_webMediaPlayer->hasVideo();
496 bool WebMediaPlayerClientImpl::hasAudio() const
498 if (m_webMediaPlayer)
499 return m_webMediaPlayer->hasAudio();
503 void WebMediaPlayerClientImpl::setVisible(bool visible)
505 if (m_webMediaPlayer)
506 m_webMediaPlayer->setVisible(visible);
509 float WebMediaPlayerClientImpl::duration() const
511 if (m_webMediaPlayer)
512 return m_webMediaPlayer->duration();
516 float WebMediaPlayerClientImpl::currentTime() const
518 if (m_webMediaPlayer)
519 return m_webMediaPlayer->currentTime();
523 void WebMediaPlayerClientImpl::seek(float time)
525 if (m_webMediaPlayer)
526 m_webMediaPlayer->seek(time);
529 bool WebMediaPlayerClientImpl::seeking() const
531 if (m_webMediaPlayer)
532 return m_webMediaPlayer->seeking();
536 void WebMediaPlayerClientImpl::setEndTime(float time)
538 if (m_webMediaPlayer)
539 m_webMediaPlayer->setEndTime(time);
542 void WebMediaPlayerClientImpl::setRate(float rate)
544 if (m_webMediaPlayer)
545 m_webMediaPlayer->setRate(rate);
548 bool WebMediaPlayerClientImpl::paused() const
550 if (m_webMediaPlayer)
551 return m_webMediaPlayer->paused();
555 bool WebMediaPlayerClientImpl::supportsFullscreen() const
557 if (m_webMediaPlayer)
558 return m_webMediaPlayer->supportsFullscreen();
562 bool WebMediaPlayerClientImpl::supportsSave() const
564 if (m_webMediaPlayer)
565 return m_webMediaPlayer->supportsSave();
569 void WebMediaPlayerClientImpl::setVolume(float volume)
571 if (m_webMediaPlayer)
572 m_webMediaPlayer->setVolume(volume);
575 MediaPlayer::NetworkState WebMediaPlayerClientImpl::networkState() const
577 if (m_webMediaPlayer)
578 return static_cast<MediaPlayer::NetworkState>(m_webMediaPlayer->networkState());
579 return MediaPlayer::Empty;
582 MediaPlayer::ReadyState WebMediaPlayerClientImpl::readyState() const
584 if (m_webMediaPlayer)
585 return static_cast<MediaPlayer::ReadyState>(m_webMediaPlayer->readyState());
586 return MediaPlayer::HaveNothing;
589 float WebMediaPlayerClientImpl::maxTimeSeekable() const
591 if (m_webMediaPlayer)
592 return m_webMediaPlayer->maxTimeSeekable();
596 PassRefPtr<TimeRanges> WebMediaPlayerClientImpl::buffered() const
598 if (m_webMediaPlayer) {
599 const WebTimeRanges& webRanges = m_webMediaPlayer->buffered();
601 // FIXME: Save the time ranges in a member variable and update it when needed.
602 RefPtr<TimeRanges> ranges = TimeRanges::create();
603 for (size_t i = 0; i < webRanges.size(); ++i)
604 ranges->add(webRanges[i].start, webRanges[i].end);
605 return ranges.release();
607 return TimeRanges::create();
610 int WebMediaPlayerClientImpl::dataRate() const
612 if (m_webMediaPlayer)
613 return m_webMediaPlayer->dataRate();
617 bool WebMediaPlayerClientImpl::totalBytesKnown() const
619 if (m_webMediaPlayer)
620 return m_webMediaPlayer->totalBytesKnown();
624 unsigned WebMediaPlayerClientImpl::totalBytes() const
626 if (m_webMediaPlayer)
627 return static_cast<unsigned>(m_webMediaPlayer->totalBytes());
631 bool WebMediaPlayerClientImpl::didLoadingProgress() const
633 return m_webMediaPlayer && m_webMediaPlayer->didLoadingProgress();
636 void WebMediaPlayerClientImpl::setSize(const IntSize& size)
638 if (m_webMediaPlayer)
639 m_webMediaPlayer->setSize(WebSize(size.width(), size.height()));
642 void WebMediaPlayerClientImpl::paint(GraphicsContext* context, const IntRect& rect)
644 #if USE(ACCELERATED_COMPOSITING)
645 // If we are using GPU to render video, ignore requests to paint frames into
646 // canvas because it will be taken care of by WebVideoLayer.
647 if (acceleratedRenderingInUse())
650 paintCurrentFrameInContext(context, rect);
653 void WebMediaPlayerClientImpl::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& rect)
655 // Normally GraphicsContext operations do nothing when painting is disabled.
656 // Since we're accessing platformContext() directly we have to manually
658 if (m_webMediaPlayer && !context->paintingDisabled()) {
659 PlatformGraphicsContext* platformContext = context->platformContext();
660 WebCanvas* canvas = platformContext->canvas();
661 m_webMediaPlayer->paint(canvas, rect, platformContext->getNormalizedAlpha());
665 void WebMediaPlayerClientImpl::setPreload(MediaPlayer::Preload preload)
669 if (m_webMediaPlayer)
670 m_webMediaPlayer->setPreload(static_cast<WebMediaPlayer::Preload>(preload));
672 if (m_delayingLoad && m_preload != MediaPlayer::None)
676 bool WebMediaPlayerClientImpl::hasSingleSecurityOrigin() const
678 if (m_webMediaPlayer)
679 return m_webMediaPlayer->hasSingleSecurityOrigin();
683 bool WebMediaPlayerClientImpl::didPassCORSAccessCheck() const
685 if (m_webMediaPlayer)
686 return m_webMediaPlayer->didPassCORSAccessCheck();
690 MediaPlayer::MovieLoadType WebMediaPlayerClientImpl::movieLoadType() const
692 if (m_webMediaPlayer)
693 return static_cast<MediaPlayer::MovieLoadType>(
694 m_webMediaPlayer->movieLoadType());
695 return MediaPlayer::Unknown;
698 float WebMediaPlayerClientImpl::mediaTimeForTimeValue(float timeValue) const
700 if (m_webMediaPlayer)
701 return m_webMediaPlayer->mediaTimeForTimeValue(timeValue);
705 unsigned WebMediaPlayerClientImpl::decodedFrameCount() const
707 if (m_webMediaPlayer)
708 return m_webMediaPlayer->decodedFrameCount();
712 unsigned WebMediaPlayerClientImpl::droppedFrameCount() const
714 if (m_webMediaPlayer)
715 return m_webMediaPlayer->droppedFrameCount();
719 unsigned WebMediaPlayerClientImpl::audioDecodedByteCount() const
721 if (m_webMediaPlayer)
722 return m_webMediaPlayer->audioDecodedByteCount();
726 unsigned WebMediaPlayerClientImpl::videoDecodedByteCount() const
728 if (m_webMediaPlayer)
729 return m_webMediaPlayer->videoDecodedByteCount();
733 #if ENABLE(WEB_AUDIO)
734 AudioSourceProvider* WebMediaPlayerClientImpl::audioSourceProvider()
736 return &m_audioSourceProvider;
740 #if USE(ACCELERATED_COMPOSITING)
741 bool WebMediaPlayerClientImpl::supportsAcceleratedRendering() const
743 return m_supportsAcceleratedCompositing;
746 bool WebMediaPlayerClientImpl::acceleratedRenderingInUse()
748 return !m_videoLayer.isNull() && m_videoLayer.active();
751 void WebMediaPlayerClientImpl::setVideoFrameProviderClient(WebVideoFrameProvider::Client* client)
753 MutexLocker locker(m_compositingMutex);
754 if (m_videoFrameProviderClient)
755 m_videoFrameProviderClient->stopUsingProvider();
756 m_videoFrameProviderClient = client;
757 if (m_webMediaPlayer)
758 m_webMediaPlayer->setStreamTextureClient(client ? this : 0);
761 WebVideoFrame* WebMediaPlayerClientImpl::getCurrentFrame()
763 MutexLocker locker(m_compositingMutex);
764 ASSERT(!m_currentVideoFrame);
765 if (m_webMediaPlayer)
766 m_currentVideoFrame = m_webMediaPlayer->getCurrentFrame();
767 return m_currentVideoFrame;
770 void WebMediaPlayerClientImpl::putCurrentFrame(WebVideoFrame* videoFrame)
772 MutexLocker locker(m_compositingMutex);
773 ASSERT(videoFrame == m_currentVideoFrame);
776 if (m_webMediaPlayer)
777 m_webMediaPlayer->putCurrentFrame(videoFrame);
778 m_currentVideoFrame = 0;
782 PassOwnPtr<MediaPlayerPrivateInterface> WebMediaPlayerClientImpl::create(MediaPlayer* player)
784 OwnPtr<WebMediaPlayerClientImpl> client = adoptPtr(new WebMediaPlayerClientImpl());
785 client->m_mediaPlayer = player;
787 #if USE(ACCELERATED_COMPOSITING)
788 Frame* frame = static_cast<HTMLMediaElement*>(
789 client->m_mediaPlayer->mediaPlayerClient())->document()->frame();
791 // This does not actually check whether the hardware can support accelerated
792 // compositing, but only if the flag is set. However, this is checked lazily
793 // in WebViewImpl::setIsAcceleratedCompositingActive() and will fail there
795 client->m_supportsAcceleratedCompositing =
796 frame->contentRenderer()->compositor()->hasAcceleratedCompositing();
799 return client.release();
802 void WebMediaPlayerClientImpl::getSupportedTypes(HashSet<String>& supportedTypes)
804 // FIXME: integrate this list with WebMediaPlayerClientImpl::supportsType.
808 #if ENABLE(ENCRYPTED_MEDIA)
809 MediaPlayer::SupportsType WebMediaPlayerClientImpl::supportsType(const String& type,
810 const String& codecs,
811 const String& keySystem,
815 MediaPlayer::SupportsType WebMediaPlayerClientImpl::supportsType(const String& type,
816 const String& codecs,
821 WebMimeRegistry::SupportsType supportsType = WebKit::Platform::current()->mimeRegistry()->supportsMediaMIMEType(type, codecs, keySystem);
823 switch (supportsType) {
825 ASSERT_NOT_REACHED();
826 case WebMimeRegistry::IsNotSupported:
827 return MediaPlayer::IsNotSupported;
828 case WebMimeRegistry::IsSupported:
829 return MediaPlayer::IsSupported;
830 case WebMimeRegistry::MayBeSupported:
831 return MediaPlayer::MayBeSupported;
833 return MediaPlayer::IsNotSupported;
836 void WebMediaPlayerClientImpl::startDelayedLoad()
838 ASSERT(m_delayingLoad);
839 ASSERT(!m_webMediaPlayer);
841 m_delayingLoad = false;
846 void WebMediaPlayerClientImpl::didReceiveFrame()
848 // No lock since this gets called on the client's thread.
849 m_videoFrameProviderClient->didReceiveFrame();
852 void WebMediaPlayerClientImpl::didUpdateMatrix(const float* matrix)
854 // No lock since this gets called on the client's thread.
855 m_videoFrameProviderClient->didUpdateMatrix(matrix);
858 WebMediaPlayerClientImpl::WebMediaPlayerClientImpl()
860 , m_currentVideoFrame(0)
861 , m_delayingLoad(false)
862 , m_preload(MediaPlayer::MetaData)
863 #if USE(ACCELERATED_COMPOSITING)
864 , m_supportsAcceleratedCompositing(false)
866 , m_videoFrameProviderClient(0)
871 #if ENABLE(WEB_AUDIO)
872 void WebMediaPlayerClientImpl::AudioSourceProviderImpl::wrap(WebAudioSourceProvider* provider)
874 m_webAudioSourceProvider = provider;
875 if (m_webAudioSourceProvider)
876 m_webAudioSourceProvider->setClient(m_client.get());
879 void WebMediaPlayerClientImpl::AudioSourceProviderImpl::setClient(AudioSourceProviderClient* client)
882 m_client = adoptPtr(new WebMediaPlayerClientImpl::AudioClientImpl(client));
886 if (m_webAudioSourceProvider)
887 m_webAudioSourceProvider->setClient(m_client.get());
890 void WebMediaPlayerClientImpl::AudioSourceProviderImpl::provideInput(AudioBus* bus, size_t framesToProcess)
896 if (!m_webAudioSourceProvider) {
901 // Wrap the AudioBus channel data using WebVector.
902 size_t n = bus->numberOfChannels();
903 WebVector<float*> webAudioData(n);
904 for (size_t i = 0; i < n; ++i)
905 webAudioData[i] = bus->channel(i)->mutableData();
907 m_webAudioSourceProvider->provideInput(webAudioData, framesToProcess);
910 void WebMediaPlayerClientImpl::AudioClientImpl::setFormat(size_t numberOfChannels, float sampleRate)
913 m_client->setFormat(numberOfChannels, sampleRate);
918 } // namespace WebKit
920 #endif // ENABLE(VIDEO)