Skip to content

Commit 7039781

Browse files
committed
add scalabilityMode for AV1.
1 parent a59e857 commit 7039781

File tree

6 files changed

+58
-4
lines changed

6 files changed

+58
-4
lines changed

sdk/objc/api/peerconnection/RTCVideoCodecInfo+Private.mm

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212

1313
#import "helpers/NSString+StdString.h"
1414

15+
#include "absl/container/inlined_vector.h"
16+
#include "api/video_codecs/sdp_video_format.h"
17+
#include "modules/video_coding/svc/scalability_mode_util.h"
18+
#include "modules/video_coding/svc/create_scalability_structure.h"
19+
1520
@implementation RTC_OBJC_TYPE (RTCVideoCodecInfo)
1621
(Private)
1722

@@ -31,8 +36,16 @@ - (instancetype)initWithNativeSdpVideoFormat : (webrtc::SdpVideoFormat)format {
3136
std::string value = [NSString stdStringForString:self.parameters[paramKey]];
3237
parameters[key] = value;
3338
}
34-
35-
return webrtc::SdpVideoFormat([NSString stdStringForString:self.name], parameters);
39+
40+
absl::InlinedVector<webrtc::ScalabilityMode, webrtc::kScalabilityModeCount>
41+
scalability_modes;
42+
for (NSString *scalabilityMode in self.scalabilityModes) {
43+
auto scalability_mode = webrtc::ScalabilityModeFromString([NSString stdStringForString:scalabilityMode]);
44+
if (scalability_mode != absl::nullopt) {
45+
scalability_modes.push_back(*scalability_mode);
46+
}
47+
}
48+
return webrtc::SdpVideoFormat([NSString stdStringForString:self.name], parameters, scalability_modes);
3649
}
3750

3851
@end

sdk/objc/api/video_codec/RTCVideoEncoderAV1.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,6 @@ RTC_OBJC_EXPORT
2424

2525
+ (bool)isSupported;
2626

27+
+ (NSArray<NSString *> *)scalabilityModes;
28+
2729
@end

sdk/objc/api/video_codec/RTCVideoEncoderAV1.mm

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@
1414
#import "RTCMacros.h"
1515
#import "RTCVideoEncoderAV1.h"
1616
#import "RTCWrappedNativeVideoEncoder.h"
17+
18+
#import "helpers/NSString+StdString.h"
19+
20+
#include "absl/container/inlined_vector.h"
21+
#include "api/video_codecs/sdp_video_format.h"
22+
#include "modules/video_coding/codecs/av1/av1_svc_config.h"
1723
#include "modules/video_coding/codecs/av1/libaom_av1_encoder.h"
1824

1925
@implementation RTC_OBJC_TYPE (RTCVideoEncoderAV1)
@@ -28,4 +34,14 @@ + (bool)isSupported {
2834
return true;
2935
}
3036

37+
+ (NSArray<NSString *> *)scalabilityModes {
38+
absl::InlinedVector<webrtc::ScalabilityMode, webrtc::kScalabilityModeCount>
39+
scalability_modes = webrtc::LibaomAv1EncoderSupportedScalabilityModes();
40+
NSMutableArray<NSString *> *scalabilityModes = [NSMutableArray array];
41+
for (const webrtc::ScalabilityMode &scalability_mode : scalability_modes) {
42+
[scalabilityModes addObject:[NSString stringForAbslStringView:webrtc::ScalabilityModeToString(scalability_mode)]];
43+
}
44+
return scalabilityModes;
45+
}
46+
3147
@end

sdk/objc/base/RTCVideoCodecInfo.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,16 @@ RTC_OBJC_EXPORT
2626
parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters
2727
NS_DESIGNATED_INITIALIZER;
2828

29+
- (instancetype)initWithName:(NSString *)name
30+
parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters
31+
scalabilityModes:(nullable NSArray<NSString *> *)scalabilityModes
32+
NS_DESIGNATED_INITIALIZER;
33+
2934
- (BOOL)isEqualToCodecInfo:(RTC_OBJC_TYPE(RTCVideoCodecInfo) *)info;
3035

3136
@property(nonatomic, readonly) NSString *name;
3237
@property(nonatomic, readonly) NSDictionary<NSString *, NSString *> *parameters;
38+
@property(nonatomic, readonly) NSArray<NSString *> *scalabilityModes;
3339

3440
@end
3541

sdk/objc/base/RTCVideoCodecInfo.m

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ @implementation RTC_OBJC_TYPE (RTCVideoCodecInfo)
1414

1515
@synthesize name = _name;
1616
@synthesize parameters = _parameters;
17+
@synthesize scalabilityModes = _scalabilityModes;
1718

1819
- (instancetype)initWithName:(NSString *)name {
1920
return [self initWithName:name parameters:nil];
@@ -24,15 +25,29 @@ - (instancetype)initWithName:(NSString *)name
2425
if (self = [super init]) {
2526
_name = name;
2627
_parameters = (parameters ? parameters : @{});
28+
_scalabilityModes = @[];
2729
}
2830

2931
return self;
3032
}
3133

34+
- (instancetype)initWithName:(NSString *)name
35+
parameters:(nullable NSDictionary<NSString *, NSString *> *)parameters
36+
scalabilityModes:(nullable NSArray<NSString *> *)scalabilityModes {
37+
if (self = [super init]) {
38+
_name = name;
39+
_parameters = (parameters ? parameters : @{});
40+
_scalabilityModes = (scalabilityModes ? scalabilityModes : @[]);
41+
}
42+
43+
return self;
44+
}
45+
3246
- (BOOL)isEqualToCodecInfo:(RTC_OBJC_TYPE(RTCVideoCodecInfo) *)info {
3347
if (!info ||
3448
![self.name isEqualToString:info.name] ||
35-
![self.parameters isEqualToDictionary:info.parameters]) {
49+
![self.parameters isEqualToDictionary:info.parameters] ||
50+
![self.scalabilityModes isEqualToArray:info.scalabilityModes]) {
3651
return NO;
3752
}
3853
return YES;

sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ @implementation RTC_OBJC_TYPE (RTCDefaultVideoEncoderFactory)
5959
}
6060

6161
#if defined(RTC_USE_LIBAOM_AV1_ENCODER)
62-
[result addObject:[[RTC_OBJC_TYPE(RTCVideoCodecInfo) alloc] initWithName:kRTCVideoCodecAv1Name]];
62+
RTC_OBJC_TYPE(RTCVideoCodecInfo) *av1Info =
63+
[[RTC_OBJC_TYPE(RTCVideoCodecInfo) alloc] initWithName:kRTCVideoCodecAv1Name parameters:nil scalabilityModes:[RTCVideoEncoderAV1 scalabilityModes]];
64+
[result addObject:av1Info];
6365
#endif
6466

6567
return result;

0 commit comments

Comments
 (0)