Adding C++ versions of currently spec'd "RtpParameters" structs.
These structs will be used for ORTC objects (and their WebRTC
equivalents).
This CL also introduces some minor changes to the existing implemented
structs:
- max_bitrate_bps uses rtc::Optional instead of "-1 means unset"
- "mime_type" turned into "name"/"kind" (which can be used to form the
MIME type string, if needed).
- clock_rate and channels changed to rtc::Optional, since they will
need to be for RtpSender.send().
- Renamed "channels" to "num_channels" (the ORTC name, which I prefer).
BUG=webrtc:7013, webrtc:7112
Review-Url: https://codereview.webrtc.org/2651883010
Cr-Commit-Position: refs/heads/master@{#16437}
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCRtpCodecParameters.mm b/webrtc/sdk/objc/Framework/Classes/RTCRtpCodecParameters.mm
index 40f4f25..90529c8 100644
--- a/webrtc/sdk/objc/Framework/Classes/RTCRtpCodecParameters.mm
+++ b/webrtc/sdk/objc/Framework/Classes/RTCRtpCodecParameters.mm
@@ -11,33 +11,36 @@
#import "RTCRtpCodecParameters+Private.h"
#import "NSString+StdString.h"
+#import "WebRTC/RTCMediaStreamTrack.h" // For "kind" strings.
+#include "webrtc/base/checks.h"
#include "webrtc/media/base/mediaconstants.h"
-const NSString * const kRTCRtxCodecMimeType = @(cricket::kRtxCodecName);
-const NSString * const kRTCRedCodecMimeType = @(cricket::kRedCodecName);
-const NSString * const kRTCUlpfecCodecMimeType = @(cricket::kUlpfecCodecName);
-const NSString * const kRTCFlexfecCodecMimeType = @(cricket::kFlexfecCodecName);
-const NSString * const kRTCOpusCodecMimeType = @(cricket::kOpusCodecName);
-const NSString * const kRTCIsacCodecMimeType = @(cricket::kIsacCodecName);
-const NSString * const kRTCL16CodecMimeType = @(cricket::kL16CodecName);
-const NSString * const kRTCG722CodecMimeType = @(cricket::kG722CodecName);
-const NSString * const kRTCIlbcCodecMimeType = @(cricket::kIlbcCodecName);
-const NSString * const kRTCPcmuCodecMimeType = @(cricket::kPcmuCodecName);
-const NSString * const kRTCPcmaCodecMimeType = @(cricket::kPcmaCodecName);
-const NSString * const kRTCDtmfCodecMimeType = @(cricket::kDtmfCodecName);
-const NSString * const kRTCComfortNoiseCodecMimeType =
+const NSString * const kRTCRtxCodecName = @(cricket::kRtxCodecName);
+const NSString * const kRTCRedCodecName = @(cricket::kRedCodecName);
+const NSString * const kRTCUlpfecCodecName = @(cricket::kUlpfecCodecName);
+const NSString * const kRTCFlexfecCodecName = @(cricket::kFlexfecCodecName);
+const NSString * const kRTCOpusCodecName = @(cricket::kOpusCodecName);
+const NSString * const kRTCIsacCodecName = @(cricket::kIsacCodecName);
+const NSString * const kRTCL16CodecName = @(cricket::kL16CodecName);
+const NSString * const kRTCG722CodecName = @(cricket::kG722CodecName);
+const NSString * const kRTCIlbcCodecName = @(cricket::kIlbcCodecName);
+const NSString * const kRTCPcmuCodecName = @(cricket::kPcmuCodecName);
+const NSString * const kRTCPcmaCodecName = @(cricket::kPcmaCodecName);
+const NSString * const kRTCDtmfCodecName = @(cricket::kDtmfCodecName);
+const NSString * const kRTCComfortNoiseCodecName =
@(cricket::kComfortNoiseCodecName);
-const NSString * const kVp8CodecMimeType = @(cricket::kVp8CodecName);
-const NSString * const kVp9CodecMimeType = @(cricket::kVp9CodecName);
-const NSString * const kH264CodecMimeType = @(cricket::kH264CodecName);
+const NSString * const kVp8CodecName = @(cricket::kVp8CodecName);
+const NSString * const kVp9CodecName = @(cricket::kVp9CodecName);
+const NSString * const kH264CodecName = @(cricket::kH264CodecName);
@implementation RTCRtpCodecParameters
@synthesize payloadType = _payloadType;
-@synthesize mimeType = _mimeType;
+@synthesize name = _name;
+@synthesize kind = _kind;
@synthesize clockRate = _clockRate;
-@synthesize channels = _channels;
+@synthesize numChannels = _numChannels;
- (instancetype)init {
return [super init];
@@ -47,9 +50,24 @@
(const webrtc::RtpCodecParameters &)nativeParameters {
if (self = [self init]) {
_payloadType = nativeParameters.payload_type;
- _mimeType = [NSString stringForStdString:nativeParameters.mime_type];
- _clockRate = nativeParameters.clock_rate;
- _channels = nativeParameters.channels;
+ _name = [NSString stringForStdString:nativeParameters.name];
+ switch (nativeParameters.kind) {
+ case cricket::MEDIA_TYPE_AUDIO:
+ _kind = kRTCMediaStreamTrackKindAudio;
+ break;
+ case cricket::MEDIA_TYPE_VIDEO:
+ _kind = kRTCMediaStreamTrackKindVideo;
+ break;
+ case cricket::MEDIA_TYPE_DATA:
+ RTC_NOTREACHED();
+ break;
+ }
+ if (nativeParameters.clock_rate) {
+ _clockRate = [NSNumber numberWithInt:*nativeParameters.clock_rate];
+ }
+ if (nativeParameters.num_channels) {
+ _numChannels = [NSNumber numberWithInt:*nativeParameters.num_channels];
+ }
}
return self;
}
@@ -57,9 +75,22 @@
- (webrtc::RtpCodecParameters)nativeParameters {
webrtc::RtpCodecParameters parameters;
parameters.payload_type = _payloadType;
- parameters.mime_type = [NSString stdStringForString:_mimeType];
- parameters.clock_rate = _clockRate;
- parameters.channels = _channels;
+ parameters.name = [NSString stdStringForString:_name];
+ // NSString pointer comparison is safe here since "kind" is readonly and only
+ // populated above.
+ if (_kind == kRTCMediaStreamTrackKindAudio) {
+ parameters.kind = cricket::MEDIA_TYPE_AUDIO;
+ } else if (_kind == kRTCMediaStreamTrackKindVideo) {
+ parameters.kind = cricket::MEDIA_TYPE_VIDEO;
+ } else {
+ RTC_NOTREACHED();
+ }
+ if (_clockRate != nil) {
+ parameters.clock_rate = rtc::Optional<int>(_clockRate.intValue);
+ }
+ if (_numChannels != nil) {
+ parameters.num_channels = rtc::Optional<int>(_numChannels.intValue);
+ }
return parameters;
}
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm b/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm
index be47894..8e72d18 100644
--- a/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm
+++ b/webrtc/sdk/objc/Framework/Classes/RTCRtpEncodingParameters.mm
@@ -16,8 +16,6 @@
@synthesize maxBitrateBps = _maxBitrateBps;
@synthesize ssrc = _ssrc;
-static const int kBitrateUnlimited = -1;
-
- (instancetype)init {
return [super init];
}
@@ -26,10 +24,9 @@
(const webrtc::RtpEncodingParameters &)nativeParameters {
if (self = [self init]) {
_isActive = nativeParameters.active;
- // TODO(skvlad): Replace with rtc::Optional once the C++ code is updated.
- if (nativeParameters.max_bitrate_bps != kBitrateUnlimited) {
+ if (nativeParameters.max_bitrate_bps) {
_maxBitrateBps =
- [NSNumber numberWithInt:nativeParameters.max_bitrate_bps];
+ [NSNumber numberWithInt:*nativeParameters.max_bitrate_bps];
}
if (nativeParameters.ssrc) {
_ssrc = [NSNumber numberWithUnsignedLong:*nativeParameters.ssrc];
@@ -42,7 +39,7 @@
webrtc::RtpEncodingParameters parameters;
parameters.active = _isActive;
if (_maxBitrateBps != nil) {
- parameters.max_bitrate_bps = _maxBitrateBps.intValue;
+ parameters.max_bitrate_bps = rtc::Optional<int>(_maxBitrateBps.intValue);
}
if (_ssrc != nil) {
parameters.ssrc = rtc::Optional<uint32_t>(_ssrc.unsignedLongValue);