[GStreamer][MSE] Playback pipeline
[WebKit-https.git] / Source / WebCore / platform / graphics / gstreamer / WebKitMediaSourceGStreamer.h
1 /*
2  *  Copyright (C) 2009, 2010 Sebastian Dröge <sebastian.droege@collabora.co.uk>
3  *  Copyright (C) 2013 Collabora Ltd.
4  *  Copyright (C) 2013 Orange
5  *  Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
6  *
7  *  This library is free software; you can redistribute it and/or
8  *  modify it under the terms of the GNU Lesser 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  *  Lesser General Public License for more details.
16  *
17  *  You should have received a copy of the GNU Lesser General Public
18  *  License along with this library; if not, write to the Free Software
19  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #pragma once
23
24 #if ENABLE(VIDEO) && ENABLE(MEDIA_SOURCE) && USE(GSTREAMER)
25
26 #include "GRefPtrGStreamer.h"
27 #include "MediaPlayer.h"
28 #include "MediaSource.h"
29 #include "MediaSourcePrivate.h"
30 #include "SourceBufferPrivate.h"
31 #include "SourceBufferPrivateClient.h"
32
33 #include <gst/gst.h>
34
35 G_BEGIN_DECLS
36
37 #define WEBKIT_TYPE_MEDIA_SRC            (webkit_media_src_get_type ())
38 #define WEBKIT_MEDIA_SRC(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBKIT_TYPE_MEDIA_SRC, WebKitMediaSrc))
39 #define WEBKIT_MEDIA_SRC_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_MEDIA_SRC, WebKitMediaSrcClass))
40 #define WEBKIT_IS_MEDIA_SRC(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WEBKIT_TYPE_MEDIA_SRC))
41 #define WEBKIT_IS_MEDIA_SRC_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), WEBKIT_TYPE_MEDIA_SRC))
42
43 typedef struct _WebKitMediaSrc        WebKitMediaSrc;
44 typedef struct _WebKitMediaSrcClass   WebKitMediaSrcClass;
45 typedef struct _WebKitMediaSrcPrivate WebKitMediaSrcPrivate;
46
47 struct _WebKitMediaSrc {
48     GstBin parent;
49
50     WebKitMediaSrcPrivate *priv;
51 };
52
53 struct _WebKitMediaSrcClass {
54     GstBinClass parentClass;
55 };
56
57 GType webkit_media_src_get_type(void);
58
59 G_END_DECLS
60
61 namespace WTF {
62 template<> GRefPtr<WebKitMediaSrc> adoptGRef(WebKitMediaSrc* ptr);
63 template<> WebKitMediaSrc* refGPtr<WebKitMediaSrc>(WebKitMediaSrc* ptr);
64 template<> void derefGPtr<WebKitMediaSrc>(WebKitMediaSrc* ptr);
65 };
66
67 namespace WebCore {
68
69 class ContentType;
70
71 class MediaSourceClientGStreamer: public RefCounted<MediaSourceClientGStreamer> {
72     public:
73         MediaSourceClientGStreamer(WebKitMediaSrc*);
74         virtual ~MediaSourceClientGStreamer();
75
76         // From MediaSourceGStreamer
77         MediaSourcePrivate::AddStatus addSourceBuffer(PassRefPtr<SourceBufferPrivate>, const ContentType&);
78         void durationChanged(const MediaTime&);
79         void markEndOfStream(MediaSourcePrivate::EndOfStreamStatus);
80
81         // From SourceBufferPrivateGStreamer
82         SourceBufferPrivateClient::AppendResult append(PassRefPtr<SourceBufferPrivate>, const unsigned char*, unsigned);
83         void removedFromMediaSource(PassRefPtr<SourceBufferPrivate>);
84
85     private:
86         GRefPtr<WebKitMediaSrc> m_src;
87 };
88
89 };
90
91 #endif // USE(GSTREAMER)