10
10
#include " webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
11
11
#include " webrtc/api/audio_codecs/builtin_audio_encoder_factory.h"
12
12
#include " webrtc/api/create_peerconnection_factory.h"
13
+ #include " webrtc/api/video_codecs/builtin_video_decoder_factory.h"
14
+ #include " webrtc/api/video_codecs/builtin_video_encoder_factory.h"
13
15
#include " webrtc/media/base/media_channel.h"
14
16
#include " webrtc/modules/audio_processing/include/audio_processing.h"
15
17
#include " webrtc/rtc_base/bind.h"
@@ -119,21 +121,39 @@ void PeerConnectionDependencyFactory::
119
121
encoder_factory = ObjcVideoCodecFactory::CreateObjcVideoEncoderFactory ();
120
122
decoder_factory = ObjcVideoCodecFactory::CreateObjcVideoDecoderFactory ();
121
123
#elif defined(WEBRTC_WIN)
122
- if (render_hardware_acceleration_enabled_) {
123
- if (!encoded_frame_) {
124
- encoder_factory.reset (new MSDKVideoEncoderFactory ());
125
- }
126
- if (!GlobalConfiguration::GetCustomizedVideoDecoderEnabled ()) {
127
- decoder_factory.reset (new MSDKVideoDecoderFactory ());
128
- }
124
+ // Configure codec factories. MSDK factory will internally use built-in codecs
125
+ // if hardware acceleration is not in place. For H.265/H.264, if hardware acceleration
126
+ // is turned off at application level, negotiation will fail.
127
+ if (encoded_frame_) {
128
+ encoder_factory.reset (new EncodedVideoEncoderFactory ());
129
+ } else if (render_hardware_acceleration_enabled_) {
130
+ encoder_factory.reset (new MSDKVideoEncoderFactory ());
131
+ } else {
132
+ encoder_factory = std::move (webrtc::CreateBuiltinVideoEncoderFactory ());
129
133
}
134
+
130
135
if (GlobalConfiguration::GetCustomizedVideoDecoderEnabled ()) {
131
136
decoder_factory.reset (new CustomizedVideoDecoderFactory (
132
137
GlobalConfiguration::GetCustomizedVideoDecoder ()));
138
+ } else if (render_hardware_acceleration_enabled_) {
139
+ decoder_factory.reset (new MSDKVideoDecoderFactory ());
140
+ } else {
141
+ decoder_factory = std::move (webrtc::CreateBuiltinVideoDecoderFactory ());
133
142
}
134
- // Encoded video frame enabled
143
+
144
+ #elif defined(WEBRTC_LINUX)
145
+ // MSDK support for Linux is not in place. Use default.
135
146
if (encoded_frame_) {
136
147
encoder_factory.reset (new EncodedVideoEncoderFactory ());
148
+ } else {
149
+ encoder_factory = std::move (webrtc::CreateBuiltinVideoEncoderFactory ());
150
+ }
151
+
152
+ if (GlobalConfiguration::GetCustomizedVideoDecoderEnabled ()) {
153
+ decoder_factory.reset (new CustomizedVideoDecoderFactory (
154
+ GlobalConfiguration::GetCustomizedVideoDecoder ()));
155
+ } else {
156
+ decoder_factory = std::move (webrtc::CreateBuiltinVideoDecoderFactory ());
137
157
}
138
158
#else
139
159
#error "Unsupported platform."
@@ -154,24 +174,15 @@ void PeerConnectionDependencyFactory::
154
174
}
155
175
#endif
156
176
157
- #if defined(WEBRTC_IOS)
158
- pc_factory_ = webrtc::CreatePeerConnectionFactory (
159
- network_thread.get (), worker_thread.get (), signaling_thread.get (), adm,
160
- webrtc::CreateBuiltinAudioEncoderFactory (),
161
- webrtc::CreateBuiltinAudioDecoderFactory (), std::move (encoder_factory),
162
- std::move (decoder_factory), nullptr ,
163
- nullptr ); // Decoder factory
164
- #elif defined(WEBRTC_WIN) || defined(WEBRTC_LINUX)
165
177
pc_factory_ = webrtc::CreatePeerConnectionFactory (
166
178
network_thread.get (), worker_thread.get (), signaling_thread.get (), adm,
167
179
webrtc::CreateBuiltinAudioEncoderFactory (),
168
180
webrtc::CreateBuiltinAudioDecoderFactory (), std::move (encoder_factory),
169
181
std::move (decoder_factory), nullptr , nullptr );
170
- #else
171
- #error "Unsupported platform."
172
- #endif
182
+
173
183
RTC_LOG (LS_INFO) << " CreatePeerConnectionOnCurrentThread finished." ;
174
184
}
185
+
175
186
scoped_refptr<webrtc::PeerConnectionInterface>
176
187
PeerConnectionDependencyFactory::CreatePeerConnectionOnCurrentThread (
177
188
const webrtc::PeerConnectionInterface::RTCConfiguration& config,
0 commit comments