| Index: media/cast/cast_config.h
|
| diff --git a/media/cast/cast_config.h b/media/cast/cast_config.h
|
| index f99358a6471f9deb762c3cafc7aebdfbc6ee9614..bad2432a2f0d0ab5d255d4fe4579abcf2d9fa497 100644
|
| --- a/media/cast/cast_config.h
|
| +++ b/media/cast/cast_config.h
|
| @@ -46,59 +46,60 @@ enum SuggestedDefaults {
|
|
|
| // Suggested minimum and maximum video bitrates for general-purpose use (up to
|
| // 1080p, 30 FPS).
|
| - kDefaultMinVideoKbps = 300,
|
| - kDefaultMaxVideoKbps = 5000,
|
| -};
|
| + kDefaultMinVideoBitrate = 300000,
|
| + kDefaultMaxVideoBitrate = 5000000,
|
|
|
| -// TODO(miu): Merge AudioSenderConfig and VideoSenderConfig and make their
|
| -// naming/documentation consistent with FrameReceiverConfig.
|
| -// http://crbug.com/530839
|
| -struct AudioSenderConfig {
|
| - AudioSenderConfig();
|
| - AudioSenderConfig(const AudioSenderConfig& other);
|
| - ~AudioSenderConfig();
|
| + // Minimum and Maximum VP8 quantizer in default configuration.
|
| + kDefaultMaxQp = 63,
|
| + kDefaultMinQp = 4,
|
|
|
| - // Identifier referring to the sender, used by the receiver.
|
| - uint32_t ssrc;
|
| + kDefaultMaxCpuSaverQp = 25,
|
|
|
| - // The receiver's SSRC identifier.
|
| - uint32_t receiver_ssrc;
|
| + // Number of video buffers in default configuration (applies only to certain
|
| + // external codecs).
|
| + kDefaultNumberOfVideoBuffers = 1,
|
| +};
|
|
|
| - // The total amount of time between a frame's capture/recording on the sender
|
| - // and its playback on the receiver (i.e., shown to a user). This should be
|
| - // set to a value large enough to give the system sufficient time to encode,
|
| - // transmit/retransmit, receive, decode, and render; given its run-time
|
| - // environment (sender/receiver hardware performance, network conditions,
|
| - // etc.).
|
| - base::TimeDelta min_playout_delay;
|
| - base::TimeDelta max_playout_delay;
|
| +// These parameters are only for video encoders.
|
| +struct VideoCodecParams {
|
| + VideoCodecParams();
|
| + VideoCodecParams(const VideoCodecParams& other);
|
| + ~VideoCodecParams();
|
|
|
| - // Starting playout delay when streaming animated content.
|
| - base::TimeDelta animated_playout_delay;
|
| + int max_qp;
|
| + int min_qp;
|
|
|
| - // RTP payload type enum: Specifies the type/encoding of frame data.
|
| - RtpPayloadType rtp_payload_type;
|
| + // The maximum |min_quantizer| set to the encoder when CPU is constrained.
|
| + // This is a trade-off between higher resolution with lower encoding quality
|
| + // and lower resolution with higher encoding quality. The set value indicates
|
| + // the maximum quantizer that the encoder might produce better quality video
|
| + // at this resolution than lowering resolution with similar CPU usage and
|
| + // smaller quantizer. The set value has to be between |min_qp| and |max_qp|.
|
| + // Suggested value range: [4, 30]. It is only used by software VP8 codec.
|
| + int max_cpu_saver_qp;
|
|
|
| - bool use_external_encoder;
|
| - int frequency;
|
| - int channels;
|
| - int bitrate; // Set to <= 0 for "auto variable bitrate" (libopus knows best).
|
| - Codec codec;
|
| + // This field is used differently by various encoders.
|
| + //
|
| + // It defaults to 1.
|
| + //
|
| + // For VP8, this field is ignored.
|
| + //
|
| + // For H.264 on Mac or iOS, it controls the max number of frames the encoder
|
| + // may hold before emitting a frame. A larger window may allow higher encoding
|
| + // efficiency at the cost of latency and memory. Set to 0 to let the encoder
|
| + // choose a suitable value for the platform and other encoding settings.
|
| + int max_number_of_video_buffers_used;
|
|
|
| - // The AES crypto key and initialization vector. Each of these strings
|
| - // contains the data in binary form, of size kAesKeySize. If they are empty
|
| - // strings, crypto is not being used.
|
| - std::string aes_key;
|
| - std::string aes_iv_mask;
|
| + int number_of_encode_threads;
|
| };
|
|
|
| -struct VideoSenderConfig {
|
| - VideoSenderConfig();
|
| - VideoSenderConfig(const VideoSenderConfig& other);
|
| - ~VideoSenderConfig();
|
| +struct FrameSenderConfig {
|
| + FrameSenderConfig();
|
| + FrameSenderConfig(const FrameSenderConfig& other);
|
| + ~FrameSenderConfig();
|
|
|
| - // Identifier referring to the sender, used by the receiver.
|
| - uint32_t ssrc;
|
| + // The sender's SSRC identifier.
|
| + uint32_t sender_ssrc;
|
|
|
| // The receiver's SSRC identifier.
|
| uint32_t receiver_ssrc;
|
| @@ -118,44 +119,38 @@ struct VideoSenderConfig {
|
| // RTP payload type enum: Specifies the type/encoding of frame data.
|
| RtpPayloadType rtp_payload_type;
|
|
|
| + // If true, use an external HW encoder rather than the built-in
|
| + // software-based one.
|
| bool use_external_encoder;
|
|
|
| - float congestion_control_back_off;
|
| + // RTP timebase: The number of RTP units advanced per one second. For audio,
|
| + // this is the sampling rate. For video, by convention, this is 90 kHz.
|
| + int rtp_timebase;
|
| +
|
| + // Number of channels. For audio, this is normally 2. For video, this must
|
| + // be 1 as Cast does not have support for stereoscopic video.
|
| + int channels;
|
| +
|
| + // For now, only fixed bitrate is used for audio encoding. So for audio,
|
| + // |max_bitrate| is used, and the other two will be overriden if they are not
|
| + // equal to |max_bitrate|.
|
| int max_bitrate;
|
| int min_bitrate;
|
| int start_bitrate;
|
| - int max_qp;
|
| - int min_qp;
|
|
|
| - // The maximum |min_quantizer| set to the encoder when CPU is constrained.
|
| - // This is a trade-off between higher resolution with lower encoding quality
|
| - // and lower resolution with higher encoding quality. The set value indicates
|
| - // the maximum quantizer that the encoder might produce better quality video
|
| - // at this resolution than lowering resolution with similar CPU usage and
|
| - // smaller quantizer. The set value has to be between |min_qp| and |max_qp|.
|
| - // Suggested value range: [4, 30].
|
| - int max_cpu_saver_qp;
|
| -
|
| - int max_frame_rate; // TODO(miu): Should be double, not int.
|
| -
|
| - // This field is used differently by various encoders. It defaults to 1.
|
| - //
|
| - // For VP8, this field is ignored.
|
| - //
|
| - // For H.264 on Mac or iOS, it controls the max number of frames the encoder
|
| - // may hold before emitting a frame. A larger window may allow higher encoding
|
| - // efficiency at the cost of latency and memory. Set to 0 to let the encoder
|
| - // choose a suitable value for the platform and other encoding settings.
|
| - int max_number_of_video_buffers_used;
|
| + double max_frame_rate;
|
|
|
| + // Codec used for the compression of signal data.
|
| Codec codec;
|
| - int number_of_encode_threads;
|
|
|
| // The AES crypto key and initialization vector. Each of these strings
|
| // contains the data in binary form, of size kAesKeySize. If they are empty
|
| // strings, crypto is not being used.
|
| std::string aes_key;
|
| std::string aes_iv_mask;
|
| +
|
| + // These are codec specific parameters for video streams only.
|
| + VideoCodecParams video_codec_params;
|
| };
|
|
|
| // TODO(miu): Naming and minor type changes are badly needed in a later CL.
|
| @@ -192,7 +187,7 @@ struct FrameReceiverConfig {
|
| // The target frame rate. For audio, this is normally 100 (i.e., frames have
|
| // a duration of 10ms each). For video, this is normally 30, but any frame
|
| // rate is supported.
|
| - int target_frame_rate;
|
| + double target_frame_rate;
|
|
|
| // Codec used for the compression of signal data.
|
| // TODO(miu): Merge the AudioCodec and VideoCodec enums into one so this union
|
|
|