mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-16 15:20:42 +01:00

Bug: webrtc:15749 Change-Id: I92f5d5dc5d9eb4d0a60c33ed724a0d3e8b4fa1a8 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/333402 Auto-Submit: Karim Ham <karim@karhm.com> Reviewed-by: Florent Castelli <orphis@webrtc.org> Reviewed-by: Peter Hanspers <peterhanspers@webrtc.org> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Florent Castelli <orphis@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/main@{#41601}
116 lines
4.4 KiB
Text
116 lines
4.4 KiB
Text
/*
|
|
* Copyright 2024 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
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#import "RTCRtpCodecCapability+Private.h"
|
|
|
|
#import "RTCMediaStreamTrack.h"
|
|
#import "helpers/NSString+StdString.h"
|
|
|
|
#include "media/base/media_constants.h"
|
|
#include "rtc_base/checks.h"
|
|
|
|
@implementation RTC_OBJC_TYPE (RTCRtpCodecCapability)
|
|
|
|
@synthesize preferredPayloadType = _preferredPayloadType;
|
|
@synthesize name = _name;
|
|
@synthesize kind = _kind;
|
|
@synthesize clockRate = _clockRate;
|
|
@synthesize numChannels = _numChannels;
|
|
@synthesize parameters = _parameters;
|
|
@synthesize mimeType = _mimeType;
|
|
|
|
- (instancetype)init {
|
|
webrtc::RtpCodecCapability rtpCodecCapability;
|
|
return [self initWithNativeRtpCodecCapability:rtpCodecCapability];
|
|
}
|
|
|
|
- (instancetype)initWithNativeRtpCodecCapability:
|
|
(const webrtc::RtpCodecCapability &)nativeRtpCodecCapability {
|
|
if (self = [super init]) {
|
|
if (nativeRtpCodecCapability.preferred_payload_type) {
|
|
_preferredPayloadType =
|
|
[NSNumber numberWithInt:*nativeRtpCodecCapability.preferred_payload_type];
|
|
}
|
|
_name = [NSString stringForStdString:nativeRtpCodecCapability.name];
|
|
switch (nativeRtpCodecCapability.kind) {
|
|
case cricket::MEDIA_TYPE_AUDIO:
|
|
_kind = kRTCMediaStreamTrackKindAudio;
|
|
break;
|
|
case cricket::MEDIA_TYPE_VIDEO:
|
|
_kind = kRTCMediaStreamTrackKindVideo;
|
|
break;
|
|
case cricket::MEDIA_TYPE_DATA:
|
|
RTC_DCHECK_NOTREACHED();
|
|
break;
|
|
case cricket::MEDIA_TYPE_UNSUPPORTED:
|
|
RTC_DCHECK_NOTREACHED();
|
|
break;
|
|
}
|
|
if (nativeRtpCodecCapability.clock_rate) {
|
|
_clockRate = [NSNumber numberWithInt:*nativeRtpCodecCapability.clock_rate];
|
|
}
|
|
if (nativeRtpCodecCapability.num_channels) {
|
|
_numChannels = [NSNumber numberWithInt:*nativeRtpCodecCapability.num_channels];
|
|
}
|
|
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
|
for (const auto ¶meter : nativeRtpCodecCapability.parameters) {
|
|
[parameters setObject:[NSString stringForStdString:parameter.second]
|
|
forKey:[NSString stringForStdString:parameter.first]];
|
|
}
|
|
_parameters = parameters;
|
|
_mimeType = [NSString stringForStdString:nativeRtpCodecCapability.mime_type()];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (NSString *)description {
|
|
return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCRtpCodecCapability) {\n "
|
|
@"preferredPayloadType: %@\n name: %@\n kind: %@\n "
|
|
@"clockRate: %@\n numChannels: %@\n parameters: %@\n "
|
|
@"mimeType: %@\n}",
|
|
_preferredPayloadType,
|
|
_name,
|
|
_kind,
|
|
_clockRate,
|
|
_numChannels,
|
|
_parameters,
|
|
_mimeType];
|
|
}
|
|
|
|
- (webrtc::RtpCodecCapability)nativeRtpCodecCapability {
|
|
webrtc::RtpCodecCapability rtpCodecCapability;
|
|
if (_preferredPayloadType != nil) {
|
|
rtpCodecCapability.preferred_payload_type = absl::optional<int>(_preferredPayloadType.intValue);
|
|
}
|
|
rtpCodecCapability.name = [NSString stdStringForString:_name];
|
|
// NSString pointer comparison is safe here since "kind" is readonly and only
|
|
// populated above.
|
|
if (_kind == kRTCMediaStreamTrackKindAudio) {
|
|
rtpCodecCapability.kind = cricket::MEDIA_TYPE_AUDIO;
|
|
} else if (_kind == kRTCMediaStreamTrackKindVideo) {
|
|
rtpCodecCapability.kind = cricket::MEDIA_TYPE_VIDEO;
|
|
} else {
|
|
RTC_DCHECK_NOTREACHED();
|
|
}
|
|
if (_clockRate != nil) {
|
|
rtpCodecCapability.clock_rate = absl::optional<int>(_clockRate.intValue);
|
|
}
|
|
if (_numChannels != nil) {
|
|
rtpCodecCapability.num_channels = absl::optional<int>(_numChannels.intValue);
|
|
}
|
|
for (NSString *paramKey in _parameters.allKeys) {
|
|
std::string key = [NSString stdStringForString:paramKey];
|
|
std::string value = [NSString stdStringForString:_parameters[paramKey]];
|
|
rtpCodecCapability.parameters[key] = value;
|
|
}
|
|
return rtpCodecCapability;
|
|
}
|
|
|
|
@end
|