xref: /aosp_15_r20/external/openscreen/cast/streaming/remoting_capabilities.h (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard // Copyright 2021 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard // found in the LICENSE file.
4*3f982cf4SFabien Sanglard 
5*3f982cf4SFabien Sanglard #ifndef CAST_STREAMING_REMOTING_CAPABILITIES_H_
6*3f982cf4SFabien Sanglard #define CAST_STREAMING_REMOTING_CAPABILITIES_H_
7*3f982cf4SFabien Sanglard 
8*3f982cf4SFabien Sanglard #include <string>
9*3f982cf4SFabien Sanglard #include <vector>
10*3f982cf4SFabien Sanglard 
11*3f982cf4SFabien Sanglard namespace openscreen {
12*3f982cf4SFabien Sanglard namespace cast {
13*3f982cf4SFabien Sanglard 
14*3f982cf4SFabien Sanglard // Audio capabilities are how receivers indicate support for remoting codecs--
15*3f982cf4SFabien Sanglard // as remoting does not include the actual codec in the OFFER message.
16*3f982cf4SFabien Sanglard enum class AudioCapability {
17*3f982cf4SFabien Sanglard   // The "baseline set" is used in Chrome to check support for a wide
18*3f982cf4SFabien Sanglard   // variety of audio codecs in media/remoting/renderer_controller.cc, including
19*3f982cf4SFabien Sanglard   // but not limited to MP3, PCM, Ogg Vorbis, and FLAC.
20*3f982cf4SFabien Sanglard   kBaselineSet,
21*3f982cf4SFabien Sanglard   kAac,
22*3f982cf4SFabien Sanglard   kOpus,
23*3f982cf4SFabien Sanglard };
24*3f982cf4SFabien Sanglard 
25*3f982cf4SFabien Sanglard // Similar to audio capabilities, video capabilities are how the receiver
26*3f982cf4SFabien Sanglard // indicates support for certain video codecs, as well as support for streaming
27*3f982cf4SFabien Sanglard // 4k content. It is assumed by the sender that the receiver can support 4k
28*3f982cf4SFabien Sanglard // on all supported codecs.
29*3f982cf4SFabien Sanglard enum class VideoCapability {
30*3f982cf4SFabien Sanglard   // |kSupports4k| indicates that the receiver wants and can support 4k remoting
31*3f982cf4SFabien Sanglard   // content--both decoding/rendering and either a native 4k display or
32*3f982cf4SFabien Sanglard   // downscaling to the display's native resolution.
33*3f982cf4SFabien Sanglard   // TODO(issuetracker.google.com/184429130): |kSupports4k| is not super helpful
34*3f982cf4SFabien Sanglard   // for enabling 4k support, as receivers may not support 4k for all types of
35*3f982cf4SFabien Sanglard   // content.
36*3f982cf4SFabien Sanglard   kSupports4k,
37*3f982cf4SFabien Sanglard   kH264,
38*3f982cf4SFabien Sanglard   kVp8,
39*3f982cf4SFabien Sanglard   kVp9,
40*3f982cf4SFabien Sanglard   kHevc,
41*3f982cf4SFabien Sanglard   kAv1
42*3f982cf4SFabien Sanglard };
43*3f982cf4SFabien Sanglard 
44*3f982cf4SFabien Sanglard // This class is similar to the RemotingSinkMetadata in Chrome, however
45*3f982cf4SFabien Sanglard // it is focused around our needs and is not mojom-based. This contains
46*3f982cf4SFabien Sanglard // a rough set of capabilities of the receiver to give the sender an idea of
47*3f982cf4SFabien Sanglard // what features are suppported for remoting.
48*3f982cf4SFabien Sanglard // TODO(issuetracker.google.com/184189100): this object should be expanded to
49*3f982cf4SFabien Sanglard // allow more specific constraint tracking.
50*3f982cf4SFabien Sanglard struct RemotingCapabilities {
51*3f982cf4SFabien Sanglard   // Receiver audio-specific capabilities.
52*3f982cf4SFabien Sanglard   std::vector<AudioCapability> audio;
53*3f982cf4SFabien Sanglard 
54*3f982cf4SFabien Sanglard   // Receiver video-specific capabilities.
55*3f982cf4SFabien Sanglard   std::vector<VideoCapability> video;
56*3f982cf4SFabien Sanglard };
57*3f982cf4SFabien Sanglard 
58*3f982cf4SFabien Sanglard }  // namespace cast
59*3f982cf4SFabien Sanglard }  // namespace openscreen
60*3f982cf4SFabien Sanglard 
61*3f982cf4SFabien Sanglard #endif  // CAST_STREAMING_REMOTING_CAPABILITIES_H_
62