xref: /aosp_15_r20/external/openscreen/cast/streaming/capture_configs.h (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard // Copyright 2020 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_CAPTURE_CONFIGS_H_
6*3f982cf4SFabien Sanglard #define CAST_STREAMING_CAPTURE_CONFIGS_H_
7*3f982cf4SFabien Sanglard 
8*3f982cf4SFabien Sanglard #include <string>
9*3f982cf4SFabien Sanglard #include <vector>
10*3f982cf4SFabien Sanglard 
11*3f982cf4SFabien Sanglard #include "cast/streaming/constants.h"
12*3f982cf4SFabien Sanglard #include "cast/streaming/resolution.h"
13*3f982cf4SFabien Sanglard #include "util/simple_fraction.h"
14*3f982cf4SFabien Sanglard 
15*3f982cf4SFabien Sanglard namespace openscreen {
16*3f982cf4SFabien Sanglard namespace cast {
17*3f982cf4SFabien Sanglard 
18*3f982cf4SFabien Sanglard // A configuration set that can be used by the sender to capture audio, and the
19*3f982cf4SFabien Sanglard // receiver to playback audio. Used by Cast Streaming to provide an offer to the
20*3f982cf4SFabien Sanglard // receiver.
21*3f982cf4SFabien Sanglard struct AudioCaptureConfig {
22*3f982cf4SFabien Sanglard   // Audio codec represented by this configuration.
23*3f982cf4SFabien Sanglard   AudioCodec codec = AudioCodec::kOpus;
24*3f982cf4SFabien Sanglard 
25*3f982cf4SFabien Sanglard   // Number of channels used by this configuration.
26*3f982cf4SFabien Sanglard   int channels = kDefaultAudioChannels;
27*3f982cf4SFabien Sanglard 
28*3f982cf4SFabien Sanglard   // Average bit rate in bits per second used by this configuration. A value
29*3f982cf4SFabien Sanglard   // of "zero" suggests that the bitrate should be automatically selected by
30*3f982cf4SFabien Sanglard   // the sender.
31*3f982cf4SFabien Sanglard   int bit_rate = 0;
32*3f982cf4SFabien Sanglard 
33*3f982cf4SFabien Sanglard   // Sample rate for audio RTP timebase.
34*3f982cf4SFabien Sanglard   int sample_rate = kDefaultAudioSampleRate;
35*3f982cf4SFabien Sanglard 
36*3f982cf4SFabien Sanglard   // Target playout delay in milliseconds.
37*3f982cf4SFabien Sanglard   std::chrono::milliseconds target_playout_delay = kDefaultTargetPlayoutDelay;
38*3f982cf4SFabien Sanglard 
39*3f982cf4SFabien Sanglard   // The codec parameter for this configuration. Honors the format laid out
40*3f982cf4SFabien Sanglard   // in RFC 6381: https://datatracker.ietf.org/doc/html/rfc6381
41*3f982cf4SFabien Sanglard   // NOTE: the "profiles" parameter is not supported in our implementation.
42*3f982cf4SFabien Sanglard   std::string codec_parameter;
43*3f982cf4SFabien Sanglard };
44*3f982cf4SFabien Sanglard 
45*3f982cf4SFabien Sanglard // A configuration set that can be used by the sender to capture video, as
46*3f982cf4SFabien Sanglard // well as the receiver to playback video. Used by Cast Streaming to provide an
47*3f982cf4SFabien Sanglard // offer to the receiver.
48*3f982cf4SFabien Sanglard struct VideoCaptureConfig {
49*3f982cf4SFabien Sanglard   // Video codec represented by this configuration.
50*3f982cf4SFabien Sanglard   VideoCodec codec = VideoCodec::kVp8;
51*3f982cf4SFabien Sanglard 
52*3f982cf4SFabien Sanglard   // Maximum frame rate in frames per second.
53*3f982cf4SFabien Sanglard   // For simple cases, the frame rate may be provided by simply setting the
54*3f982cf4SFabien Sanglard   // number to the desired value, e.g. 30 or 60FPS. Some common frame rates like
55*3f982cf4SFabien Sanglard   // 23.98 FPS (for NTSC compatibility) are represented as fractions, in this
56*3f982cf4SFabien Sanglard   // case 24000/1001.
57*3f982cf4SFabien Sanglard   SimpleFraction max_frame_rate{kDefaultFrameRate, 1};
58*3f982cf4SFabien Sanglard 
59*3f982cf4SFabien Sanglard   // Number specifying the maximum bit rate for this stream. A value of
60*3f982cf4SFabien Sanglard   // zero means that the maximum bit rate should be automatically selected by
61*3f982cf4SFabien Sanglard   // the sender.
62*3f982cf4SFabien Sanglard   int max_bit_rate = 0;
63*3f982cf4SFabien Sanglard 
64*3f982cf4SFabien Sanglard   // Resolutions to be offered to the receiver. At least one resolution
65*3f982cf4SFabien Sanglard   // must be provided.
66*3f982cf4SFabien Sanglard   std::vector<Resolution> resolutions;
67*3f982cf4SFabien Sanglard 
68*3f982cf4SFabien Sanglard   // Target playout delay in milliseconds.
69*3f982cf4SFabien Sanglard   std::chrono::milliseconds target_playout_delay = kDefaultTargetPlayoutDelay;
70*3f982cf4SFabien Sanglard 
71*3f982cf4SFabien Sanglard   // The codec parameter for this configuration. Honors the format laid out
72*3f982cf4SFabien Sanglard   // in RFC 6381: https://datatracker.ietf.org/doc/html/rfc6381.
73*3f982cf4SFabien Sanglard   // VP8 and VP9 codec parameter versions are defined here:
74*3f982cf4SFabien Sanglard   // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter#webm
75*3f982cf4SFabien Sanglard   // https://www.webmproject.org/vp9/mp4/#codecs-parameter-string
76*3f982cf4SFabien Sanglard   // NOTE: the "profiles" parameter is not supported in our implementation.
77*3f982cf4SFabien Sanglard   std::string codec_parameter;
78*3f982cf4SFabien Sanglard };
79*3f982cf4SFabien Sanglard 
80*3f982cf4SFabien Sanglard }  // namespace cast
81*3f982cf4SFabien Sanglard }  // namespace openscreen
82*3f982cf4SFabien Sanglard 
83*3f982cf4SFabien Sanglard #endif  // CAST_STREAMING_CAPTURE_CONFIGS_H_
84