blob: 3f08bc09ab4d73c09fa6a682bd997ab84f6c2eff [file] [log] [blame]
/*
* Copyright (C) 2007 Apple Inc. All rights reserved.
* Copyright (C) 2007 Collabora Ltd. All rights reserved.
* Copyright (C) 2007 Alp Toker <alp@atoker.com>
*
* 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 <gtk/gtk.h>
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<String>&);
static bool isAvailable() { return true; }
private:
void updateStates();
void cancelSeek();
void endPointTimerFired(Timer<MediaPlayerPrivate>*);
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