Extend objc RTCVideoCodecInfo to include scalability modes
To match SdpVideoFormat c++ type Bug: b/299588022 Change-Id: I67444cdb500b75fe43e3dfec47cc1333783897c2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/358866 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Reviewed-by: Åsa Persson <asapersson@webrtc.org> Cr-Commit-Position: refs/heads/main@{#42864}
This commit is contained in:
parent
67ed656b75
commit
6bed21c811
@ -902,6 +902,8 @@ if (is_ios || is_mac) {
|
||||
":base_objc",
|
||||
":helpers_objc",
|
||||
"../api/video:encoded_image",
|
||||
"../api/video_codecs:scalability_mode",
|
||||
"../api/video_codecs:scalability_mode_helper",
|
||||
"../api/video_codecs:video_codecs_api",
|
||||
"../modules/video_coding:video_codec_interface",
|
||||
"../rtc_base:refcount",
|
||||
|
||||
@ -10,18 +10,28 @@
|
||||
|
||||
#import "RTCVideoCodecInfo+Private.h"
|
||||
|
||||
#include "api/video_codecs/scalability_mode.h"
|
||||
#include "api/video_codecs/scalability_mode_helper.h"
|
||||
#import "helpers/NSString+StdString.h"
|
||||
|
||||
@implementation RTC_OBJC_TYPE (RTCVideoCodecInfo)
|
||||
(Private)
|
||||
|
||||
- (instancetype)initWithNativeSdpVideoFormat : (webrtc::SdpVideoFormat)format {
|
||||
NSMutableDictionary *params = [NSMutableDictionary dictionary];
|
||||
for (auto it = format.parameters.begin(); it != format.parameters.end(); ++it) {
|
||||
[params setObject:[NSString stringForStdString:it->second]
|
||||
forKey:[NSString stringForStdString:it->first]];
|
||||
NSMutableDictionary* params = [NSMutableDictionary dictionary];
|
||||
for (const auto& [key, value] : format.parameters) {
|
||||
[params setObject:[NSString stringForStdString:value] forKey:[NSString stringForStdString:key]];
|
||||
}
|
||||
return [self initWithName:[NSString stringForStdString:format.name] parameters:params];
|
||||
|
||||
NSMutableArray<NSString*>* scalabilityModes =
|
||||
[NSMutableArray arrayWithCapacity:format.scalability_modes.size()];
|
||||
for (webrtc::ScalabilityMode mode : format.scalability_modes) {
|
||||
[scalabilityModes addObject:[NSString stringForAbslStringView:ScalabilityModeToString(mode)]];
|
||||
}
|
||||
|
||||
return [self initWithName:[NSString stringForStdString:format.name]
|
||||
parameters:params
|
||||
scalabilityModes:scalabilityModes];
|
||||
}
|
||||
|
||||
- (webrtc::SdpVideoFormat)nativeSdpVideoFormat {
|
||||
@ -32,7 +42,17 @@
|
||||
parameters[key] = value;
|
||||
}
|
||||
|
||||
return webrtc::SdpVideoFormat([NSString stdStringForString:self.name], parameters);
|
||||
absl::InlinedVector<webrtc::ScalabilityMode, webrtc::kScalabilityModeCount> scalability_modes;
|
||||
for (NSString* mode_name in self.scalabilityModes) {
|
||||
absl::optional<webrtc::ScalabilityMode> mode =
|
||||
webrtc::ScalabilityModeStringToEnum([NSString stdStringForString:mode_name]);
|
||||
if (mode.has_value()) {
|
||||
scalability_modes.push_back(*mode);
|
||||
}
|
||||
}
|
||||
|
||||
return webrtc::SdpVideoFormat(
|
||||
[NSString stdStringForString:self.name], parameters, scalability_modes);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -23,13 +23,17 @@ RTC_OBJC_EXPORT
|
||||
- (instancetype)initWithName:(NSString *)name;
|
||||
|
||||
- (instancetype)initWithName:(NSString *)name
|
||||
parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters
|
||||
NS_DESIGNATED_INITIALIZER;
|
||||
parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters;
|
||||
|
||||
- (instancetype)initWithName:(NSString *)name
|
||||
parameters:(NSDictionary<NSString *, NSString *> *)parameters
|
||||
scalabilityModes:(NSArray<NSString *> *)scalabilityModes NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
- (BOOL)isEqualToCodecInfo:(RTC_OBJC_TYPE(RTCVideoCodecInfo) *)info;
|
||||
|
||||
@property(nonatomic, readonly) NSString *name;
|
||||
@property(nonatomic, readonly) NSDictionary<NSString *, NSString *> *parameters;
|
||||
@property(nonatomic, readonly) NSArray<NSString *> *scalabilityModes;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@ -14,26 +14,35 @@
|
||||
|
||||
@synthesize name = _name;
|
||||
@synthesize parameters = _parameters;
|
||||
@synthesize scalabilityModes = _scalabilityModes;
|
||||
|
||||
- (instancetype)initWithName:(NSString *)name {
|
||||
return [self initWithName:name parameters:nil];
|
||||
return [self initWithName:name parameters:@{} scalabilityModes:@[]];
|
||||
}
|
||||
|
||||
- (instancetype)initWithName:(NSString *)name
|
||||
parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters {
|
||||
NSDictionary<NSString *, NSString *> *params = parameters ? parameters : @{};
|
||||
return [self initWithName:name parameters:params scalabilityModes:@[]];
|
||||
}
|
||||
|
||||
- (instancetype)initWithName:(NSString *)name
|
||||
parameters:(NSDictionary<NSString *, NSString *> *)parameters
|
||||
scalabilityModes:(NSArray<NSString *> *)scalabilityModes {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_name = name;
|
||||
_parameters = (parameters ? parameters : @{});
|
||||
_parameters = parameters;
|
||||
_scalabilityModes = scalabilityModes;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (BOOL)isEqualToCodecInfo:(RTC_OBJC_TYPE(RTCVideoCodecInfo) *)info {
|
||||
if (!info ||
|
||||
![self.name isEqualToString:info.name] ||
|
||||
![self.parameters isEqualToDictionary:info.parameters]) {
|
||||
if (!info || ![self.name isEqualToString:info.name] ||
|
||||
![self.parameters isEqualToDictionary:info.parameters] ||
|
||||
![self.scalabilityModes isEqualToArray:info.scalabilityModes]) {
|
||||
return NO;
|
||||
}
|
||||
return YES;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user