[GStreamer][MSE] MediaSourceClientGStreamerMSE
[WebKit-https.git] / Source / WebCore / platform / graphics / gstreamer / mse / SourceBufferPrivateGStreamer.h
1 /*
2  * Copyright (C) 2013 Google Inc. All rights reserved.
3  * Copyright (C) 2013 Orange
4  * Copyright (C) 2014 Sebastian Dröge <sebastian@centricular.com>
5  * Copyright (C) 2015, 2016 Metrological Group B.V.
6  * Copyright (C) 2015, 2016 Igalia, S.L
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are
10  * met:
11  *
12  *     * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *     * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following disclaimer
16  * in the documentation and/or other materials provided with the
17  * distribution.
18  *     * Neither the name of Google Inc. nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34
35 #pragma once
36
37 #if ENABLE(MEDIA_SOURCE) && USE(GSTREAMER)
38
39 #include "ContentType.h"
40 #include "MediaPlayerPrivateGStreamerMSE.h"
41 #include "SourceBufferPrivate.h"
42 #include "SourceBufferPrivateClient.h"
43 #include "WebKitMediaSourceGStreamer.h"
44
45 namespace WebCore {
46
47 class MediaSourceGStreamer;
48
49 class SourceBufferPrivateGStreamer final : public SourceBufferPrivate {
50
51 public:
52     static Ref<SourceBufferPrivateGStreamer> create(MediaSourceGStreamer*, Ref<MediaSourceClientGStreamerMSE>, const ContentType&);
53     virtual ~SourceBufferPrivateGStreamer() = default;
54
55     void clearMediaSource() { m_mediaSource = nullptr; }
56
57     void setClient(SourceBufferPrivateClient*) override;
58     void append(const unsigned char*, unsigned) override;
59     void abort() override;
60     void resetParserState() override;
61     void removedFromMediaSource() override;
62     MediaPlayer::ReadyState readyState() const override;
63     void setReadyState(MediaPlayer::ReadyState) override;
64
65     void flush(AtomicString) override;
66     void enqueueSample(PassRefPtr<MediaSample>, AtomicString) override;
67     bool isReadyForMoreSamples(AtomicString) override;
68     void setActive(bool) override;
69     void stopAskingForMoreSamples(AtomicString) override;
70     void notifyClientWhenReadyForMoreSamples(AtomicString) override;
71
72     void setReadyForMoreSamples(bool);
73     void notifyReadyForMoreSamples();
74
75     void didReceiveInitializationSegment(const SourceBufferPrivateClient::InitializationSegment&);
76     void didReceiveSample(PassRefPtr<MediaSample>);
77     void didReceiveAllPendingSamples();
78
79 private:
80     SourceBufferPrivateGStreamer(MediaSourceGStreamer*, Ref<MediaSourceClientGStreamerMSE>, const ContentType&);
81     friend class MediaSourceClientGStreamerMSE;
82
83     MediaSourceGStreamer* m_mediaSource;
84     ContentType m_type;
85     Ref<MediaSourceClientGStreamerMSE> m_client;
86     SourceBufferPrivateClient* m_sourceBufferPrivateClient;
87     bool m_isReadyForMoreSamples = true;
88     bool m_notifyWhenReadyForMoreSamples = false;
89     AtomicString m_trackId;
90 };
91
92 }
93
94 #endif