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:
Danil Chapovalov 2024-08-27 09:52:58 +02:00 committed by WebRTC LUCI CQ
parent 67ed656b75
commit 6bed21c811
4 changed files with 48 additions and 13 deletions

View File

@ -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",

View File

@ -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

View File

@ -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

View File

@ -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;