From 7f854bce1f27557adbc971b4e4e8a64a2c155159 Mon Sep 17 00:00:00 2001 From: Peter Hanspers Date: Wed, 4 Aug 2021 17:15:49 +0200 Subject: [PATCH] Add supportsNativeHandle to the RTCVideoEncoder protocol. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The simulcast_encoder_adapter expects codecs that specify supports_native_handle to perform resampling/scaling (through GetEncoderInfo). This change adds a method to the RTCVideoEncoder to let objc encoders specify this rather than relying on the default. Bug: webrtc:13044 Change-Id: I2efcbd42aa4f2048285f451c7b691fdeca111e62 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227641 Reviewed-by: Kári Helgason Commit-Queue: Peter Hanspers Cr-Commit-Position: refs/heads/master@{#34683} --- sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm | 4 ++++ sdk/objc/base/RTCVideoEncoder.h | 4 ++++ sdk/objc/components/video_codec/RTCVideoEncoderH264.mm | 4 ++++ sdk/objc/native/src/objc_video_encoder_factory.mm | 2 +- 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm b/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm index ea2a459360..6b04d83e2b 100644 --- a/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm +++ b/sdk/objc/api/video_codec/RTCWrappedNativeVideoEncoder.mm @@ -79,4 +79,8 @@ return NO; } +- (BOOL)supportsNativeHandle { + RTC_NOTREACHED(); + return NO; +} @end diff --git a/sdk/objc/base/RTCVideoEncoder.h b/sdk/objc/base/RTCVideoEncoder.h index 26cf4ec03f..2b5c952afa 100644 --- a/sdk/objc/base/RTCVideoEncoder.h +++ b/sdk/objc/base/RTCVideoEncoder.h @@ -50,6 +50,10 @@ RTC_OBJC_EXPORT scaled, all resolutions comply with 'resolutionAlignment'. */ @property(nonatomic, readonly) BOOL applyAlignmentToAllSimulcastLayers; +/** If YES, the reciever is expected to resample/scale the source texture to the expected output + size. */ +@property(nonatomic, readonly) BOOL supportsNativeHandle; + @end NS_ASSUME_NONNULL_END diff --git a/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm b/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm index 8794849545..966eb3ee5c 100644 --- a/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm +++ b/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm @@ -537,6 +537,10 @@ NSUInteger GetMaxSampleRate(const webrtc::H264ProfileLevelId &profile_level_id) return NO; } +- (BOOL)supportsNativeHandle { + return YES; +} + #pragma mark - Private - (NSInteger)releaseEncoder { diff --git a/sdk/objc/native/src/objc_video_encoder_factory.mm b/sdk/objc/native/src/objc_video_encoder_factory.mm index b66554b1a4..06515e586e 100644 --- a/sdk/objc/native/src/objc_video_encoder_factory.mm +++ b/sdk/objc/native/src/objc_video_encoder_factory.mm @@ -91,7 +91,6 @@ class ObjCVideoEncoder : public VideoEncoder { VideoEncoder::EncoderInfo GetEncoderInfo() const override { EncoderInfo info; - info.supports_native_handle = true; info.implementation_name = implementation_name_; RTC_OBJC_TYPE(RTCVideoEncoderQpThresholds) *qp_thresholds = [encoder_ scalingSettings]; @@ -100,6 +99,7 @@ class ObjCVideoEncoder : public VideoEncoder { info.requested_resolution_alignment = encoder_.resolutionAlignment > 0 ?: 1; info.apply_alignment_to_all_simulcast_layers = encoder_.applyAlignmentToAllSimulcastLayers; + info.supports_native_handle = encoder_.supportsNativeHandle; info.is_hardware_accelerated = true; info.has_internal_source = false; return info;