From 8b4e92d0a5a198583c91af765386f9d5f76efb9f Mon Sep 17 00:00:00 2001 From: Magnus Jedvert Date: Fri, 13 Apr 2018 15:36:43 +0200 Subject: [PATCH] ObjC SDK: Stop using built-in SW video codecs This CL removes the use of default built-in SW in the ObjC layer. If a client want to depend on the video SW codecs, they must inject them explicitly. Bug: webrtc:7925 Change-Id: If752e7f02109ff768dc5ec38d935203de85987c2 Reviewed-on: https://webrtc-review.googlesource.com/69800 Commit-Queue: Magnus Jedvert Reviewed-by: Anders Carlsson Cr-Commit-Position: refs/heads/master@{#23073} --- sdk/BUILD.gn | 22 +++----- .../RTCDefaultVideoDecoderFactory.m | 10 +--- .../RTCDefaultVideoEncoderFactory.m | 12 +---- .../RTCPeerConnectionFactory+Native.h | 23 -------- .../RTCPeerConnectionFactory.mm | 54 +------------------ .../PeerConnection/RTCVideoCodec+Private.h | 4 -- .../Classes/PeerConnection/RTCVideoCodec.mm | 15 ------ .../VideoToolbox/RTCVideoEncoderH264.mm | 4 +- .../Framework/Headers/WebRTC/RTCVideoCodec.h | 2 +- .../Native/src/objc_video_decoder_factory.h | 13 +---- .../Native/src/objc_video_decoder_factory.mm | 18 ------- .../Native/src/objc_video_encoder_factory.h | 14 +---- .../Native/src/objc_video_encoder_factory.mm | 24 --------- .../objc_video_decoder_factory_tests.mm | 17 +++--- .../objc_video_encoder_factory_tests.mm | 25 ++++----- 15 files changed, 39 insertions(+), 218 deletions(-) diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 8f8027e23c..bc7fa36fa2 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -407,13 +407,9 @@ if (is_ios || is_mac) { ":common_objc", ":native_video", ":videocodec_objc", + ":vp8", + ":vp9", ] - if (rtc_use_builtin_sw_codecs) { - deps += [ - ":vp8", - ":vp9", - ] - } } rtc_static_library("vp8") { @@ -826,6 +822,7 @@ if (is_ios || is_mac) { ":videosource_objc", ":videotoolbox_objc", "../../system_wrappers:system_wrappers_default", + "../api/video_codecs:video_codecs_api", "../media:rtc_media_base", "../modules:module_api", "../modules/video_coding:video_codec_interface", @@ -902,15 +899,12 @@ if (is_ios || is_mac) { "objc/Framework/Headers/WebRTC/RTCVideoTrack.h", "objc/Framework/Headers/WebRTC/RTCVideoViewShading.h", "objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h", + "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h", + "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h", + "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h", + "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h", ] - if (rtc_use_builtin_sw_codecs) { - common_objc_headers += [ - "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h", - "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h", - "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h", - "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h", - ] - } + if (!build_with_chromium) { common_objc_headers += [ "objc/Framework/Headers/WebRTC/RTCCallbackLogger.h", diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m index 405e8c8408..5f292c9c38 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m @@ -11,11 +11,9 @@ #import "WebRTC/RTCVideoCodecFactory.h" #import "WebRTC/RTCVideoCodecH264.h" -#if defined(USE_BUILTIN_SW_CODECS) -#import "WebRTC/RTCVideoDecoderVP8.h" // nogncheck +#import "WebRTC/RTCVideoDecoderVP8.h" #if !defined(RTC_DISABLE_VP9) -#import "WebRTC/RTCVideoDecoderVP9.h" // nogncheck -#endif +#import "WebRTC/RTCVideoDecoderVP9.h" #endif @implementation RTCDefaultVideoDecoderFactory @@ -23,13 +21,11 @@ - (id)createDecoder:(RTCVideoCodecInfo *)info { if ([info.name isEqualToString:kRTCVideoCodecH264Name]) { return [[RTCVideoDecoderH264 alloc] init]; -#if defined(USE_BUILTIN_SW_CODECS) } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) { return [RTCVideoDecoderVP8 vp8Decoder]; #if !defined(RTC_DISABLE_VP9) } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) { return [RTCVideoDecoderVP9 vp9Decoder]; -#endif #endif } @@ -39,11 +35,9 @@ - (NSArray *)supportedCodecs { return @[ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name], -#if defined(USE_BUILTIN_SW_CODECS) [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name], #if !defined(RTC_DISABLE_VP9) [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name], -#endif #endif ]; } diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m index 60a0b5f00f..a4b8d710f4 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m @@ -12,11 +12,9 @@ #import "WebRTC/RTCVideoCodec.h" #import "WebRTC/RTCVideoCodecH264.h" -#if defined(USE_BUILTIN_SW_CODECS) -#import "WebRTC/RTCVideoEncoderVP8.h" // nogncheck +#import "WebRTC/RTCVideoEncoderVP8.h" #if !defined(RTC_DISABLE_VP9) -#import "WebRTC/RTCVideoEncoderVP9.h" // nogncheck -#endif +#import "WebRTC/RTCVideoEncoderVP9.h" #endif @implementation RTCDefaultVideoEncoderFactory @@ -42,22 +40,18 @@ [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecH264Name parameters:constrainedBaselineParams]; -#if defined(USE_BUILTIN_SW_CODECS) RTCVideoCodecInfo *vp8Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp8Name]; #if !defined(RTC_DISABLE_VP9) RTCVideoCodecInfo *vp9Info = [[RTCVideoCodecInfo alloc] initWithName:kRTCVideoCodecVp9Name]; -#endif #endif return @[ constrainedHighInfo, constrainedBaselineInfo, -#if defined(USE_BUILTIN_SW_CODECS) vp8Info, #if !defined(RTC_DISABLE_VP9) vp9Info, -#endif #endif ]; } @@ -65,13 +59,11 @@ - (id)createEncoder:(RTCVideoCodecInfo *)info { if ([info.name isEqualToString:kRTCVideoCodecH264Name]) { return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info]; -#if defined(USE_BUILTIN_SW_CODECS) } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) { return [RTCVideoEncoderVP8 vp8Encoder]; #if !defined(RTC_DISABLE_VP9) } else if ([info.name isEqualToString:kRTCVideoCodecVp9Name]) { return [RTCVideoEncoderVP9 vp9Encoder]; -#endif #endif } diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h index 3b0e9302dc..3d460fe4d8 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h @@ -23,15 +23,6 @@ class AudioProcessing; } // namespace webrtc -#if defined(USE_BUILTIN_SW_CODECS) -namespace cricket { - -class WebRtcVideoEncoderFactory; -class WebRtcVideoDecoderFactory; - -} // namespace cricket -#endif - NS_ASSUME_NONNULL_BEGIN /** @@ -58,20 +49,6 @@ NS_ASSUME_NONNULL_BEGIN audioProcessingModule: (rtc::scoped_refptr)audioProcessingModule; -#if defined(USE_BUILTIN_SW_CODECS) -/* Initialize object with legacy injectable native audio/video encoder/decoder factories - TODO(andersc): Remove this when backwards compatiblity is no longer needed. - */ -- (instancetype) - initWithNativeAudioEncoderFactory: - (rtc::scoped_refptr)audioEncoderFactory - nativeAudioDecoderFactory: - (rtc::scoped_refptr)audioDecoderFactory - legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory*)videoEncoderFactory - legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory*)videoDecoderFactory - audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule; -#endif - @end NS_ASSUME_NONNULL_END diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm index 31ba49e596..1ae458f9c2 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm @@ -58,7 +58,7 @@ - (instancetype)init { #ifdef HAVE_NO_MEDIA return [self initWithNoMedia]; -#elif !defined(USE_BUILTIN_SW_CODECS) +#else return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory() nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory() nativeVideoEncoderFactory:webrtc::ObjCToNativeVideoEncoderFactory( @@ -67,18 +67,6 @@ [[RTCVideoDecoderFactoryH264 alloc] init]) audioDeviceModule:nullptr audioProcessingModule:nullptr]; -#else - // Here we construct webrtc::ObjCVideoEncoderFactory directly because we rely - // on the fact that they inherit from both webrtc::VideoEncoderFactory and - // cricket::WebRtcVideoEncoderFactory. - return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory() - nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory() - legacyNativeVideoEncoderFactory:new webrtc::ObjCVideoEncoderFactory( - [[RTCVideoEncoderFactoryH264 alloc] init]) - legacyNativeVideoDecoderFactory:new webrtc::ObjCVideoDecoderFactory( - [[RTCVideoDecoderFactoryH264 alloc] init]) - audioDeviceModule:nullptr]; - #endif } @@ -151,18 +139,6 @@ return [self initWithNoMedia]; #else if (self = [self initNative]) { -#if defined(USE_BUILTIN_SW_CODECS) - if (!videoEncoderFactory) { - auto legacy_video_encoder_factory = rtc::MakeUnique( - [[RTCVideoEncoderFactoryH264 alloc] init]); - videoEncoderFactory = ConvertVideoEncoderFactory(std::move(legacy_video_encoder_factory)); - } - if (!videoDecoderFactory) { - auto legacy_video_decoder_factory = rtc::MakeUnique( - [[RTCVideoDecoderFactoryH264 alloc] init]); - videoDecoderFactory = ConvertVideoDecoderFactory(std::move(legacy_video_decoder_factory)); - } -#endif _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(), _workerThread.get(), _signalingThread.get(), @@ -179,34 +155,6 @@ #endif } -#if defined(USE_BUILTIN_SW_CODECS) -- (instancetype) - initWithNativeAudioEncoderFactory: - (rtc::scoped_refptr)audioEncoderFactory - nativeAudioDecoderFactory: - (rtc::scoped_refptr)audioDecoderFactory - legacyNativeVideoEncoderFactory:(cricket::WebRtcVideoEncoderFactory *)videoEncoderFactory - legacyNativeVideoDecoderFactory:(cricket::WebRtcVideoDecoderFactory *)videoDecoderFactory - audioDeviceModule:(nullable webrtc::AudioDeviceModule *)audioDeviceModule { -#ifdef HAVE_NO_MEDIA - return [self initWithNoMedia]; -#else - if (self = [self initNative]) { - _nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(), - _workerThread.get(), - _signalingThread.get(), - audioDeviceModule, - audioEncoderFactory, - audioDecoderFactory, - videoEncoderFactory, - videoDecoderFactory); - NSAssert(_nativeFactory, @"Failed to initialize PeerConnectionFactory!"); - } - return self; -#endif -} -#endif - - (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints { std::unique_ptr nativeConstraints; if (constraints) { diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h index 97ee5138ad..4a2cf5228b 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h @@ -53,10 +53,6 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithNativeSdpVideoFormat:(webrtc::SdpVideoFormat)format; - (webrtc::SdpVideoFormat)nativeSdpVideoFormat; -/* TODO(andersc): These are deprecated, remove when no longer in use. */ -- (instancetype)initWithNativeVideoCodec:(cricket::VideoCodec)videoCodec; -- (cricket::VideoCodec)nativeVideoCodec; - @end NS_ASSUME_NONNULL_END diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm index fc2c1cea14..63be2dc67c 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm @@ -105,11 +105,6 @@ NSString *MaxSupportedProfileLevelConstrainedHigh() { return [self initWithName:[NSString stringForStdString:format.name] parameters:params]; } -- (instancetype)initWithNativeVideoCodec:(cricket::VideoCodec)videoCodec { - return [self - initWithNativeSdpVideoFormat:webrtc::SdpVideoFormat(videoCodec.name, videoCodec.params)]; -} - - (BOOL)isEqualToCodecInfo:(RTCVideoCodecInfo *)info { if (!info || ![self.name isEqualToString:info.name] || @@ -142,16 +137,6 @@ NSString *MaxSupportedProfileLevelConstrainedHigh() { return webrtc::SdpVideoFormat([NSString stdStringForString:_name], parameters); } -- (cricket::VideoCodec)nativeVideoCodec { - cricket::VideoCodec codec([NSString stdStringForString:_name]); - for (NSString *paramKey in _parameters.allKeys) { - codec.SetParam([NSString stdStringForString:paramKey], - [NSString stdStringForString:_parameters[paramKey]]); - } - - return codec; -} - #pragma mark - NSCoding - (instancetype)initWithCoder:(NSCoder *)decoder { diff --git a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm index 3289f0187a..ffdbd9d3df 100644 --- a/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm +++ b/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm @@ -167,8 +167,8 @@ void compressionOutputCallback(void *encoder, rotation:encodeParams->rotation]; } -// Extract VideoToolbox profile out of the cricket::VideoCodec. If there is no -// specific VideoToolbox profile for the specified level, AutoLevel will be +// Extract VideoToolbox profile out of the webrtc::SdpVideoFormat. If there is +// no specific VideoToolbox profile for the specified level, AutoLevel will be // returned. The user must initialize the encoder with a resolution and // framerate conforming to the selected H264 level regardless. CFStringRef ExtractProfile(webrtc::SdpVideoFormat videoFormat) { diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h index c179b92c06..063963d2e4 100644 --- a/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h +++ b/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h @@ -90,7 +90,7 @@ typedef NS_ENUM(NSUInteger, RTCVideoCodecMode) { RTCVideoCodecModeScreensharing, }; -/** Holds information to identify a codec. Corresponds to cricket::VideoCodec. */ +/** Holds information to identify a codec. Corresponds to webrtc::SdpVideoFormat. */ RTC_EXPORT @interface RTCVideoCodecInfo : NSObject diff --git a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h index fdd6feb168..2967b0adf7 100644 --- a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h +++ b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.h @@ -13,16 +13,12 @@ #include "api/video_codecs/video_decoder_factory.h" #include "media/base/codec.h" -#include "media/engine/webrtcvideodecoderfactory.h" @protocol RTCVideoDecoderFactory; namespace webrtc { -// TODO(andersc): Remove the inheritance from cricket::WebRtcVideoDecoderFactory -// when the legacy path in [RTCPeerConnectionFactory init] is no longer needed. -class ObjCVideoDecoderFactory : public VideoDecoderFactory, - public cricket::WebRtcVideoDecoderFactory { +class ObjCVideoDecoderFactory : public VideoDecoderFactory { public: explicit ObjCVideoDecoderFactory(id); ~ObjCVideoDecoderFactory(); @@ -33,13 +29,6 @@ class ObjCVideoDecoderFactory : public VideoDecoderFactory, std::unique_ptr CreateVideoDecoder( const SdpVideoFormat& format) override; - // Needed for WebRtcVideoDecoderFactory interface. - VideoDecoder* CreateVideoDecoderWithParams( - const cricket::VideoCodec& codec, - cricket::VideoDecoderParams params) override; - VideoDecoder* CreateVideoDecoder(VideoCodecType type) override; - void DestroyVideoDecoder(VideoDecoder* decoder) override; - private: id decoder_factory_; }; diff --git a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm index 051f19d0bd..3d7869f56e 100644 --- a/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm +++ b/sdk/objc/Framework/Native/src/objc_video_decoder_factory.mm @@ -150,22 +150,4 @@ std::vector ObjCVideoDecoderFactory::GetSupportedFormats() const return supported_formats; } -// WebRtcVideoDecoderFactory - -VideoDecoder *ObjCVideoDecoderFactory::CreateVideoDecoderWithParams( - const cricket::VideoCodec &codec, cricket::VideoDecoderParams params) { - return CreateVideoDecoder(SdpVideoFormat(codec.name, codec.params)).release(); -} - -VideoDecoder *ObjCVideoDecoderFactory::CreateVideoDecoder(VideoCodecType type) { - // This is implemented to avoid hiding an overloaded virtual function - RTC_NOTREACHED(); - return nullptr; -} - -void ObjCVideoDecoderFactory::DestroyVideoDecoder(VideoDecoder *decoder) { - delete decoder; - decoder = nullptr; -} - } // namespace webrtc diff --git a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h index 42ffd53c02..8c3a5a82c9 100644 --- a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h +++ b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.h @@ -14,16 +14,12 @@ #import #include "api/video_codecs/video_encoder_factory.h" -#include "media/engine/webrtcvideoencoderfactory.h" @protocol RTCVideoEncoderFactory; namespace webrtc { -// TODO(andersc): Remove the inheritance from cricket::WebRtcVideoEncoderFactory -// when the legacy path in [RTCPeerConnectionFactory init] is no longer needed. -class ObjCVideoEncoderFactory : public VideoEncoderFactory, - public cricket::WebRtcVideoEncoderFactory { +class ObjCVideoEncoderFactory : public VideoEncoderFactory { public: explicit ObjCVideoEncoderFactory(id); ~ObjCVideoEncoderFactory(); @@ -35,16 +31,8 @@ class ObjCVideoEncoderFactory : public VideoEncoderFactory, const SdpVideoFormat& format) override; CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const override; - // Needed for WebRtcVideoEncoderFactory interface. - VideoEncoder* CreateVideoEncoder(const cricket::VideoCodec& codec) override; - const std::vector& supported_codecs() const override; - void DestroyVideoEncoder(VideoEncoder* encoder) override; - private: id encoder_factory_; - - // Needed for WebRtcVideoEncoderFactory interface. - mutable std::vector supported_codecs_; }; } // namespace webrtc diff --git a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm index 59356f74d4..6de3d69e47 100644 --- a/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm +++ b/sdk/objc/Framework/Native/src/objc_video_encoder_factory.mm @@ -160,28 +160,4 @@ std::unique_ptr ObjCVideoEncoderFactory::CreateVideoEncoder( } } -// WebRtcVideoEncoderFactory - -VideoEncoder *ObjCVideoEncoderFactory::CreateVideoEncoder(const cricket::VideoCodec &codec) { - RTCVideoCodecInfo *info = [[RTCVideoCodecInfo alloc] - initWithNativeSdpVideoFormat:SdpVideoFormat(codec.name, codec.params)]; - id encoder = [encoder_factory_ createEncoder:info]; - return new ObjCVideoEncoder(encoder); -} - -const std::vector &ObjCVideoEncoderFactory::supported_codecs() const { - supported_codecs_.clear(); - for (RTCVideoCodecInfo *supportedCodec in encoder_factory_.supportedCodecs) { - SdpVideoFormat format = [supportedCodec nativeSdpVideoFormat]; - supported_codecs_.push_back(cricket::VideoCodec(format)); - } - - return supported_codecs_; -} - -void ObjCVideoEncoderFactory::DestroyVideoEncoder(VideoEncoder *encoder) { - delete encoder; - encoder = nullptr; -} - } // namespace webrtc diff --git a/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm b/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm index d4e5ea980e..b002ed26ac 100644 --- a/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm +++ b/sdk/objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm @@ -55,30 +55,29 @@ id CreateErrorDecoderFactory() { return CreateDecoderFactoryReturning(WEBRTC_VIDEO_CODEC_ERROR); } -webrtc::VideoDecoder *GetObjCDecoder(id factory) { +std::unique_ptr GetObjCDecoder(id factory) { webrtc::ObjCVideoDecoderFactory decoder_factory(factory); - return decoder_factory.CreateVideoDecoderWithParams(cricket::VideoCodec(cricket::kH264CodecName), - {}); + return decoder_factory.CreateVideoDecoder(webrtc::SdpVideoFormat(cricket::kH264CodecName)); } #pragma mark - TEST(ObjCVideoDecoderFactoryTest, InitDecodeReturnsOKOnSuccess) { - webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory()); + std::unique_ptr decoder = GetObjCDecoder(CreateOKDecoderFactory()); auto settings = new webrtc::VideoCodec(); EXPECT_EQ(decoder->InitDecode(settings, 1), WEBRTC_VIDEO_CODEC_OK); } TEST(ObjCVideoDecoderFactoryTest, InitDecodeReturnsErrorOnFail) { - webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory()); + std::unique_ptr decoder = GetObjCDecoder(CreateErrorDecoderFactory()); auto settings = new webrtc::VideoCodec(); EXPECT_EQ(decoder->InitDecode(settings, 1), WEBRTC_VIDEO_CODEC_ERROR); } TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsOKOnSuccess) { - webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory()); + std::unique_ptr decoder = GetObjCDecoder(CreateOKDecoderFactory()); webrtc::EncodedImage encoded_image; webrtc::CodecSpecificInfo info; @@ -88,7 +87,7 @@ TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsOKOnSuccess) { } TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsErrorOnFail) { - webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory()); + std::unique_ptr decoder = GetObjCDecoder(CreateErrorDecoderFactory()); webrtc::EncodedImage encoded_image; webrtc::CodecSpecificInfo info; @@ -98,13 +97,13 @@ TEST(ObjCVideoDecoderFactoryTest, DecodeReturnsErrorOnFail) { } TEST(ObjCVideoDecoderFactoryTest, ReleaseDecodeReturnsOKOnSuccess) { - webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateOKDecoderFactory()); + std::unique_ptr decoder = GetObjCDecoder(CreateOKDecoderFactory()); EXPECT_EQ(decoder->Release(), WEBRTC_VIDEO_CODEC_OK); } TEST(ObjCVideoDecoderFactoryTest, ReleaseDecodeReturnsErrorOnFail) { - webrtc::VideoDecoder *decoder = GetObjCDecoder(CreateErrorDecoderFactory()); + std::unique_ptr decoder = GetObjCDecoder(CreateErrorDecoderFactory()); EXPECT_EQ(decoder->Release(), WEBRTC_VIDEO_CODEC_ERROR); } diff --git a/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm b/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm index b3925be5d1..2ae1ebbeb1 100644 --- a/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm +++ b/sdk/objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm @@ -16,6 +16,7 @@ #import "WebRTC/RTCVideoCodec.h" #import "WebRTC/RTCVideoCodecFactory.h" #import "WebRTC/RTCVideoFrameBuffer.h" +#include "api/video_codecs/sdp_video_format.h" #include "modules/include/module_common_types.h" #include "modules/video_coding/include/video_codec_interface.h" #include "modules/video_coding/include/video_error_codes.h" @@ -46,30 +47,30 @@ id CreateErrorEncoderFactory() { return CreateEncoderFactoryReturning(WEBRTC_VIDEO_CODEC_ERROR); } -webrtc::VideoEncoder *GetObjCEncoder(id factory) { +std::unique_ptr GetObjCEncoder(id factory) { webrtc::ObjCVideoEncoderFactory encoder_factory(factory); - cricket::VideoCodec codec("H264"); - return encoder_factory.CreateVideoEncoder(codec); + webrtc::SdpVideoFormat format("H264"); + return encoder_factory.CreateVideoEncoder(format); } #pragma mark - TEST(ObjCVideoEncoderFactoryTest, InitEncodeReturnsOKOnSuccess) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateOKEncoderFactory()); auto settings = new webrtc::VideoCodec(); EXPECT_EQ(encoder->InitEncode(settings, 1, 0), WEBRTC_VIDEO_CODEC_OK); } TEST(ObjCVideoEncoderFactoryTest, InitEncodeReturnsErrorOnFail) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateErrorEncoderFactory()); auto settings = new webrtc::VideoCodec(); EXPECT_EQ(encoder->InitEncode(settings, 1, 0), WEBRTC_VIDEO_CODEC_ERROR); } TEST(ObjCVideoEncoderFactoryTest, EncodeReturnsOKOnSuccess) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateOKEncoderFactory()); CVPixelBufferRef pixel_buffer; CVPixelBufferCreate(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_32ARGB, nil, &pixel_buffer); @@ -86,7 +87,7 @@ TEST(ObjCVideoEncoderFactoryTest, EncodeReturnsOKOnSuccess) { } TEST(ObjCVideoEncoderFactoryTest, EncodeReturnsErrorOnFail) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateErrorEncoderFactory()); CVPixelBufferRef pixel_buffer; CVPixelBufferCreate(kCFAllocatorDefault, 640, 480, kCVPixelFormatType_32ARGB, nil, &pixel_buffer); @@ -103,31 +104,31 @@ TEST(ObjCVideoEncoderFactoryTest, EncodeReturnsErrorOnFail) { } TEST(ObjCVideoEncoderFactoryTest, ReleaseEncodeReturnsOKOnSuccess) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateOKEncoderFactory()); EXPECT_EQ(encoder->Release(), WEBRTC_VIDEO_CODEC_OK); } TEST(ObjCVideoEncoderFactoryTest, ReleaseEncodeReturnsErrorOnFail) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateErrorEncoderFactory()); EXPECT_EQ(encoder->Release(), WEBRTC_VIDEO_CODEC_ERROR); } TEST(ObjCVideoEncoderFactoryTest, SetChannelParametersAlwaysReturnsOK) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateErrorEncoderFactory()); EXPECT_EQ(encoder->SetChannelParameters(1, 1), WEBRTC_VIDEO_CODEC_OK); } TEST(ObjCVideoEncoderFactoryTest, SetRatesReturnsOKOnSuccess) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateOKEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateOKEncoderFactory()); EXPECT_EQ(encoder->SetRates(0, 0), WEBRTC_VIDEO_CODEC_OK); } TEST(ObjCVideoEncoderFactoryTest, SetRatesReturnsErrorOnFail) { - webrtc::VideoEncoder *encoder = GetObjCEncoder(CreateErrorEncoderFactory()); + std::unique_ptr encoder = GetObjCEncoder(CreateErrorEncoderFactory()); EXPECT_EQ(encoder->SetRates(0, 0), WEBRTC_VIDEO_CODEC_ERROR); }