[v8] isolate parameter added to all v8::peristent calls
[WebKit-https.git] / Source / WebCore / platform / graphics / gstreamer / MediaPlayerPrivateGStreamer.h
1 /*
2  * Copyright (C) 2007, 2009 Apple Inc.  All rights reserved.
3  * Copyright (C) 2007 Collabora Ltd. All rights reserved.
4  * Copyright (C) 2007 Alp Toker <alp@atoker.com>
5  * Copyright (C) 2009, 2010 Igalia S.L
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * aint with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22
23 #ifndef MediaPlayerPrivateGStreamer_h
24 #define MediaPlayerPrivateGStreamer_h
25 #if ENABLE(VIDEO) && USE(GSTREAMER)
26
27 #include "GRefPtrGStreamer.h"
28 #include "MediaPlayerPrivateGStreamerBase.h"
29 #include "Timer.h"
30
31 #include <glib.h>
32 #include <gst/gst.h>
33 #include <wtf/Forward.h>
34
35 typedef struct _GstBuffer GstBuffer;
36 typedef struct _GstMessage GstMessage;
37 typedef struct _GstElement GstElement;
38
39 namespace WebCore {
40
41 class MediaPlayerPrivateGStreamer : public MediaPlayerPrivateGStreamerBase {
42
43         public:
44             ~MediaPlayerPrivateGStreamer();
45             static void registerMediaEngine(MediaEngineRegistrar);
46             gboolean handleMessage(GstMessage*);
47
48             bool hasVideo() const { return m_hasVideo; }
49             bool hasAudio() const { return m_hasAudio; }
50
51             void load(const String &url);
52             void commitLoad();
53             void cancelLoad();
54
55             void prepareToPlay();
56             void play();
57             void pause();
58
59             bool paused() const;
60             bool seeking() const;
61
62             float duration() const;
63             float currentTime() const;
64             void seek(float);
65
66             void setRate(float);
67             void setPreservesPitch(bool);
68
69             void setPreload(MediaPlayer::Preload);
70             void fillTimerFired(Timer<MediaPlayerPrivateGStreamer>*);
71
72             PassRefPtr<TimeRanges> buffered() const;
73             float maxTimeSeekable() const;
74             bool didLoadingProgress() const;
75             unsigned totalBytes() const;
76             float maxTimeLoaded() const;
77
78             void loadStateChanged();
79             void timeChanged();
80             void didEnd();
81             void durationChanged();
82             void loadingFailed(MediaPlayer::NetworkState);
83
84             void videoChanged();
85             void audioChanged();
86             void notifyPlayerOfVideo();
87             void notifyPlayerOfAudio();
88
89             void sourceChanged();
90             GstElement* audioSink() const;
91
92             static KURL convertPlaybinURL(const gchar* uri);
93
94         private:
95             MediaPlayerPrivateGStreamer(MediaPlayer*);
96
97             static PassOwnPtr<MediaPlayerPrivateInterface> create(MediaPlayer*);
98
99             static void getSupportedTypes(HashSet<String>&);
100             static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs, const KURL&);
101
102             void setPlaybinURL(KURL&);
103
104             static bool isAvailable();
105
106             void updateAudioSink();
107             void createAudioSink();
108
109             float playbackPosition() const;
110
111             void cacheDuration();
112             void updateStates();
113
114             void createGSTPlayBin();
115             bool changePipelineState(GstState state);
116
117             bool loadNextLocation();
118             void mediaLocationChanged(GstMessage*);
119
120             void setDownloadBuffering();
121             void processBufferingStats(GstMessage*);
122
123             virtual String engineDescription() const { return "GStreamer"; }
124             virtual bool isLiveStream() const { return m_isStreaming; }
125
126         private:
127             GRefPtr<GstElement> m_playBin;
128             GRefPtr<GstElement> m_source;
129             float m_seekTime;
130             bool m_changingRate;
131             float m_endTime;
132             bool m_isEndReached;
133             mutable bool m_isStreaming;
134             GstStructure* m_mediaLocations;
135             int m_mediaLocationCurrentIndex;
136             bool m_resetPipeline;
137             bool m_paused;
138             bool m_seeking;
139             bool m_buffering;
140             float m_playbackRate;
141             bool m_errorOccured;
142             gfloat m_mediaDuration;
143             bool m_startedBuffering;
144             Timer<MediaPlayerPrivateGStreamer> m_fillTimer;
145             float m_maxTimeLoaded;
146             int m_bufferingPercentage;
147             MediaPlayer::Preload m_preload;
148             bool m_delayingLoad;
149             bool m_mediaDurationKnown;
150             mutable float m_maxTimeLoadedAtLastDidLoadingProgress;
151             bool m_volumeAndMuteInitialized;
152             bool m_hasVideo;
153             bool m_hasAudio;
154             guint m_audioTimerHandler;
155             guint m_videoTimerHandler;
156             GRefPtr<GstElement> m_webkitAudioSink;
157             mutable long m_totalBytes;
158             KURL m_url;
159             bool m_originalPreloadWasAutoAndWasOverridden;
160             bool m_preservesPitch;
161     };
162 }
163
164 #endif // USE(GSTREAMER)
165 #endif