1/*
2 * Copyright (C) 2016 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. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */
24
25#pragma once
26
27#if ENABLE(MEDIA_STREAM)
28
29#include "DoubleRange.h"
30#include "LongRange.h"
31#include <wtf/Variant.h>
32#include <wtf/Vector.h>
33#include <wtf/text/WTFString.h>
34
35namespace WebCore {
36
37struct MediaConstraints;
38
39struct ConstrainBooleanParameters {
40 Optional<bool> exact;
41 Optional<bool> ideal;
42};
43
44struct ConstrainDOMStringParameters {
45 Optional<Variant<String, Vector<String>>> exact;
46 Optional<Variant<String, Vector<String>>> ideal;
47};
48
49struct ConstrainDoubleRange : DoubleRange {
50 Optional<double> exact;
51 Optional<double> ideal;
52};
53
54struct ConstrainLongRange : LongRange {
55 Optional<int> exact;
56 Optional<int> ideal;
57};
58
59using ConstrainBoolean = Variant<bool, ConstrainBooleanParameters>;
60using ConstrainDOMString = Variant<String, Vector<String>, ConstrainDOMStringParameters>;
61using ConstrainDouble = Variant<double, ConstrainDoubleRange>;
62using ConstrainLong = Variant<int, ConstrainLongRange>;
63
64struct MediaTrackConstraintSet {
65 Optional<ConstrainLong> width;
66 Optional<ConstrainLong> height;
67 Optional<ConstrainDouble> aspectRatio;
68 Optional<ConstrainDouble> frameRate;
69 Optional<ConstrainDOMString> facingMode;
70 Optional<ConstrainDouble> volume;
71 Optional<ConstrainLong> sampleRate;
72 Optional<ConstrainLong> sampleSize;
73 Optional<ConstrainBoolean> echoCancellation;
74 Optional<ConstrainDOMString> deviceId;
75 Optional<ConstrainDOMString> groupId;
76 Optional<ConstrainDOMString> displaySurface;
77 Optional<ConstrainBoolean> logicalSurface;
78};
79
80struct MediaTrackConstraints : MediaTrackConstraintSet {
81 Optional<Vector<MediaTrackConstraintSet>> advanced;
82};
83
84MediaConstraints createMediaConstraints(const MediaTrackConstraints&);
85
86}
87
88#endif
89