summaryrefslogtreecommitdiff
path: root/Source/WebCore/platform/graphics/MediaPlayer.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Source/WebCore/platform/graphics/MediaPlayer.cpp
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-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.cpp304
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