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