1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block This library is free software; you can redistribute it and/or 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block modify it under the terms of the GNU Library General Public 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block License as published by the Free Software Foundation; either 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block version 2 of the License, or (at your option) any later version. 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block This library is distributed in the hope that it will be useful, 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block but WITHOUT ANY WARRANTY; without even the implied warranty of 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Library General Public License for more details. 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block You should have received a copy of the GNU Library General Public License 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block along with this library; see the file COPYING.LIB. If not, write to 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Boston, MA 02110-1301, USA. 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block*/ 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "config.h" 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "MediaPlayerPrivateQt.h" 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FrameView.h" 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "GraphicsContext.h" 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HTMLMediaElement.h" 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HTMLVideoElement.h" 2768513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "NetworkingContext.h" 28f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "NotImplemented.h" 29a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "RenderVideo.h" 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "TimeRanges.h" 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "Widget.h" 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "qwebframe.h" 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "qwebpage.h" 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QGraphicsScene> 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QGraphicsVideoItem> 37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QMediaPlayerControl> 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QMediaService> 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QNetworkAccessManager> 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QNetworkCookieJar> 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QNetworkRequest> 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QPainter> 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QPoint> 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QRect> 45a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include <QStyleOptionGraphicsItem> 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QTime> 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QTimer> 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QUrl> 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <limits> 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/HashSet.h> 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h> 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 53a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if USE(ACCELERATED_COMPOSITING) 54a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "texmap/TextureMapperPlatformLayer.h" 55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif 56a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockusing namespace WTF; 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace WebCore { 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 61bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenMediaPlayerPrivateInterface* MediaPlayerPrivateQt::create(MediaPlayer* player) 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 63bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return new MediaPlayerPrivateQt(player); 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 66bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::registerMediaEngine(MediaEngineRegistrar registrar) 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch registrar(create, getSupportedTypes, supportsType, 0, 0, 0); 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 71bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::getSupportedTypes(HashSet<String> &supported) 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QStringList types = QMediaPlayer::supportedMimeTypes(); 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block for (int i = 0; i < types.size(); i++) { 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QString mime = types.at(i); 772bde8e466a4451c7319e3a072d118917957d6554Steve Block if (mime.startsWith(QString::fromLatin1("audio/")) || mime.startsWith(QString::fromLatin1("video/"))) 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block supported.add(mime); 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 82bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenMediaPlayer::SupportsType MediaPlayerPrivateQt::supportsType(const String& mime, const String& codec) 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!mime.startsWith("audio/") && !mime.startsWith("video/")) 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return MediaPlayer::IsNotSupported; 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Parse and trim codecs. 882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QString codecStr = codec; 892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QStringList codecList = codecStr.split(QLatin1Char(','), QString::SkipEmptyParts); 902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QStringList codecListTrimmed; 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch foreach (const QString& codecStrNotTrimmed, codecList) { 922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch QString codecStrTrimmed = codecStrNotTrimmed.trimmed(); 932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!codecStrTrimmed.isEmpty()) 942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch codecListTrimmed.append(codecStrTrimmed); 952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (QMediaPlayer::hasSupport(mime, codecListTrimmed) >= QtMultimediaKit::ProbablySupported) 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return MediaPlayer::IsSupported; 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return MediaPlayer::MayBeSupported; 101dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 103bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenMediaPlayerPrivateQt::MediaPlayerPrivateQt(MediaPlayer* player) 104bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen : m_webCorePlayer(player) 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_mediaPlayer(new QMediaPlayer) 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_mediaPlayerControl(0) 107dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_videoItem(new QGraphicsVideoItem) 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_videoScene(new QGraphicsScene) 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_networkState(MediaPlayer::Empty) 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_readyState(MediaPlayer::HaveNothing) 111a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_currentSize(0, 0) 112a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch , m_naturalSize(RenderVideo::defaultSize()) 113dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_isVisible(false) 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_isSeeking(false) 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_composited(false) 116f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick , m_preload(MediaPlayer::Auto) 11781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch , m_suppressNextPlaybackChanged(false) 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_mediaPlayer->setVideoOutput(m_videoItem); 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_videoScene->addItem(m_videoItem); 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 122dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Signal Handlers 123dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_mediaPlayer, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), 124dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(mediaStatusChanged(QMediaPlayer::MediaStatus))); 125dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), 126dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(stateChanged(QMediaPlayer::State))); 127dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_mediaPlayer, SIGNAL(error(QMediaPlayer::Error)), 128dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(handleError(QMediaPlayer::Error))); 129f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick connect(m_mediaPlayer, SIGNAL(bufferStatusChanged(int)), 130f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick this, SLOT(bufferStatusChanged(int))); 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_mediaPlayer, SIGNAL(durationChanged(qint64)), 132dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(durationChanged(qint64))); 133dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_mediaPlayer, SIGNAL(positionChanged(qint64)), 134dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(positionChanged(qint64))); 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_mediaPlayer, SIGNAL(volumeChanged(int)), 136dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(volumeChanged(int))); 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_mediaPlayer, SIGNAL(mutedChanged(bool)), 138dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(mutedChanged(bool))); 139dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_videoScene, SIGNAL(changed(QList<QRectF>)), 140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(repaint())); 141dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block connect(m_videoItem, SIGNAL(nativeSizeChanged(QSizeF)), 142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block this, SLOT(nativeSizeChanged(QSizeF))); 143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 144dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Grab the player control 145a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (QMediaService* service = m_mediaPlayer->service()) { 146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayerControl = qobject_cast<QMediaPlayerControl *>( 147e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke service->requestControl(QMediaPlayerControl_iid)); 148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 151bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenMediaPlayerPrivateQt::~MediaPlayerPrivateQt() 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 153a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_mediaPlayer->disconnect(this); 154a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_mediaPlayer->stop(); 155a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_mediaPlayer->setMedia(QMediaContent()); 156a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block delete m_mediaPlayer; 158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block delete m_videoScene; 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 161bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenbool MediaPlayerPrivateQt::hasVideo() const 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 163dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_mediaPlayer->isVideoAvailable(); 164dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 166bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenbool MediaPlayerPrivateQt::hasAudio() const 167dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 168dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 169dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 170dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 171bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::load(const String& url) 172dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 173f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick m_mediaUrl = url; 174f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 175f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick // QtMultimedia does not have an API to throttle loading 176f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick // so we handle this ourselves by delaying the load 177f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (m_preload == MediaPlayer::None) { 178f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick m_delayingLoad = true; 179f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 180f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick } 181f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 182f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick commitLoad(url); 183f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 184f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 185bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::commitLoad(const String& url) 186f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // We are now loading 188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_networkState != MediaPlayer::Loading) { 189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::Loading; 190bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->networkStateChanged(); 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // And we don't have any data yet 194dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_readyState != MediaPlayer::HaveNothing) { 195dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveNothing; 196bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->readyStateChanged(); 197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 19981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch KURL kUrl(ParsedURLString, url); 20081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch const QUrl rUrl = kUrl; 201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block const QString scheme = rUrl.scheme().toLower(); 202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Grab the client media element 204bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen HTMLMediaElement* element = static_cast<HTMLMediaElement*>(m_webCorePlayer->mediaPlayerClient()); 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Construct the media content with a network request if the resource is http[s] 2072bde8e466a4451c7319e3a072d118917957d6554Steve Block if (scheme == QString::fromLatin1("http") || scheme == QString::fromLatin1("https")) { 208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QNetworkRequest request = QNetworkRequest(rUrl); 209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Grab the current document 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Document* document = element->document(); 212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!document) 213dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block document = element->ownerDocument(); 214dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Grab the frame and network manager 216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Frame* frame = document ? document->frame() : 0; 217ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch FrameLoader* frameLoader = frame ? frame->loader() : 0; 218ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch QNetworkAccessManager* manager = frameLoader ? frameLoader->networkingContext()->networkAccessManager() : 0; 219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 220ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (manager) { 221dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Set the cookies 22281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QNetworkCookieJar* jar = manager->cookieJar(); 22381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch QList<QNetworkCookie> cookies = jar->cookiesForUrl(rUrl); 224dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Don't set the header if there are no cookies. 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // This prevents a warning from being emitted. 227dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!cookies.isEmpty()) 2282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block request.setHeader(QNetworkRequest::CookieHeader, QVariant::fromValue(cookies)); 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Set the refferer, but not when requesting insecure content from a secure page 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QUrl documentUrl = QUrl(QString(document->documentURI())); 2322bde8e466a4451c7319e3a072d118917957d6554Steve Block if (documentUrl.scheme().toLower() == QString::fromLatin1("http") || scheme == QString::fromLatin1("https")) 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block request.setRawHeader("Referer", documentUrl.toEncoded()); 234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Set the user agent 236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block request.setRawHeader("User-Agent", frameLoader->userAgent(rUrl).utf8().data()); 237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setMedia(QMediaContent(request)); 240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else { 241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Otherwise, just use the URL 242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setMedia(QMediaContent(rUrl)); 243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Set the current volume and mute status 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // We get these from the element, rather than the player, in case we have 247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // transitioned from a media engine which doesn't support muting, to a media 248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // engine which does. 249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setMuted(element->muted()); 250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setVolume(static_cast<int>(element->volume() * 100.0)); 251f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 25281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Don't send PlaybackChanged notification for pre-roll. 25381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_suppressNextPlaybackChanged = true; 25481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 255f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick // Setting a media source will start loading the media, but we need 256f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick // to pre-roll as well to get video size-hints and buffer-status 257f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (element->paused()) 258f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick m_mediaPlayer->pause(); 259f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick else 260f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick m_mediaPlayer->play(); 261f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 262f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 263bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::resumeLoad() 264f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 265f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick m_delayingLoad = false; 266f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 267f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (!m_mediaUrl.isNull()) 268f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick commitLoad(m_mediaUrl); 269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 271bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::cancelLoad() 272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setMedia(QMediaContent()); 274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block updateStates(); 275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 276dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 277bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::prepareToPlay() 278f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 279f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (m_mediaPlayer->media().isNull() || m_delayingLoad) 280f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick resumeLoad(); 281f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 282f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 283bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::play() 284dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 285dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_mediaPlayer->state() != QMediaPlayer::PlayingState) 286dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->play(); 287dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 288dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 289bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::pause() 290dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 291dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_mediaPlayer->state() == QMediaPlayer::PlayingState) 292dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->pause(); 293dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 294dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 295bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenbool MediaPlayerPrivateQt::paused() const 296dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 297dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return (m_mediaPlayer->state() != QMediaPlayer::PlayingState); 298dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 299dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 300bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::seek(float position) 301dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 302dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!m_mediaPlayer->isSeekable()) 303dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 304dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 305dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_mediaPlayerControl && !m_mediaPlayerControl->availablePlaybackRanges().contains(position * 1000)) 306dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 307dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3082bde8e466a4451c7319e3a072d118917957d6554Steve Block m_isSeeking = true; 3092bde8e466a4451c7319e3a072d118917957d6554Steve Block m_mediaPlayer->setPosition(static_cast<qint64>(position * 1000)); 310dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 311dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 312bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenbool MediaPlayerPrivateQt::seeking() const 313dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 314dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_isSeeking; 315dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 316dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 317bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfloat MediaPlayerPrivateQt::duration() const 318dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 319dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_readyState < MediaPlayer::HaveMetadata) 320dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0.0f; 321dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 322dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float duration = m_mediaPlayer->duration() / 1000.0f; 323dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 324dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // We are streaming 325dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (duration <= 0.0f) 326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block duration = std::numeric_limits<float>::infinity(); 327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return duration; 329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 331bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfloat MediaPlayerPrivateQt::currentTime() const 332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 333a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return m_mediaPlayer->position() / 1000.0f; 334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 336bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenPassRefPtr<TimeRanges> MediaPlayerPrivateQt::buffered() const 337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RefPtr<TimeRanges> buffered = TimeRanges::create(); 339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!m_mediaPlayerControl) 341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return buffered; 342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QMediaTimeRange playbackRanges = m_mediaPlayerControl->availablePlaybackRanges(); 344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 345dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block foreach (const QMediaTimeInterval interval, playbackRanges.intervals()) { 346dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float rangeMin = static_cast<float>(interval.start()) / 1000.0f; 347dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block float rangeMax = static_cast<float>(interval.end()) / 1000.0f; 348dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block buffered->add(rangeMin, rangeMax); 349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 350dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 351dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return buffered.release(); 352dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 354bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenfloat MediaPlayerPrivateQt::maxTimeSeekable() const 355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!m_mediaPlayerControl) 357dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 359dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return static_cast<float>(m_mediaPlayerControl->availablePlaybackRanges().latestTime()) / 1000.0f; 360dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 361dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 362bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenunsigned MediaPlayerPrivateQt::bytesLoaded() const 363dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 364dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QLatin1String bytesLoadedKey("bytes-loaded"); 365dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_mediaPlayer->availableExtendedMetaData().contains(bytesLoadedKey)) 366dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_mediaPlayer->extendedMetaData(bytesLoadedKey).toInt(); 367dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 368f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return m_mediaPlayer->bufferStatus(); 369dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 370dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 371bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenunsigned MediaPlayerPrivateQt::totalBytes() const 372dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 373e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke if (m_mediaPlayer->availableMetaData().contains(QtMultimediaKit::Size)) 374e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke return m_mediaPlayer->metaData(QtMultimediaKit::Size).toInt(); 375dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 100; 377dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 379bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::setPreload(MediaPlayer::Preload preload) 380f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 381f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick m_preload = preload; 382f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (m_delayingLoad && m_preload != MediaPlayer::None) 383f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick resumeLoad(); 384f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 385f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 386bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::setRate(float rate) 387dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 388dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setPlaybackRate(rate); 389dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 390dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 391bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::setVolume(float volume) 392dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 393dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setVolume(static_cast<int>(volume * 100.0)); 394dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 395dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 396bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenbool MediaPlayerPrivateQt::supportsMuting() const 397dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 398dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 399dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 400dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 401bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::setMuted(bool muted) 402dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 403dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_mediaPlayer->setMuted(muted); 404dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 405dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 406bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenMediaPlayer::NetworkState MediaPlayerPrivateQt::networkState() const 407dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 408dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_networkState; 409dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 410dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 411bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenMediaPlayer::ReadyState MediaPlayerPrivateQt::readyState() const 412dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 413dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return m_readyState; 414dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 415dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 416bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::setVisible(bool visible) 417dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 418dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_isVisible = visible; 419dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 420dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 421bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::mediaStatusChanged(QMediaPlayer::MediaStatus) 422dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 423dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block updateStates(); 424dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 425dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 426bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::handleError(QMediaPlayer::Error) 427dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 428dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block updateStates(); 429dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 430dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 4312bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid MediaPlayerPrivateQt::stateChanged(QMediaPlayer::State) 432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 43381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!m_suppressNextPlaybackChanged) 43481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_webCorePlayer->playbackStateChanged(); 43581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch else 43681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_suppressNextPlaybackChanged = false; 437dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 438dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 439a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid MediaPlayerPrivateQt::nativeSizeChanged(const QSizeF& size) 440dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 441a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch LOG(Media, "MediaPlayerPrivateQt::naturalSizeChanged(%dx%d)", 442a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch size.toSize().width(), size.toSize().height()); 443a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 444a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!size.isValid()) 445a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 446a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 447a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_naturalSize = size.toSize(); 448bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->sizeChanged(); 449dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 450dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 451bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::positionChanged(qint64) 452dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 453a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Only propagate this event if we are seeking 4542bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_isSeeking) { 455dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_isSeeking = false; 4562bde8e466a4451c7319e3a072d118917957d6554Steve Block m_webCorePlayer->timeChanged(); 457dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 458dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 460bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::bufferStatusChanged(int) 461f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 462f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick notImplemented(); 463f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 464f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 465bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::durationChanged(qint64) 466dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 467bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->durationChanged(); 468dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 469dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 470bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::volumeChanged(int volume) 471dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 472bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->volumeChanged(static_cast<float>(volume) / 100.0); 473dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 474dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 475bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::mutedChanged(bool muted) 476dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 477bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->muteChanged(muted); 478dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 479dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 480bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::updateStates() 481dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 482dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Store the old states so that we can detect a change and raise change events 483dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MediaPlayer::NetworkState oldNetworkState = m_networkState; 484dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block MediaPlayer::ReadyState oldReadyState = m_readyState; 485dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 486dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QMediaPlayer::MediaStatus currentStatus = m_mediaPlayer->mediaStatus(); 487dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QMediaPlayer::Error currentError = m_mediaPlayer->error(); 488dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 489dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (currentError != QMediaPlayer::NoError) { 490dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveNothing; 491dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (currentError == QMediaPlayer::FormatError) 492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::FormatError; 493dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else 494dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::NetworkError; 495dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (currentStatus == QMediaPlayer::UnknownMediaStatus 496dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block || currentStatus == QMediaPlayer::NoMedia) { 497dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::Idle; 498dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveNothing; 499dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (currentStatus == QMediaPlayer::LoadingMedia) { 500dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::Loading; 501dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveNothing; 502dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (currentStatus == QMediaPlayer::LoadedMedia) { 503dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::Loading; 504dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveMetadata; 505dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (currentStatus == QMediaPlayer::BufferingMedia) { 506dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::Loading; 507dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveFutureData; 508dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (currentStatus == QMediaPlayer::StalledMedia) { 509dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::Loading; 510dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveCurrentData; 511dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (currentStatus == QMediaPlayer::BufferedMedia 512dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block || currentStatus == QMediaPlayer::EndOfMedia) { 5132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_networkState = MediaPlayer::Loaded; 514dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveEnoughData; 515dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } else if (currentStatus == QMediaPlayer::InvalidMedia) { 516dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_networkState = MediaPlayer::NetworkError; 517dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_readyState = MediaPlayer::HaveNothing; 518dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 519dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 520dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Log the state changes and raise the state change events 521dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // NB: The readyStateChanged event must come before the networkStateChanged event. 522dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Breaking this invariant will cause the resource selection algorithm for multiple 523dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // sources to fail. 524dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_readyState != oldReadyState) 525bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->readyStateChanged(); 526dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 527dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_networkState != oldNetworkState) 528bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->networkStateChanged(); 529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 530dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 531bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::setSize(const IntSize& size) 532dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 533a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch LOG(Media, "MediaPlayerPrivateQt::setSize(%dx%d)", 534a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch size.width(), size.height()); 535a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 536dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (size == m_currentSize) 537dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 538dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 539dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_currentSize = size; 540dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_videoItem->setSize(QSizeF(QSize(size))); 541dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 542dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 543bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenIntSize MediaPlayerPrivateQt::naturalSize() const 544dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 545a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!hasVideo() || m_readyState < MediaPlayer::HaveMetadata) { 546a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch LOG(Media, "MediaPlayerPrivateQt::naturalSize() -> 0x0 (!hasVideo || !haveMetaData)"); 547dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return IntSize(); 548a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 549dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 550a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch LOG(Media, "MediaPlayerPrivateQt::naturalSize() -> %dx%d (m_naturalSize)", 551a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_naturalSize.width(), m_naturalSize.height()); 552a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 553a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return m_naturalSize; 554dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 555dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid MediaPlayerPrivateQt::removeVideoItem() 55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_oldNaturalSize = m_naturalSize; 55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_mediaPlayer->setVideoOutput(static_cast<QGraphicsVideoItem*>(0)); 56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_videoScene->removeItem(m_videoItem); 56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid MediaPlayerPrivateQt::restoreVideoItem() 56465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 56565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_mediaPlayer->setVideoOutput(m_videoItem); 56665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_videoScene->addItem(m_videoItem); 56765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: a qtmobility bug, need to reset the size when restore the videoitem, otherwise the size is 0 56865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // http://bugreports.qt.nokia.com/browse/QTMOBILITY-971 56965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch nativeSizeChanged(QSize(m_oldNaturalSize)); 57065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 57165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 572bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::paint(GraphicsContext* context, const IntRect& rect) 573dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 574dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(ACCELERATED_COMPOSITING) 575dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (m_composited) 576dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 577dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 578dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (context->paintingDisabled()) 579dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 580dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 581dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!m_isVisible) 582dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 583dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 584dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QPainter* painter = context->platformContext(); 585dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_videoScene->render(painter, QRectF(QRect(rect)), m_videoItem->sceneBoundingRect()); 586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 587dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5882fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid MediaPlayerPrivateQt::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& rect) 5892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 5902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (context->paintingDisabled()) 5912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 5922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!m_isVisible) 5942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 5952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Grab the painter and widget 5972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block QPainter* painter = context->platformContext(); 5982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 5992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Render the video, using the item as it might not be in the scene 6002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_videoItem->paint(painter, 0, 0); 6012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 6022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 603bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::repaint() 604dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 605bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_webCorePlayer->repaint(); 606dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 607dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 608a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER) 609a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 6102bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass TextureMapperVideoLayerQt : public virtual TextureMapperMediaLayer { 611a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochpublic: 612a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch TextureMapperVideoLayerQt(QGraphicsVideoItem* videoItem) 613a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch : m_videoItem(videoItem) 614a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 615a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 616a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 617a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual void setPlatformLayerClient(TextureMapperLayerClient* client) 618a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 619a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_client = client; 620a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 621a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 622a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual void paint(GraphicsContext* context) 623a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 624a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!m_videoItem) 625a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return; 626a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 627a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch QStyleOptionGraphicsItem opt; 628a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch opt.exposedRect = m_videoItem.data()->sceneBoundingRect(); 629a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch opt.rect = opt.exposedRect.toRect(); 630a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_videoItem.data()->paint(context->platformContext(), &opt); 631a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 632a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 633a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual IntSize size() const 634a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch { 635a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return m_videoItem ? IntSize(m_videoItem.data()->size().width(), m_videoItem.data()->size().height()) : IntSize(); 636a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 637a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 638a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch QWeakPointer<QGraphicsVideoItem> m_videoItem; 639a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch TextureMapperLayerClient* m_client; 640a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}; 641a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 642a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 643bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid MediaPlayerPrivateQt::acceleratedRenderingStateChanged() 644dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 645bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen MediaPlayerClient* client = m_webCorePlayer->mediaPlayerClient(); 646bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool composited = client->mediaPlayerRenderingCanBeAccelerated(m_webCorePlayer); 647dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (composited == m_composited) 648dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 649dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 650dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_composited = composited; 651dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (composited) 652a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch m_platformLayer = new TextureMapperVideoLayerQt(m_videoItem); 653dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 654dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 655bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenPlatformLayer* MediaPlayerPrivateQt::platformLayer() const 656dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 657a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return m_composited ? m_platformLayer.get() : 0; 658dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 659dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 660dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 661bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian MonsenPlatformMedia MediaPlayerPrivateQt::platformMedia() const 6625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 6635abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick PlatformMedia pm; 6645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick pm.type = PlatformMedia::QtMediaPlayerType; 665bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen pm.media.qtMediaPlayer = const_cast<MediaPlayerPrivateQt*>(this); 6665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return pm; 6675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 6685abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 669dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} // namespace WebCore 670dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 671dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "moc_MediaPlayerPrivateQt.cpp" 672