diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-09-13 12:51:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-19 20:50:05 +0200 |
commit | d441d6f39bb846989d95bcf5caf387b42414718d (patch) | |
tree | e367e64a75991c554930278175d403c072de6bb8 /Source/WebCore/platform/graphics/MediaPlayer.cpp | |
parent | 0060b2994c07842f4c59de64b5e3e430525c4b90 (diff) | |
download | qtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz |
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit.
Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebCore/platform/graphics/MediaPlayer.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/MediaPlayer.cpp | 304 |
1 files changed, 192 insertions, 112 deletions
diff --git a/Source/WebCore/platform/graphics/MediaPlayer.cpp b/Source/WebCore/platform/graphics/MediaPlayer.cpp index d643223b0..3b0d63f7e 100644 --- a/Source/WebCore/platform/graphics/MediaPlayer.cpp +++ b/Source/WebCore/platform/graphics/MediaPlayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. + * Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -44,6 +44,10 @@ #include "InbandTextTrackPrivate.h" #endif +#if ENABLE(MEDIA_SOURCE) +#include "MediaSource.h" +#endif + #if PLATFORM(QT) #include <QtGlobal> #endif @@ -53,12 +57,11 @@ #define PlatformMediaEngineClassName MediaPlayerPrivateGStreamer #endif -#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT)) +#if PLATFORM(MAC) #include "MediaPlayerPrivateQTKit.h" #if USE(AVFOUNDATION) #include "MediaPlayerPrivateAVFoundationObjC.h" #endif -#define PlatformMediaEngineClassName MediaPlayerPrivateQTKit #elif OS(WINCE) && !PLATFORM(QT) #include "MediaPlayerPrivateWinCE.h" #define PlatformMediaEngineClassName MediaPlayerPrivate @@ -73,9 +76,6 @@ #include "MediaPlayerPrivateQt.h" #define PlatformMediaEngineClassName MediaPlayerPrivateQt #endif -#elif PLATFORM(CHROMIUM) -#include "MediaPlayerPrivateChromium.h" -#define PlatformMediaEngineClassName MediaPlayerPrivate #elif PLATFORM(BLACKBERRY) #include "MediaPlayerPrivateBlackBerry.h" #define PlatformMediaEngineClassName MediaPlayerPrivate @@ -92,6 +92,9 @@ public: NullMediaPlayerPrivate(MediaPlayer*) { } virtual void load(const String&) { } +#if ENABLE(MEDIA_SOURCE) + virtual void load(const String&, PassRefPtr<MediaSource>) { } +#endif virtual void cancelLoad() { } virtual void prepareToPlay() { } @@ -110,17 +113,17 @@ public: virtual void setVisible(bool) { } - virtual float duration() const { return 0; } + virtual double durationDouble() const { return 0; } - virtual float currentTime() const { return 0; } - virtual void seek(float) { } + virtual double currentTimeDouble() const { return 0; } + virtual void seekDouble(double) { } virtual bool seeking() const { return false; } - virtual void setRate(float) { } + virtual void setRateDouble(double) { } virtual void setPreservesPitch(bool) { } virtual bool paused() const { return false; } - virtual void setVolume(float) { } + virtual void setVolumeDouble(double) { } virtual bool supportsMuting() const { return false; } virtual void setMuted(bool) { } @@ -131,7 +134,8 @@ public: virtual MediaPlayer::NetworkState networkState() const { return MediaPlayer::Empty; } virtual MediaPlayer::ReadyState readyState() const { return MediaPlayer::HaveNothing; } - virtual float maxTimeSeekable() const { return 0; } + virtual double maxTimeSeekableDouble() const { return 0; } + virtual double minTimeSeekable() const { return 0; } virtual PassRefPtr<TimeRanges> buffered() const { return TimeRanges::create(); } virtual unsigned totalBytes() const { return 0; } @@ -152,17 +156,6 @@ public: virtual bool hasSingleSecurityOrigin() const { return true; } -#if ENABLE(MEDIA_SOURCE) - virtual MediaPlayer::AddIdStatus sourceAddId(const String& id, const String& type, const Vector<String>& codecs) { return MediaPlayer::NotSupported; } - virtual PassRefPtr<TimeRanges> sourceBuffered(const String&) { return TimeRanges::create(); } - virtual bool sourceRemoveId(const String&) { return false; } - virtual bool sourceAppend(const String&, const unsigned char*, unsigned) { return false; } - virtual bool sourceAbort(const String&) { return false; } - virtual void sourceSetDuration(double) { } - virtual void sourceEndOfStream(MediaPlayer::EndOfStreamStatus) { } - virtual bool sourceSetTimestampOffset(const String&, double) { return false; } -#endif - #if ENABLE(ENCRYPTED_MEDIA) virtual MediaPlayer::MediaKeyException generateKeyRequest(const String&, const unsigned char*, unsigned) OVERRIDE { return MediaPlayer::InvalidPlayerState; } virtual MediaPlayer::MediaKeyException addKey(const String&, const unsigned char*, unsigned, const unsigned char*, unsigned, const String&) OVERRIDE { return MediaPlayer::InvalidPlayerState; } @@ -205,11 +198,18 @@ static void addMediaEngine(CreateMediaEnginePlayer, MediaEngineSupportedTypes, M static MediaPlayerFactory* bestMediaEngineForTypeAndCodecs(const String& type, const String& codecs, const String& keySystem, const KURL&, MediaPlayerFactory* current = 0); static MediaPlayerFactory* nextMediaEngine(MediaPlayerFactory* current); -static Vector<MediaPlayerFactory*>& installedMediaEngines() +enum RequeryEngineOptions { DoNotResetEngines, ResetEngines }; +static Vector<MediaPlayerFactory*>& installedMediaEngines(RequeryEngineOptions requeryFlags = DoNotResetEngines ) { DEFINE_STATIC_LOCAL(Vector<MediaPlayerFactory*>, installedEngines, ()); static bool enginesQueried = false; + if (requeryFlags == ResetEngines) { + installedEngines.clear(); + enginesQueried = false; + return installedEngines; + } + if (!enginesQueried) { enginesQueried = true; @@ -223,6 +223,11 @@ static Vector<MediaPlayerFactory*>& installedMediaEngines() } #endif +#if PLATFORM(MAC) + if (Settings::isQTKitEnabled()) + MediaPlayerPrivateQTKit::registerMediaEngine(addMediaEngine); +#endif + #if defined(PlatformMediaEngineClassName) PlatformMediaEngineClassName::registerMediaEngine(addMediaEngine); #endif @@ -285,7 +290,7 @@ static MediaPlayerFactory* bestMediaEngineForTypeAndCodecs(const String& type, c current = 0; continue; } -#if ENABLE(ENCRYPTED_MEDIA) +#if ENABLE(ENCRYPTED_MEDIA) || ENABLE(ENCRYPTED_MEDIA_V2) MediaPlayer::SupportsType engineSupport = engines[ndx]->supportsTypeAndCodecs(type, codecs, keySystem, url); #else UNUSED_PARAM(keySystem); @@ -362,6 +367,10 @@ bool MediaPlayer::load(const KURL& url, const ContentType& contentType, const St m_keySystem = keySystem.lower(); m_contentMIMETypeWasInferredFromExtension = false; +#if ENABLE(MEDIA_SOURCE) + m_mediaSource = 0; +#endif + // If the MIME type is missing or is not meaningful, try to figure it out from the URL. if (m_contentMIMEType.isEmpty() || m_contentMIMEType == applicationOctetStream() || m_contentMIMEType == textPlain()) { if (m_url.protocolIsData()) @@ -384,6 +393,20 @@ bool MediaPlayer::load(const KURL& url, const ContentType& contentType, const St return m_currentMediaEngine; } +#if ENABLE(MEDIA_SOURCE) +bool MediaPlayer::load(const KURL& url, PassRefPtr<MediaSource> mediaSource) +{ + m_mediaSource = mediaSource; + m_contentMIMEType = ""; + m_contentTypeCodecs = ""; + m_url = url; + m_keySystem = ""; + m_contentMIMETypeWasInferredFromExtension = false; + loadWithNextMediaEngine(0); + return m_currentMediaEngine; +} +#endif + void MediaPlayer::loadWithNextMediaEngine(MediaPlayerFactory* current) { MediaPlayerFactory* engine = 0; @@ -415,9 +438,14 @@ void MediaPlayer::loadWithNextMediaEngine(MediaPlayerFactory* current) m_private->prepareForRendering(); } - if (m_private) + if (m_private) { +#if ENABLE(MEDIA_SOURCE) + if (m_mediaSource) + m_private->load(m_url.string(), m_mediaSource); + else +#endif m_private->load(m_url.string()); - else { + } else { m_private = createNullMediaPlayer(this); if (m_mediaPlayerClient) { m_mediaPlayerClient->mediaPlayerEngineUpdated(this); @@ -467,49 +495,6 @@ void MediaPlayer::pause() m_private->pause(); } -#if ENABLE(MEDIA_SOURCE) - -MediaPlayer::AddIdStatus MediaPlayer::sourceAddId(const String& id, const String& type, const Vector<String>& codecs) -{ - return m_private->sourceAddId(id, type, codecs); -} - -PassRefPtr<TimeRanges> MediaPlayer::sourceBuffered(const String& id) -{ - return m_private->sourceBuffered(id); -} - -bool MediaPlayer::sourceRemoveId(const String& id) -{ - return m_private->sourceRemoveId(id); -} - -bool MediaPlayer::sourceAppend(const String& id, const unsigned char* data, unsigned length) -{ - return m_private->sourceAppend(id, data, length); -} - -bool MediaPlayer::sourceAbort(const String& id) -{ - return m_private->sourceAbort(id); -} - -void MediaPlayer::sourceSetDuration(double duration) -{ - m_private->sourceSetDuration(duration); -} - -void MediaPlayer::sourceEndOfStream(MediaPlayer::EndOfStreamStatus status) -{ - return m_private->sourceEndOfStream(status); -} - -bool MediaPlayer::sourceSetTimestampOffset(const String& id, double offset) -{ - return m_private->sourceSetTimestampOffset(id, offset); -} -#endif - #if ENABLE(ENCRYPTED_MEDIA) MediaPlayer::MediaKeyException MediaPlayer::generateKeyRequest(const String& keySystem, const unsigned char* initData, unsigned initDataLength) { @@ -527,14 +512,14 @@ MediaPlayer::MediaKeyException MediaPlayer::cancelKeyRequest(const String& keySy } #endif -float MediaPlayer::duration() const +double MediaPlayer::duration() const { - return m_private->duration(); + return m_private->durationDouble(); } -float MediaPlayer::startTime() const +double MediaPlayer::startTime() const { - return m_private->startTime(); + return m_private->startTimeDouble(); } double MediaPlayer::initialTime() const @@ -542,14 +527,14 @@ double MediaPlayer::initialTime() const return m_private->initialTime(); } -float MediaPlayer::currentTime() const +double MediaPlayer::currentTime() const { - return m_private->currentTime(); + return m_private->currentTimeDouble(); } -void MediaPlayer::seek(float time) +void MediaPlayer::seek(double time) { - m_private->seek(time); + m_private->seekDouble(time); } bool MediaPlayer::paused() const @@ -622,17 +607,17 @@ MediaPlayer::ReadyState MediaPlayer::readyState() return m_private->readyState(); } -float MediaPlayer::volume() const +double MediaPlayer::volume() const { return m_volume; } -void MediaPlayer::setVolume(float volume) +void MediaPlayer::setVolume(double volume) { m_volume = volume; if (m_private->supportsMuting() || !m_muted) - m_private->setVolume(volume); + m_private->setVolumeDouble(volume); } bool MediaPlayer::muted() const @@ -660,15 +645,15 @@ void MediaPlayer::setClosedCaptionsVisible(bool closedCaptionsVisible) m_private->setClosedCaptionsVisible(closedCaptionsVisible); } -float MediaPlayer::rate() const +double MediaPlayer::rate() const { return m_rate; } -void MediaPlayer::setRate(float rate) +void MediaPlayer::setRate(double rate) { m_rate = rate; - m_private->setRate(rate); + m_private->setRateDouble(rate); } bool MediaPlayer::preservesPitch() const @@ -692,9 +677,14 @@ PassRefPtr<TimeRanges> MediaPlayer::seekable() return m_private->seekable(); } -float MediaPlayer::maxTimeSeekable() +double MediaPlayer::maxTimeSeekable() { - return m_private->maxTimeSeekable(); + return m_private->maxTimeSeekableDouble(); +} + +double MediaPlayer::minTimeSeekable() +{ + return m_private->minTimeSeekable(); } bool MediaPlayer::didLoadingProgress() @@ -740,6 +730,11 @@ void MediaPlayer::paintCurrentFrameInContext(GraphicsContext* p, const IntRect& m_private->paintCurrentFrameInContext(p, r); } +bool MediaPlayer::copyVideoTextureToPlatformTexture(GraphicsContext3D* context, Platform3DObject texture, GC3Dint level, GC3Denum type, GC3Denum internalFormat, bool premultiplyAlpha, bool flipY) +{ + return m_private->copyVideoTextureToPlatformTexture(context, texture, level, type, internalFormat, premultiplyAlpha, flipY); +} + MediaPlayer::SupportsType MediaPlayer::supportsType(const ContentType& contentType, const String& keySystem, const KURL& url, const MediaPlayerSupportsTypeClient* client) { String type = contentType.type().lower(); @@ -774,7 +769,7 @@ MediaPlayer::SupportsType MediaPlayer::supportsType(const ContentType& contentTy UNUSED_PARAM(client); #endif -#if ENABLE(ENCRYPTED_MEDIA) +#if ENABLE(ENCRYPTED_MEDIA) || ENABLE(ENCRYPTED_MEDIA_V2) return engine->supportsTypeAndCodecs(type, typeCodecs, system, url); #else ASSERT(system.isEmpty()); @@ -862,9 +857,9 @@ MediaPlayer::MovieLoadType MediaPlayer::movieLoadType() const return m_private->movieLoadType(); } -float MediaPlayer::mediaTimeForTimeValue(float timeValue) const +double MediaPlayer::mediaTimeForTimeValue(double timeValue) const { - return m_private->mediaTimeForTimeValue(timeValue); + return m_private->mediaTimeForTimeValueDouble(timeValue); } double MediaPlayer::maximumDurationToCacheMediaTime() const @@ -907,7 +902,7 @@ void MediaPlayer::getSitesInMediaCache(Vector<String>& sites) continue; Vector<String> engineSites; engines[i]->getSitesInMediaCache(engineSites); - sites.append(engineSites); + sites.appendVector(engineSites); } } @@ -937,21 +932,6 @@ void MediaPlayer::setPrivateBrowsingMode(bool privateBrowsingMode) m_private->setPrivateBrowsingMode(m_privateBrowsing); } -#if ENABLE(MEDIA_SOURCE) -void MediaPlayer::sourceOpened() -{ - if (m_mediaPlayerClient) - m_mediaPlayerClient->mediaPlayerSourceOpened(); -} - -String MediaPlayer::sourceURL() const -{ - if (m_mediaPlayerClient) - return m_mediaPlayerClient->mediaPlayerSourceURL(); - return String(); -} -#endif - // Client callbacks. void MediaPlayer::networkStateChanged() { @@ -975,7 +955,7 @@ void MediaPlayer::readyStateChanged() m_mediaPlayerClient->mediaPlayerReadyStateChanged(this); } -void MediaPlayer::volumeChanged(float newVolume) +void MediaPlayer::volumeChanged(double newVolume) { m_volume = newVolume; if (m_mediaPlayerClient) @@ -1057,10 +1037,10 @@ void MediaPlayer::keyError(const String& keySystem, const String& sessionId, Med m_mediaPlayerClient->mediaPlayerKeyError(this, keySystem, sessionId, errorCode, systemCode); } -void MediaPlayer::keyMessage(const String& keySystem, const String& sessionId, const unsigned char* message, unsigned messageLength) +void MediaPlayer::keyMessage(const String& keySystem, const String& sessionId, const unsigned char* message, unsigned messageLength, const KURL& defaultURL) { if (m_mediaPlayerClient) - m_mediaPlayerClient->mediaPlayerKeyMessage(this, keySystem, sessionId, message, messageLength); + m_mediaPlayerClient->mediaPlayerKeyMessage(this, keySystem, sessionId, message, messageLength, defaultURL); } bool MediaPlayer::keyNeeded(const String& keySystem, const String& sessionId, const unsigned char* initData, unsigned initDataLength) @@ -1071,6 +1051,15 @@ bool MediaPlayer::keyNeeded(const String& keySystem, const String& sessionId, co } #endif +#if ENABLE(ENCRYPTED_MEDIA_V2) +bool MediaPlayer::keyNeeded(Uint8Array* initData) +{ + if (m_mediaPlayerClient) + return m_mediaPlayerClient->mediaPlayerKeyNeeded(this, initData); + return false; +} +#endif + String MediaPlayer::referrer() const { if (!m_mediaPlayerClient) @@ -1114,17 +1103,108 @@ CachedResourceLoader* MediaPlayer::cachedResourceLoader() } #if ENABLE(VIDEO_TRACK) -void MediaPlayer::getTextTracks(Vector<RefPtr<InbandTextTrackPrivate> >& tracks) +void MediaPlayer::addAudioTrack(PassRefPtr<AudioTrackPrivate> track) +{ + if (!m_mediaPlayerClient) + return; + + m_mediaPlayerClient->mediaPlayerDidAddAudioTrack(track); +} + +void MediaPlayer::removeAudioTrack(PassRefPtr<AudioTrackPrivate> track) +{ + if (!m_mediaPlayerClient) + return; + + m_mediaPlayerClient->mediaPlayerDidRemoveAudioTrack(track); +} + +void MediaPlayer::addTextTrack(PassRefPtr<InbandTextTrackPrivate> track) { - m_private->getTextTracks(tracks); + if (!m_mediaPlayerClient) + return; + + m_mediaPlayerClient->mediaPlayerDidAddTextTrack(track); +} + +void MediaPlayer::removeTextTrack(PassRefPtr<InbandTextTrackPrivate> track) +{ + if (!m_mediaPlayerClient) + return; + + m_mediaPlayerClient->mediaPlayerDidRemoveTextTrack(track); } -void MediaPlayer::setTextTrackClient(TextTrackClient* client) +void MediaPlayer::addVideoTrack(PassRefPtr<VideoTrackPrivate> track) { - m_private->setTextTrackClient(client); + if (!m_mediaPlayerClient) + return; + + m_mediaPlayerClient->mediaPlayerDidAddVideoTrack(track); +} + +void MediaPlayer::removeVideoTrack(PassRefPtr<VideoTrackPrivate> track) +{ + if (!m_mediaPlayerClient) + return; + + m_mediaPlayerClient->mediaPlayerDidRemoveVideoTrack(track); +} + +bool MediaPlayer::requiresTextTrackRepresentation() const +{ + return m_private->requiresTextTrackRepresentation(); +} + +void MediaPlayer::setTextTrackRepresentation(TextTrackRepresentation* representation) +{ + m_private->setTextTrackRepresentation(representation); +} +#endif // ENABLE(VIDEO_TRACK) + +#if USE(PLATFORM_TEXT_TRACK_MENU) +bool MediaPlayer::implementsTextTrackControls() const +{ + return m_private->implementsTextTrackControls(); +} + +PassRefPtr<PlatformTextTrackMenuInterface> MediaPlayer::textTrackMenu() +{ + return m_private->textTrackMenu(); +} +#endif // USE(PLATFORM_TEXT_TRACK_MENU) + +void MediaPlayer::resetMediaEngines() +{ + installedMediaEngines(ResetEngines); +} + +#if USE(GSTREAMER) +void MediaPlayer::simulateAudioInterruption() +{ + if (!m_private) + return; + + m_private->simulateAudioInterruption(); } #endif +String MediaPlayer::languageOfPrimaryAudioTrack() const +{ + if (!m_private) + return emptyString(); + + return m_private->languageOfPrimaryAudioTrack(); +} + +size_t MediaPlayer::extraMemoryCost() const +{ + if (!m_private) + return 0; + + return m_private->extraMemoryCost(); +} + } #endif |