MediaPlayerPrivateGStreamer.h [plain text]
#ifndef MediaPlayerPrivateGStreamer_h
#define MediaPlayerPrivateGStreamer_h
#if ENABLE(VIDEO)
#include "MediaPlayerPrivate.h"
#include "Timer.h"
#include <glib.h>
#include <gst/gst.h>
typedef struct _WebKitVideoSink WebKitVideoSink;
typedef struct _GstBuffer GstBuffer;
typedef struct _GstMessage GstMessage;
typedef struct _GstElement GstElement;
typedef struct _GstBus GstBus;
namespace WebCore {
class GraphicsContext;
class IntSize;
class IntRect;
class String;
gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data);
void mediaPlayerPrivateVolumeChangedCallback(GObject* element, GParamSpec* pspec, gpointer data);
void mediaPlayerPrivateMuteChangedCallback(GObject* element, GParamSpec* pspec, gpointer data);
void mediaPlayerPrivateSourceChangedCallback(GObject* element, GParamSpec* pspec, gpointer data);
class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateInterface {
friend gboolean mediaPlayerPrivateMessageCallback(GstBus* bus, GstMessage* message, gpointer data);
friend void mediaPlayerPrivateRepaintCallback(WebKitVideoSink*, GstBuffer* buffer, MediaPlayerPrivateGStreamer* playerPrivate);
friend void mediaPlayerPrivateSourceChangedCallback(GObject* element, GParamSpec* pspec, gpointer data);
public:
static void registerMediaEngine(MediaEngineRegistrar);
IntSize naturalSize() const;
bool hasVideo() const;
bool hasAudio() const;
void load(const String &url);
void commitLoad();
void cancelLoad();
bool loadNextLocation();
void prepareToPlay();
void play();
void pause();
bool paused() const;
bool seeking() const;
float duration() const;
float currentTime() const;
void seek(float);
void setRate(float);
void setVolume(float);
void volumeChanged();
void volumeChangedTimerFired(Timer<MediaPlayerPrivateGStreamer>*);
bool supportsMuting() const;
void setMuted(bool);
void muteChanged();
void muteChangedTimerFired(Timer<MediaPlayerPrivateGStreamer>*);
void setPreload(MediaPlayer::Preload);
void fillTimerFired(Timer<MediaPlayerPrivateGStreamer>*);
MediaPlayer::NetworkState networkState() const;
MediaPlayer::ReadyState readyState() const;
PassRefPtr<TimeRanges> buffered() const;
float maxTimeSeekable() const;
unsigned bytesLoaded() const;
unsigned totalBytes() const;
void setVisible(bool);
void setSize(const IntSize&);
void mediaLocationChanged(GstMessage*);
void loadStateChanged();
void sizeChanged();
void timeChanged();
void didEnd();
void durationChanged();
void loadingFailed(MediaPlayer::NetworkState);
void repaint();
void paint(GraphicsContext*, const IntRect&);
bool hasSingleSecurityOrigin() const;
bool supportsFullscreen() const;
GstElement* pipeline() const { return m_playBin; }
bool pipelineReset() const { return m_resetPipeline; }
private:
MediaPlayerPrivateGStreamer(MediaPlayer*);
~MediaPlayerPrivateGStreamer();
static MediaPlayerPrivateInterface* create(MediaPlayer* player);
static void getSupportedTypes(HashSet<String>&);
static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs);
static bool isAvailable();
void updateStates();
void cancelSeek();
void endPointTimerFired(Timer<MediaPlayerPrivateGStreamer>*);
float maxTimeLoaded() const;
void startEndPointTimerIfNeeded();
void createGSTPlayBin();
bool changePipelineState(GstState state);
void processBufferingStats(GstMessage* message);
private:
MediaPlayer* m_player;
GstElement* m_playBin;
GstElement* m_videoSink;
GstElement* m_fpsSink;
GstElement* m_source;
GstClockTime m_seekTime;
bool m_changingRate;
float m_endTime;
bool m_isEndReached;
MediaPlayer::NetworkState m_networkState;
MediaPlayer::ReadyState m_readyState;
mutable bool m_isStreaming;
IntSize m_size;
GstBuffer* m_buffer;
GstStructure* m_mediaLocations;
int m_mediaLocationCurrentIndex;
bool m_resetPipeline;
bool m_paused;
bool m_seeking;
bool m_buffering;
float m_playbackRate;
bool m_errorOccured;
gfloat m_mediaDuration;
bool m_startedBuffering;
Timer<MediaPlayerPrivateGStreamer> m_fillTimer;
float m_maxTimeLoaded;
int m_bufferingPercentage;
MediaPlayer::Preload m_preload;
bool m_delayingLoad;
bool m_mediaDurationKnown;
};
}
#endif
#endif