Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(720)

Unified Diff: webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm

Issue 3012443002: ObjC: Add support for injectable native audio and video codecs (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
diff --git a/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
index dffacb69c9397083cdac83f13719824604547f3b..48d788f19289b62f00209a061f0ce94f33997cc3 100644
--- a/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
+++ b/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm
@@ -8,6 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#import "RTCPeerConnectionFactory+Native.h"
#import "RTCPeerConnectionFactory+Private.h"
#import "NSString+StdString.h"
@@ -22,12 +23,16 @@
#import "WebRTC/RTCLogging.h"
#import "WebRTC/RTCVideoCodecFactory.h"
#ifndef HAVE_NO_MEDIA
+#include "VideoToolbox/objc_video_decoder_factory.h"
+#include "VideoToolbox/objc_video_encoder_factory.h"
#import "WebRTC/RTCVideoCodecH264.h"
+// The no-media version PeerConnectionFactory doesn't depend on these files, but the gn check tool
+// is not smart enough to take the #ifdef into account.
+#include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h" // nogncheck
+#include "webrtc/api/audio_codecs/builtin_audio_encoder_factory.h" // nogncheck
#endif
#include "Video/objcvideotracksource.h"
-#include "VideoToolbox/objc_video_decoder_factory.h"
-#include "VideoToolbox/objc_video_encoder_factory.h"
#include "webrtc/api/videosourceproxy.h"
// Adding the nogncheck to disable the including header check.
// The no-media version PeerConnectionFactory doesn't depend on media related
@@ -47,15 +52,47 @@
- (instancetype)init {
#ifdef HAVE_NO_MEDIA
- return [self initWithEncoderFactory:nil decoderFactory:nil];
+ return [self initWithNativeAudioEncoderFactory:nil
+ nativeAudioDecoderFactory:nil
+ nativeVideoEncoderFactory:nil
+ nativeVideoDecoderFactory:nil];
#else
- return [self initWithEncoderFactory:[[RTCVideoEncoderFactoryH264 alloc] init]
- decoderFactory:[[RTCVideoDecoderFactoryH264 alloc] init]];
+ return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
+ nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
+ nativeVideoEncoderFactory:new webrtc::ObjCVideoEncoderFactory(
+ [[RTCVideoEncoderFactoryH264 alloc] init])
+ nativeVideoDecoderFactory:new webrtc::ObjCVideoDecoderFactory(
+ [[RTCVideoDecoderFactoryH264 alloc] init])];
#endif
}
- (instancetype)initWithEncoderFactory:(nullable id<RTCVideoEncoderFactory>)encoderFactory
decoderFactory:(nullable id<RTCVideoDecoderFactory>)decoderFactory {
+#ifdef HAVE_NO_MEDIA
+ return [self initWithNativeAudioEncoderFactory:nil
+ nativeAudioDecoderFactory:nil
+ nativeVideoEncoderFactory:nil
+ nativeVideoDecoderFactory:nil];
+#else
+ cricket::WebRtcVideoEncoderFactory *native_encoder_factory =
+ encoderFactory ? new webrtc::ObjCVideoEncoderFactory(encoderFactory) : nullptr;
+ cricket::WebRtcVideoDecoderFactory *native_decoder_factory =
+ decoderFactory ? new webrtc::ObjCVideoDecoderFactory(decoderFactory) : nullptr;
+ return [self initWithNativeAudioEncoderFactory:webrtc::CreateBuiltinAudioEncoderFactory()
+ nativeAudioDecoderFactory:webrtc::CreateBuiltinAudioDecoderFactory()
+ nativeVideoEncoderFactory:native_encoder_factory
+ nativeVideoDecoderFactory:native_decoder_factory];
+#endif
+}
+
+- (instancetype)initWithNativeAudioEncoderFactory:
+ (rtc::scoped_refptr<webrtc::AudioEncoderFactory>)audioEncoderFactory
+ nativeAudioDecoderFactory:
+ (rtc::scoped_refptr<webrtc::AudioDecoderFactory>)audioDecoderFactory
+ nativeVideoEncoderFactory:
+ (nullable cricket::WebRtcVideoEncoderFactory *)videoEncoderFactory
+ nativeVideoDecoderFactory:
+ (nullable cricket::WebRtcVideoDecoderFactory *)videoDecoderFactory {
if (self = [super init]) {
_networkThread = rtc::Thread::CreateWithSocketServer();
BOOL result = _networkThread->Start();
@@ -83,23 +120,16 @@
std::unique_ptr<webrtc::CallFactoryInterface>(),
std::unique_ptr<webrtc::RtcEventLogFactoryInterface>());
#else
- cricket::WebRtcVideoEncoderFactory *platform_encoder_factory = nullptr;
- cricket::WebRtcVideoDecoderFactory *platform_decoder_factory = nullptr;
- if (encoderFactory) {
- platform_encoder_factory = new webrtc::ObjCVideoEncoderFactory(encoderFactory);
- }
- if (decoderFactory) {
- platform_decoder_factory = new webrtc::ObjCVideoDecoderFactory(decoderFactory);
- }
-
// Ownership of encoder/decoder factories is passed on to the
// peerconnectionfactory, that handles deleting them.
_nativeFactory = webrtc::CreatePeerConnectionFactory(_networkThread.get(),
_workerThread.get(),
_signalingThread.get(),
- nullptr,
- platform_encoder_factory,
- platform_decoder_factory);
+ nullptr, // audio device module
+ audioEncoderFactory,
+ audioDecoderFactory,
+ videoEncoderFactory,
+ videoDecoderFactory);
#endif
NSAssert(_nativeFactory, @"Failed to initialize PeerConnectionFactory!");
}
« no previous file with comments | « webrtc/sdk/BUILD.gn ('k') | webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698