[MediaSource] Push capabilities across process boundary during UIProcess capture.
[WebKit-https.git] / Source / WebCore / platform / mediastream / RealtimeMediaSourceSettings.h
1 /*
2  * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef RealtimeMediaSourceSettings_h
27 #define RealtimeMediaSourceSettings_h
28
29 #if ENABLE(MEDIA_STREAM)
30
31 #include "RealtimeMediaSourceSupportedConstraints.h"
32 #include <wtf/EnumTraits.h>
33 #include <wtf/RefCounted.h>
34 #include <wtf/Vector.h>
35 #include <wtf/text/AtomicString.h>
36
37 namespace WebCore {
38
39 class RealtimeMediaSourceSettings {
40 public:
41     enum SourceType { None, Camera, Microphone };
42     enum VideoFacingMode { Unknown, User, Environment, Left, Right };
43
44     static const AtomicString& facingMode(RealtimeMediaSourceSettings::VideoFacingMode);
45
46     static RealtimeMediaSourceSettings::VideoFacingMode videoFacingModeEnum(const String&);
47
48     explicit RealtimeMediaSourceSettings()
49     {
50     }
51
52     bool supportsWidth() const { return m_supportedConstraints.supportsWidth(); }
53     uint32_t width() const { return m_width; }
54     void setWidth(uint32_t width) { m_width = width; }
55
56     bool supportsHeight() const { return m_supportedConstraints.supportsHeight(); }
57     uint32_t height() const { return m_height; }
58     void setHeight(uint32_t height) { m_height = height; }
59
60     bool supportsAspectRatio() const { return m_supportedConstraints.supportsAspectRatio(); }
61     float aspectRatio() const { return m_aspectRatio; }
62     void setAspectRatio(float aspectRatio) { m_aspectRatio = aspectRatio; }
63
64     bool supportsFrameRate() const { return m_supportedConstraints.supportsFrameRate(); }
65     float frameRate() const { return m_frameRate; }
66     void setFrameRate(float frameRate) { m_frameRate = frameRate; }
67
68     bool supportsFacingMode() const { return m_supportedConstraints.supportsFacingMode(); }
69     VideoFacingMode facingMode() const { return m_facingMode; }
70     void setFacingMode(VideoFacingMode facingMode) { m_facingMode = facingMode; }
71
72     bool supportsVolume() const { return m_supportedConstraints.supportsVolume(); }
73     double volume() const { return m_volume; }
74     void setVolume(double volume) { m_volume = volume; }
75
76     bool supportsSampleRate() const { return m_supportedConstraints.supportsSampleRate(); }
77     uint32_t sampleRate() const { return m_sampleRate; }
78     void setSampleRate(uint32_t sampleRate) { m_sampleRate = sampleRate; }
79
80     bool supportsSampleSize() const { return m_supportedConstraints.supportsSampleSize(); }
81     uint32_t sampleSize() const { return m_sampleSize; }
82     void setSampleSize(uint32_t sampleSize) { m_sampleSize = sampleSize; }
83
84     bool supportsEchoCancellation() const { return m_supportedConstraints.supportsEchoCancellation(); }
85     bool echoCancellation() const { return m_echoCancellation; }
86     void setEchoCancellation(bool echoCancellation) { m_echoCancellation = echoCancellation; }
87
88     bool supportsDeviceId() const { return m_supportedConstraints.supportsDeviceId(); }
89     const AtomicString& deviceId() const { return m_deviceId; }
90     void setDeviceId(const AtomicString& deviceId) { m_deviceId = deviceId; }
91
92     bool supportsGroupId() const { return m_supportedConstraints.supportsGroupId(); }
93     const AtomicString& groupId() const { return m_groupId; }
94     void setGroupId(const AtomicString& groupId) { m_groupId = groupId; }
95
96     void setSupportedConstraints(const RealtimeMediaSourceSupportedConstraints& supportedConstraints) { m_supportedConstraints = supportedConstraints; }
97
98     template<class Encoder> void encode(Encoder&) const;
99     template<class Decoder> static bool decode(Decoder&, RealtimeMediaSourceSettings&);
100
101 private:
102     uint32_t m_width { 0 };
103     uint32_t m_height { 0 };
104     float m_aspectRatio { 0 };
105     float m_frameRate { 0 };
106     VideoFacingMode m_facingMode { Unknown };
107     double m_volume { 0 };
108     uint32_t m_sampleRate { 0 };
109     uint32_t m_sampleSize { 0 };
110     bool m_echoCancellation { 0 };
111
112     AtomicString m_deviceId;
113     AtomicString m_groupId;
114
115     RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
116 };
117
118 template<class Encoder>
119 void RealtimeMediaSourceSettings::encode(Encoder& encoder) const
120 {
121     encoder << m_width
122         << m_height
123         << m_aspectRatio
124         << m_frameRate
125         << m_volume
126         << m_sampleRate
127         << m_sampleSize
128         << m_echoCancellation
129         << m_deviceId
130         << m_groupId
131         << m_supportedConstraints;
132     encoder.encodeEnum(m_facingMode);
133 }
134
135 template<class Decoder>
136 bool RealtimeMediaSourceSettings::decode(Decoder& decoder, RealtimeMediaSourceSettings& settings)
137 {
138     return decoder.decode(settings.m_width)
139         && decoder.decode(settings.m_height)
140         && decoder.decode(settings.m_aspectRatio)
141         && decoder.decode(settings.m_frameRate)
142         && decoder.decode(settings.m_volume)
143         && decoder.decode(settings.m_sampleRate)
144         && decoder.decode(settings.m_sampleSize)
145         && decoder.decode(settings.m_echoCancellation)
146         && decoder.decode(settings.m_deviceId)
147         && decoder.decode(settings.m_groupId)
148         && decoder.decode(settings.m_supportedConstraints)
149         && decoder.decodeEnum(settings.m_facingMode);
150 }
151
152 } // namespace WebCore
153
154 namespace WTF {
155
156 template <> struct EnumTraits<WebCore::RealtimeMediaSourceSettings::VideoFacingMode> {
157     using values = EnumValues<
158         WebCore::RealtimeMediaSourceSettings::VideoFacingMode,
159         WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Unknown,
160         WebCore::RealtimeMediaSourceSettings::VideoFacingMode::User,
161         WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Environment,
162         WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Left,
163         WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Right
164     >;
165 };
166
167 }
168
169 #endif // RealtimeMediaSourceSettings_h
170
171 #endif