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

Unified Diff: webrtc/config.h

Issue 3004723002: Move RtpExtension to api/ directory and config.h/.cc to call/. (Closed)
Patch Set: Rebase Created 3 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: webrtc/config.h
diff --git a/webrtc/config.h b/webrtc/config.h
index 962e0f2fb9ac844ff243c0425c1b9df4dca76a4d..46c1f42085b597e54b23264326b2cd3c72e9523f 100644
--- a/webrtc/config.h
+++ b/webrtc/config.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@@ -8,259 +8,12 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-// TODO(pbos): Move Config from common.h to here.
-
#ifndef WEBRTC_CONFIG_H_
#define WEBRTC_CONFIG_H_
-#include <string>
-#include <vector>
-
-#include "webrtc/common_types.h"
-#include "webrtc/rtc_base/basictypes.h"
-#include "webrtc/rtc_base/optional.h"
-#include "webrtc/rtc_base/refcount.h"
-#include "webrtc/rtc_base/scoped_ref_ptr.h"
-#include "webrtc/typedefs.h"
-
-namespace webrtc {
-
-// Settings for NACK, see RFC 4585 for details.
-struct NackConfig {
- NackConfig() : rtp_history_ms(0) {}
- std::string ToString() const;
- // Send side: the time RTP packets are stored for retransmissions.
- // Receive side: the time the receiver is prepared to wait for
- // retransmissions.
- // Set to '0' to disable.
- int rtp_history_ms;
-};
-
-// Settings for ULPFEC forward error correction.
-// Set the payload types to '-1' to disable.
-struct UlpfecConfig {
- UlpfecConfig()
- : ulpfec_payload_type(-1),
- red_payload_type(-1),
- red_rtx_payload_type(-1) {}
- std::string ToString() const;
- bool operator==(const UlpfecConfig& other) const;
-
- // Payload type used for ULPFEC packets.
- int ulpfec_payload_type;
-
- // Payload type used for RED packets.
- int red_payload_type;
-
- // RTX payload type for RED payload.
- int red_rtx_payload_type;
-};
-
-// RTP header extension, see RFC 5285.
-struct RtpExtension {
- RtpExtension() {}
- RtpExtension(const std::string& uri, int id) : uri(uri), id(id) {}
- RtpExtension(const std::string& uri, int id, bool encrypt) : uri(uri),
- id(id), encrypt(encrypt) {}
- std::string ToString() const;
- bool operator==(const RtpExtension& rhs) const {
- return uri == rhs.uri && id == rhs.id && encrypt == rhs.encrypt;
- }
- static bool IsSupportedForAudio(const std::string& uri);
- static bool IsSupportedForVideo(const std::string& uri);
- // Return "true" if the given RTP header extension URI may be encrypted.
- static bool IsEncryptionSupported(const std::string& uri);
-
- // Returns the named header extension if found among all extensions,
- // nullptr otherwise.
- static const RtpExtension* FindHeaderExtensionByUri(
- const std::vector<RtpExtension>& extensions,
- const std::string& uri);
-
- // Return a list of RTP header extensions with the non-encrypted extensions
- // removed if both the encrypted and non-encrypted extension is present for
- // the same URI.
- static std::vector<RtpExtension> FilterDuplicateNonEncrypted(
- const std::vector<RtpExtension>& extensions);
-
- // Header extension for audio levels, as defined in:
- // http://tools.ietf.org/html/draft-ietf-avtext-client-to-mixer-audio-level-03
- static const char kAudioLevelUri[];
- static const int kAudioLevelDefaultId;
-
- // Header extension for RTP timestamp offset, see RFC 5450 for details:
- // http://tools.ietf.org/html/rfc5450
- static const char kTimestampOffsetUri[];
- static const int kTimestampOffsetDefaultId;
-
- // Header extension for absolute send time, see url for details:
- // http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
- static const char kAbsSendTimeUri[];
- static const int kAbsSendTimeDefaultId;
-
- // Header extension for coordination of video orientation, see url for
- // details:
- // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ts_126114v120700p.pdf
- static const char kVideoRotationUri[];
- static const int kVideoRotationDefaultId;
-
- // Header extension for video content type. E.g. default or screenshare.
- static const char kVideoContentTypeUri[];
- static const int kVideoContentTypeDefaultId;
-
- // Header extension for video timing.
- static const char kVideoTimingUri[];
- static const int kVideoTimingDefaultId;
-
- // Header extension for transport sequence number, see url for details:
- // http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions
- static const char kTransportSequenceNumberUri[];
- static const int kTransportSequenceNumberDefaultId;
-
- static const char kPlayoutDelayUri[];
- static const int kPlayoutDelayDefaultId;
-
- // Encryption of Header Extensions, see RFC 6904 for details:
- // https://tools.ietf.org/html/rfc6904
- static const char kEncryptHeaderExtensionsUri[];
-
- // Inclusive min and max IDs for one-byte header extensions, per RFC5285.
- static const int kMinId;
- static const int kMaxId;
-
- std::string uri;
- int id = 0;
- bool encrypt = false;
-};
-
-struct VideoStream {
- VideoStream();
- ~VideoStream();
- std::string ToString() const;
-
- size_t width;
- size_t height;
- int max_framerate;
-
- int min_bitrate_bps;
- int target_bitrate_bps;
- int max_bitrate_bps;
-
- int max_qp;
-
- // Bitrate thresholds for enabling additional temporal layers. Since these are
- // thresholds in between layers, we have one additional layer. One threshold
- // gives two temporal layers, one below the threshold and one above, two give
- // three, and so on.
- // The VideoEncoder may redistribute bitrates over the temporal layers so a
- // bitrate threshold of 100k and an estimate of 105k does not imply that we
- // get 100k in one temporal layer and 5k in the other, just that the bitrate
- // in the first temporal layer should not exceed 100k.
- // TODO(kthelgason): Apart from a special case for two-layer screencast these
- // thresholds are not propagated to the VideoEncoder. To be implemented.
- std::vector<int> temporal_layer_thresholds_bps;
-};
-
-class VideoEncoderConfig {
- public:
- // These are reference counted to permit copying VideoEncoderConfig and be
- // kept alive until all encoder_specific_settings go out of scope.
- // TODO(kthelgason): Consider removing the need for copying VideoEncoderConfig
- // and use rtc::Optional for encoder_specific_settings instead.
- class EncoderSpecificSettings : public rtc::RefCountInterface {
- public:
- // TODO(pbos): Remove FillEncoderSpecificSettings as soon as VideoCodec is
- // not in use and encoder implementations ask for codec-specific structs
- // directly.
- void FillEncoderSpecificSettings(VideoCodec* codec_struct) const;
-
- virtual void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const;
- virtual void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const;
- virtual void FillVideoCodecH264(VideoCodecH264* h264_settings) const;
- private:
- ~EncoderSpecificSettings() override {}
- friend class VideoEncoderConfig;
- };
-
- class H264EncoderSpecificSettings : public EncoderSpecificSettings {
- public:
- explicit H264EncoderSpecificSettings(const VideoCodecH264& specifics);
- void FillVideoCodecH264(VideoCodecH264* h264_settings) const override;
-
- private:
- VideoCodecH264 specifics_;
- };
-
- class Vp8EncoderSpecificSettings : public EncoderSpecificSettings {
- public:
- explicit Vp8EncoderSpecificSettings(const VideoCodecVP8& specifics);
- void FillVideoCodecVp8(VideoCodecVP8* vp8_settings) const override;
-
- private:
- VideoCodecVP8 specifics_;
- };
-
- class Vp9EncoderSpecificSettings : public EncoderSpecificSettings {
- public:
- explicit Vp9EncoderSpecificSettings(const VideoCodecVP9& specifics);
- void FillVideoCodecVp9(VideoCodecVP9* vp9_settings) const override;
-
- private:
- VideoCodecVP9 specifics_;
- };
-
- enum class ContentType {
- kRealtimeVideo,
- kScreen,
- };
-
- class VideoStreamFactoryInterface : public rtc::RefCountInterface {
- public:
- // An implementation should return a std::vector<VideoStream> with the
- // wanted VideoStream settings for the given video resolution.
- // The size of the vector may not be larger than
- // |encoder_config.number_of_streams|.
- virtual std::vector<VideoStream> CreateEncoderStreams(
- int width,
- int height,
- const VideoEncoderConfig& encoder_config) = 0;
-
- protected:
- ~VideoStreamFactoryInterface() override {}
- };
-
- VideoEncoderConfig& operator=(VideoEncoderConfig&&) = default;
- VideoEncoderConfig& operator=(const VideoEncoderConfig&) = delete;
-
- // Mostly used by tests. Avoid creating copies if you can.
- VideoEncoderConfig Copy() const { return VideoEncoderConfig(*this); }
-
- VideoEncoderConfig();
- VideoEncoderConfig(VideoEncoderConfig&&);
- ~VideoEncoderConfig();
- std::string ToString() const;
-
- rtc::scoped_refptr<VideoStreamFactoryInterface> video_stream_factory;
- std::vector<SpatialLayer> spatial_layers;
- ContentType content_type;
- rtc::scoped_refptr<const EncoderSpecificSettings> encoder_specific_settings;
-
- // Padding will be used up to this bitrate regardless of the bitrate produced
- // by the encoder. Padding above what's actually produced by the encoder helps
- // maintaining a higher bitrate estimate. Padding will however not be sent
- // unless the estimated bandwidth indicates that the link can handle it.
- int min_transmit_bitrate_bps;
- int max_bitrate_bps;
-
- // Max number of encoded VideoStreams to produce.
- size_t number_of_streams;
-
- private:
- // Access to the copy constructor is private to force use of the Copy()
- // method for those exceptional cases where we do use it.
- VideoEncoderConfig(const VideoEncoderConfig&);
-};
+// TODO(holmer): Delete this file once downstream projects have been updated.
-} // namespace webrtc
+#include "webrtc/api/rtpparameters.h"
+#include "webrtc/call/rtp_config.h"
#endif // WEBRTC_CONFIG_H_

Powered by Google App Engine
This is Rietveld 408576698