blob: 47a73305e2123565dc6fafd78b05581522923c03 [file] [log] [blame]
/*
* Copyright (C) 2007, 2009 Apple Inc. All rights reserved.
* Copyright (C) 2007 Collabora Ltd. All rights reserved.
* Copyright (C) 2007 Alp Toker <alp@atoker.com>
* Copyright (C) 2009, 2010 Igalia S.L
*
* 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 MediaPlayerPrivateGStreamerBase_h
#define MediaPlayerPrivateGStreamerBase_h
#if ENABLE(VIDEO) && USE(GSTREAMER)
#include "GRefPtrGStreamer.h"
#include "MediaPlayerPrivate.h"
#include <wtf/Forward.h>
typedef struct _GstBuffer GstBuffer;
typedef struct _GstElement GstElement;
typedef struct _GstMessage GstMessage;
typedef struct _GstStreamVolume GstStreamVolume;
typedef struct _WebKitVideoSink WebKitVideoSink;
namespace WebCore {
class FullscreenVideoControllerGStreamer;
class GraphicsContext;
class IntSize;
class IntRect;
class GStreamerGWorld;
class MediaPlayerPrivateGStreamerBase : public MediaPlayerPrivateInterface {
public:
~MediaPlayerPrivateGStreamerBase();
IntSize naturalSize() const;
void setVolume(float);
float volume() const;
void volumeChanged();
void notifyPlayerOfVolumeChange();
bool supportsMuting() const { return true; }
void setMuted(bool);
bool muted() const;
void muteChanged();
void notifyPlayerOfMute();
MediaPlayer::NetworkState networkState() const;
MediaPlayer::ReadyState readyState() const;
void setVisible(bool) { }
void setSize(const IntSize&);
void sizeChanged();
void triggerRepaint(GstBuffer*);
void paint(GraphicsContext*, const IntRect&);
virtual bool hasSingleSecurityOrigin() const { return true; }
virtual float maxTimeLoaded() const { return 0.0; }
#if USE(NATIVE_FULLSCREEN_VIDEO)
void enterFullscreen();
void exitFullscreen();
bool canEnterFullscreen() const { return true; }
#endif
bool supportsFullscreen() const;
PlatformMedia platformMedia() const;
MediaPlayer::MovieLoadType movieLoadType() const;
virtual bool isLiveStream() const = 0;
MediaPlayer* mediaPlayer() const { return m_player; }
unsigned decodedFrameCount() const;
unsigned droppedFrameCount() const;
unsigned audioDecodedByteCount() const;
unsigned videoDecodedByteCount() const;
protected:
MediaPlayerPrivateGStreamerBase(MediaPlayer*);
GstElement* createVideoSink(GstElement* pipeline);
void setStreamVolumeElement(GstStreamVolume*);
virtual GstElement* audioSink() const { return 0; }
MediaPlayer* m_player;
GRefPtr<GstStreamVolume> m_volumeElement;
GRefPtr<GstElement> m_webkitVideoSink;
GRefPtr<GstElement> m_videoSinkBin;
GstElement* m_fpsSink;
MediaPlayer::ReadyState m_readyState;
MediaPlayer::NetworkState m_networkState;
IntSize m_size;
GstBuffer* m_buffer;
#if USE(NATIVE_FULLSCREEN_VIDEO)
RefPtr<GStreamerGWorld> m_gstGWorld;
OwnPtr<FullscreenVideoControllerGStreamer> m_fullscreenVideoController;
#endif
unsigned long m_volumeTimerHandler;
unsigned long m_muteTimerHandler;
unsigned long m_repaintHandler;
unsigned long m_volumeSignalHandler;
unsigned long m_muteSignalHandler;
GRefPtr<GstPad> m_videoSinkPad;
mutable IntSize m_videoSize;
};
}
#endif // USE(GSTREAMER)
#endif