Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: media/cast/cast_config.h

Issue 2113783002: Refactoring: Merge VideoSenderConfig and AudioSenderConfig. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MEDIA_CAST_CAST_CONFIG_H_ 5 #ifndef MEDIA_CAST_CAST_CONFIG_H_
6 #define MEDIA_CAST_CAST_CONFIG_H_ 6 #define MEDIA_CAST_CAST_CONFIG_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 26 matching lines...) Expand all
37 kDefaultMaxFrameRate = 30, 37 kDefaultMaxFrameRate = 30,
38 38
39 // End-to-end latency in milliseconds. 39 // End-to-end latency in milliseconds.
40 // 40 //
41 // DO NOT USE THIS (400 ms is proven as ideal for general-purpose use). 41 // DO NOT USE THIS (400 ms is proven as ideal for general-purpose use).
42 // 42 //
43 // TODO(miu): Change to 400, and confirm nothing has broken in later change. 43 // TODO(miu): Change to 400, and confirm nothing has broken in later change.
44 // http://crbug.com/530839 44 // http://crbug.com/530839
45 kDefaultRtpMaxDelayMs = 100, 45 kDefaultRtpMaxDelayMs = 100,
46 46
47 // RTP payload types that identify an RTP stream as audio or video.
48 kDefaultRtpAudioPayloadType = 127,
49 kDefaultRtpVideoPayloadType = 96,
50
51 // Suggested minimum and maximum video bitrates for general-purpose use (up to 47 // Suggested minimum and maximum video bitrates for general-purpose use (up to
52 // 1080p, 30 FPS). 48 // 1080p, 30 FPS).
53 kDefaultMinVideoKbps = 300, 49 kDefaultMinVideoKbps = 300,
54 kDefaultMaxVideoKbps = 5000, 50 kDefaultMaxVideoKbps = 5000,
51
52 // Minimum and Maximum VP8 quantizer in default configuration.
53 kDefaultMaxQp = 63,
54 kDefaultMinQp = 4,
55
56 kDefaultMaxCpuSaverQp = 25,
57
58 // Number of video buffers in default configuration (applies only to certain
59 // external codecs).
60 kDefaultNumberOfVideoBuffers = 1,
55 }; 61 };
56 62
57 // TODO(miu): Merge AudioSenderConfig and VideoSenderConfig and make their 63 // These parameters are only for video encoders.
58 // naming/documentation consistent with FrameReceiverConfig. 64 struct CodecSpecificParams {
59 // http://crbug.com/530839 65 CodecSpecificParams();
60 struct AudioSenderConfig { 66 CodecSpecificParams(const CodecSpecificParams& other);
61 AudioSenderConfig(); 67 ~CodecSpecificParams();
62 AudioSenderConfig(const AudioSenderConfig& other);
63 ~AudioSenderConfig();
64 68
65 // Identifier referring to the sender, used by the receiver. 69 int start_bitrate;
66 uint32_t ssrc; 70 int max_qp;
71 int min_qp;
72
73 // The maximum |min_quantizer| set to the encoder when CPU is constrained.
74 // This is a trade-off between higher resolution with lower encoding quality
75 // and lower resolution with higher encoding quality. The set value indicates
76 // the maximum quantizer that the encoder might produce better quality video
77 // at this resolution than lowering resolution with similar CPU usage and
78 // smaller quantizer. The set value has to be between |min_qp| and |max_qp|.
79 // Suggested value range: [4, 30]. It is only used by software VP8 codec.
80 int max_cpu_saver_qp;
81
82 // This field is used differently by various encoders.
83 //
84 // It defaults to 1.
85 //
86 // For VP8, this field is ignored.
87 //
88 // For H.264 on Mac or iOS, it controls the max number of frames the encoder
89 // may hold before emitting a frame. A larger window may allow higher encoding
90 // efficiency at the cost of latency and memory. Set to 0 to let the encoder
91 // choose a suitable value for the platform and other encoding settings.
92 int max_number_of_video_buffers_used;
93
94 int number_of_encode_threads;
95 };
96
97 struct FrameSenderConfig {
98 FrameSenderConfig();
99 FrameSenderConfig(const FrameSenderConfig& other);
100 ~FrameSenderConfig();
101
102 // The sender's SSRC identifier.
103 uint32_t sender_ssrc;
67 104
68 // The receiver's SSRC identifier. 105 // The receiver's SSRC identifier.
69 uint32_t receiver_ssrc; 106 uint32_t receiver_ssrc;
70
71 // The total amount of time between a frame's capture/recording on the sender
72 // and its playback on the receiver (i.e., shown to a user). This should be
73 // set to a value large enough to give the system sufficient time to encode,
74 // transmit/retransmit, receive, decode, and render; given its run-time
75 // environment (sender/receiver hardware performance, network conditions,
76 // etc.).
77 base::TimeDelta min_playout_delay;
78 base::TimeDelta max_playout_delay;
79
80 // Starting playout delay when streaming animated content.
81 base::TimeDelta animated_playout_delay;
82
83 // RTP payload type enum: Specifies the type/encoding of frame data.
84 int rtp_payload_type;
85
86 bool use_external_encoder;
87 int frequency;
88 int channels;
89 int bitrate; // Set to <= 0 for "auto variable bitrate" (libopus knows best).
90 Codec codec;
91
92 // The AES crypto key and initialization vector. Each of these strings
93 // contains the data in binary form, of size kAesKeySize. If they are empty
94 // strings, crypto is not being used.
95 std::string aes_key;
96 std::string aes_iv_mask;
97 };
98
99 struct VideoSenderConfig {
100 VideoSenderConfig();
101 VideoSenderConfig(const VideoSenderConfig& other);
102 ~VideoSenderConfig();
103
104 // Identifier referring to the sender, used by the receiver.
105 uint32_t ssrc;
106
107 // The receiver's SSRC identifier.
108 uint32_t receiver_ssrc;
109 107
110 // The total amount of time between a frame's capture/recording on the sender 108 // The total amount of time between a frame's capture/recording on the sender
111 // and its playback on the receiver (i.e., shown to a user). This should be 109 // and its playback on the receiver (i.e., shown to a user). This should be
112 // set to a value large enough to give the system sufficient time to encode, 110 // set to a value large enough to give the system sufficient time to encode,
113 // transmit/retransmit, receive, decode, and render; given its run-time 111 // transmit/retransmit, receive, decode, and render; given its run-time
114 // environment (sender/receiver hardware performance, network conditions, 112 // environment (sender/receiver hardware performance, network conditions,
115 // etc.). 113 // etc.).
116 base::TimeDelta min_playout_delay; 114 base::TimeDelta min_playout_delay;
117 base::TimeDelta max_playout_delay; 115 base::TimeDelta max_playout_delay;
118 116
119 // Starting playout delay when streaming animated content. 117 // Starting playout delay when streaming animated content.
120 base::TimeDelta animated_playout_delay; 118 base::TimeDelta animated_playout_delay;
121 119
122 // RTP payload type enum: Specifies the type/encoding of frame data. 120 // RTP payload type enum: Specifies the type/encoding of frame data.
123 int rtp_payload_type; 121 RtpPayloadType rtp_payload_type;
124 122
125 bool use_external_encoder; 123 bool use_external_encoder;
miu 2016/06/30 21:59:43 Let's add a comment like, "If true, use an externa
xjz 2016/07/01 23:52:09 Done.
126 124
127 float congestion_control_back_off; 125 int frequency;
miu 2016/06/30 21:59:43 Now might be a good time to rename this to rtp_tim
xjz 2016/07/01 23:52:09 Done.
126
127 int channels;
128
129 // Audio streams only use |max_bitrate|.
miu 2016/06/30 21:59:43 Probably not worth mentioning that audio uses only
xjz 2016/07/01 23:52:09 Moved |start_bitrate| back to here. Added comments
130 // Audio only: Set to <= 0 for "auto variable bitrate" (libopus knows best).
128 int max_bitrate; 131 int max_bitrate;
129 int min_bitrate; 132 int min_bitrate;
130 int start_bitrate; 133 double max_frame_rate;
miu 2016/06/30 21:59:43 Nice! Thanks for resolving the TODO! :)
xjz 2016/07/01 23:52:09 :)
131 int max_qp;
132 int min_qp;
133
134 // The maximum |min_quantizer| set to the encoder when CPU is constrained.
135 // This is a trade-off between higher resolution with lower encoding quality
136 // and lower resolution with higher encoding quality. The set value indicates
137 // the maximum quantizer that the encoder might produce better quality video
138 // at this resolution than lowering resolution with similar CPU usage and
139 // smaller quantizer. The set value has to be between |min_qp| and |max_qp|.
140 // Suggested value range: [4, 30].
141 int max_cpu_saver_qp;
142
143 int max_frame_rate; // TODO(miu): Should be double, not int.
144
145 // This field is used differently by various encoders. It defaults to 1.
146 //
147 // For VP8, this field is ignored.
148 //
149 // For H.264 on Mac or iOS, it controls the max number of frames the encoder
150 // may hold before emitting a frame. A larger window may allow higher encoding
151 // efficiency at the cost of latency and memory. Set to 0 to let the encoder
152 // choose a suitable value for the platform and other encoding settings.
153 int max_number_of_video_buffers_used;
154 134
155 Codec codec; 135 Codec codec;
156 int number_of_encode_threads;
157 136
158 // The AES crypto key and initialization vector. Each of these strings 137 // The AES crypto key and initialization vector. Each of these strings
159 // contains the data in binary form, of size kAesKeySize. If they are empty 138 // contains the data in binary form, of size kAesKeySize. If they are empty
160 // strings, crypto is not being used. 139 // strings, crypto is not being used.
161 std::string aes_key; 140 std::string aes_key;
162 std::string aes_iv_mask; 141 std::string aes_iv_mask;
142
143 // These are codec specific parameters for video streams only.
144 CodecSpecificParams codec_specific_params;
miu 2016/06/30 21:59:43 Please rename (for precision). Suggestion: s/Code
xjz 2016/07/01 23:52:09 Done.
163 }; 145 };
164 146
165 // TODO(miu): Naming and minor type changes are badly needed in a later CL. 147 // TODO(miu): Naming and minor type changes are badly needed in a later CL.
166 struct FrameReceiverConfig { 148 struct FrameReceiverConfig {
167 FrameReceiverConfig(); 149 FrameReceiverConfig();
168 FrameReceiverConfig(const FrameReceiverConfig& other); 150 FrameReceiverConfig(const FrameReceiverConfig& other);
169 ~FrameReceiverConfig(); 151 ~FrameReceiverConfig();
170 152
171 // The receiver's SSRC identifier. 153 // The receiver's SSRC identifier.
172 uint32_t receiver_ssrc; 154 uint32_t receiver_ssrc;
173 155
174 // The sender's SSRC identifier. 156 // The sender's SSRC identifier.
175 uint32_t sender_ssrc; 157 uint32_t sender_ssrc;
176 158
177 // The total amount of time between a frame's capture/recording on the sender 159 // The total amount of time between a frame's capture/recording on the sender
178 // and its playback on the receiver (i.e., shown to a user). This is fixed as 160 // and its playback on the receiver (i.e., shown to a user). This is fixed as
179 // a value large enough to give the system sufficient time to encode, 161 // a value large enough to give the system sufficient time to encode,
180 // transmit/retransmit, receive, decode, and render; given its run-time 162 // transmit/retransmit, receive, decode, and render; given its run-time
181 // environment (sender/receiver hardware performance, network conditions, 163 // environment (sender/receiver hardware performance, network conditions,
182 // etc.). 164 // etc.).
183 int rtp_max_delay_ms; // TODO(miu): Change to TimeDelta target_playout_delay. 165 int rtp_max_delay_ms; // TODO(miu): Change to TimeDelta target_playout_delay.
184 166
185 // RTP payload type enum: Specifies the type/encoding of frame data. 167 // RTP payload type enum: Specifies the type/encoding of frame data.
186 int rtp_payload_type; 168 RtpPayloadType rtp_payload_type;
187 169
188 // RTP timebase: The number of RTP units advanced per one second. For audio, 170 // RTP timebase: The number of RTP units advanced per one second. For audio,
189 // this is the sampling rate. For video, by convention, this is 90 kHz. 171 // this is the sampling rate. For video, by convention, this is 90 kHz.
190 int rtp_timebase; 172 int rtp_timebase;
191 173
192 // Number of channels. For audio, this is normally 2. For video, this must 174 // Number of channels. For audio, this is normally 2. For video, this must
193 // be 1 as Cast does not have support for stereoscopic video. 175 // be 1 as Cast does not have support for stereoscopic video.
194 int channels; 176 int channels;
195 177
196 // The target frame rate. For audio, this is normally 100 (i.e., frames have 178 // The target frame rate. For audio, this is normally 100 (i.e., frames have
(...skipping 22 matching lines...) Expand all
219 typedef base::Callback<void(std::unique_ptr<base::SharedMemory>)> 201 typedef base::Callback<void(std::unique_ptr<base::SharedMemory>)>
220 ReceiveVideoEncodeMemoryCallback; 202 ReceiveVideoEncodeMemoryCallback;
221 typedef base::Callback<void(size_t size, 203 typedef base::Callback<void(size_t size,
222 const ReceiveVideoEncodeMemoryCallback&)> 204 const ReceiveVideoEncodeMemoryCallback&)>
223 CreateVideoEncodeMemoryCallback; 205 CreateVideoEncodeMemoryCallback;
224 206
225 } // namespace cast 207 } // namespace cast
226 } // namespace media 208 } // namespace media
227 209
228 #endif // MEDIA_CAST_CAST_CONFIG_H_ 210 #endif // MEDIA_CAST_CAST_CONFIG_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698