/* * Copyright (C) 2007 Apple Inc. All rights reserved. * Copyright (C) 2007 Collabora Ltd. All rights reserved. * Copyright (C) 2007 Alp Toker * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * aint with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef MediaPlayerPrivateGStreamer_h #define MediaPlayerPrivateGStreamer_h #if ENABLE(VIDEO) #include "MediaPlayer.h" #include "Timer.h" #include typedef struct _GstElement GstElement; typedef struct _GstMessage GstMessage; typedef struct _GstBus GstBus; namespace WebCore { class GraphicsContext; class IntSize; class IntRect; class String; gboolean mediaPlayerPrivateErrorCallback(GstBus* bus, GstMessage* message, gpointer data); gboolean mediaPlayerPrivateEOSCallback(GstBus* bus, GstMessage* message, gpointer data); gboolean mediaPlayerPrivateStateCallback(GstBus* bus, GstMessage* message, gpointer data); class MediaPlayerPrivate : Noncopyable { friend gboolean mediaPlayerPrivateErrorCallback(GstBus* bus, GstMessage* message, gpointer data); friend gboolean mediaPlayerPrivateEOSCallback(GstBus* bus, GstMessage* message, gpointer data); friend gboolean mediaPlayerPrivateStateCallback(GstBus* bus, GstMessage* message, gpointer data); public: MediaPlayerPrivate(MediaPlayer*); ~MediaPlayerPrivate(); IntSize naturalSize(); bool hasVideo(); void load(String url); void cancelLoad(); void play(); void pause(); bool paused() const; bool seeking() const; float duration(); float currentTime() const; void seek(float); void setEndTime(float); void setRate(float); void setVolume(float); void setMuted(bool); int dataRate() const; MediaPlayer::NetworkState networkState(); MediaPlayer::ReadyState readyState(); float maxTimeBuffered(); float maxTimeSeekable(); unsigned bytesLoaded(); bool totalBytesKnown(); unsigned totalBytes(); void setVisible(bool); void setRect(const IntRect&); void loadStateChanged(); void rateChanged(); void sizeChanged(); void timeChanged(); void volumeChanged(); void didEnd(); void loadingFailed(); void repaint(); void paint(GraphicsContext*, const IntRect&); static void getSupportedTypes(HashSet&); static bool isAvailable() { return true; } private: void updateStates(); void cancelSeek(); void endPointTimerFired(Timer*); float maxTimeLoaded(); void startEndPointTimerIfNeeded(); void createGSTPlayBin(String url); private: MediaPlayer* m_player; GstElement* m_playBin; GstElement* m_videoSink; GstElement* m_source; float m_rate; float m_endTime; bool m_isEndReached; double m_volume; MediaPlayer::NetworkState m_networkState; MediaPlayer::ReadyState m_readyState; bool m_startedPlaying; bool m_isStreaming; IntRect m_rect; bool m_visible; cairo_surface_t* m_surface; }; } #endif #endif