Home | History | Annotate | Download | only in qt
      1 /*
      2     Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
      3 
      4     This library is free software; you can redistribute it and/or
      5     modify it under the terms of the GNU Library General Public
      6     License as published by the Free Software Foundation; either
      7     version 2 of the License, or (at your option) any later version.
      8 
      9     This library is distributed in the hope that it will be useful,
     10     but WITHOUT ANY WARRANTY; without even the implied warranty of
     11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12     Library General Public License for more details.
     13 
     14     You should have received a copy of the GNU Library General Public License
     15     along with this library; see the file COPYING.LIB.  If not, write to
     16     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     17     Boston, MA 02110-1301, USA.
     18 */
     19 
     20 #ifndef MediaPlayerPrivateQt_h
     21 #define MediaPlayerPrivateQt_h
     22 
     23 #include "MediaPlayerPrivate.h"
     24 
     25 #include <QMediaPlayer>
     26 #include <QObject>
     27 
     28 QT_BEGIN_NAMESPACE
     29 class QMediaPlayerControl;
     30 class QGraphicsVideoItem;
     31 class QGraphicsScene;
     32 QT_END_NAMESPACE
     33 
     34 namespace WebCore {
     35 
     36 class TextureMapperMediaLayer;
     37 
     38 class MediaPlayerPrivateQt : public QObject, public MediaPlayerPrivateInterface {
     39 
     40     Q_OBJECT
     41 
     42 public:
     43     static MediaPlayerPrivateInterface* create(MediaPlayer* player);
     44     ~MediaPlayerPrivateQt();
     45 
     46     static void registerMediaEngine(MediaEngineRegistrar);
     47     static void getSupportedTypes(HashSet<String>&);
     48     static MediaPlayer::SupportsType supportsType(const String&, const String&);
     49     static bool isAvailable() { return true; }
     50 
     51     bool hasVideo() const;
     52     bool hasAudio() const;
     53 
     54     void load(const String &url);
     55     void commitLoad(const String& url);
     56     void resumeLoad();
     57     void cancelLoad();
     58 
     59     void play();
     60     void pause();
     61     void prepareToPlay();
     62 
     63     bool paused() const;
     64     bool seeking() const;
     65 
     66     float duration() const;
     67     float currentTime() const;
     68     void seek(float);
     69 
     70     void setRate(float);
     71     void setVolume(float);
     72 
     73     bool supportsMuting() const;
     74     void setMuted(bool);
     75 
     76     void setPreload(MediaPlayer::Preload);
     77 
     78     MediaPlayer::NetworkState networkState() const;
     79     MediaPlayer::ReadyState readyState() const;
     80 
     81     PassRefPtr<TimeRanges> buffered() const;
     82     float maxTimeSeekable() const;
     83     unsigned bytesLoaded() const;
     84     unsigned totalBytes() const;
     85 
     86     void setVisible(bool);
     87 
     88     IntSize naturalSize() const;
     89     void setSize(const IntSize&);
     90 
     91     void paint(GraphicsContext*, const IntRect&);
     92     // reimplemented for canvas drawImage(HTMLVideoElement)
     93     void paintCurrentFrameInContext(GraphicsContext*, const IntRect&);
     94 
     95     bool supportsFullscreen() const { return true; }
     96 
     97 #if USE(ACCELERATED_COMPOSITING)
     98 #if USE(TEXTURE_MAPPER)
     99     // whether accelerated rendering is supported by the media engine for the current media.
    100     virtual bool supportsAcceleratedRendering() const { return true; }
    101     // called when the rendering system flips the into or out of accelerated rendering mode.
    102     virtual void acceleratedRenderingStateChanged();
    103     // returns an object that can be directly composited via GraphicsLayerQt (essentially a QGraphicsItem*)
    104     virtual PlatformLayer* platformLayer() const;
    105 #else
    106     virtual bool supportsAcceleratedRendering() const { return false; }
    107     virtual void acceleratedRenderingStateChanged() { }
    108     virtual PlatformLayer* platformLayer() const { return 0; }
    109 #endif
    110 #endif
    111 
    112     virtual PlatformMedia platformMedia() const;
    113 
    114     QMediaPlayer* mediaPlayer() const { return m_mediaPlayer; }
    115     void removeVideoItem();
    116     void restoreVideoItem();
    117 
    118 private slots:
    119     void mediaStatusChanged(QMediaPlayer::MediaStatus);
    120     void handleError(QMediaPlayer::Error);
    121     void stateChanged(QMediaPlayer::State);
    122     void nativeSizeChanged(const QSizeF&);
    123     void positionChanged(qint64);
    124     void durationChanged(qint64);
    125     void bufferStatusChanged(int);
    126     void volumeChanged(int);
    127     void mutedChanged(bool);
    128     void repaint();
    129 
    130 private:
    131     void updateStates();
    132 
    133 private:
    134     MediaPlayerPrivateQt(MediaPlayer*);
    135 
    136     MediaPlayer* m_webCorePlayer;
    137     QMediaPlayer* m_mediaPlayer;
    138     QMediaPlayerControl* m_mediaPlayerControl;
    139     QGraphicsVideoItem* m_videoItem;
    140     QGraphicsScene* m_videoScene;
    141 #if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER)
    142     OwnPtr<TextureMapperMediaLayer> m_platformLayer;
    143 #endif
    144 
    145     mutable MediaPlayer::NetworkState m_networkState;
    146     mutable MediaPlayer::ReadyState m_readyState;
    147 
    148     IntSize m_currentSize;
    149     IntSize m_naturalSize;
    150     IntSize m_oldNaturalSize;
    151     bool m_isVisible;
    152     bool m_isSeeking;
    153     bool m_composited;
    154     MediaPlayer::Preload m_preload;
    155     bool m_delayingLoad;
    156     String m_mediaUrl;
    157     bool m_suppressNextPlaybackChanged;
    158 
    159 };
    160 }
    161 
    162 #endif // MediaPlayerPrivateQt_h
    163