Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Commit 4cf9b3d

Browse files
committed
Fix SDP failure if hardware acceleration is not turned on
1 parent d9165bc commit 4cf9b3d

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

talk/owt/sdk/base/peerconnectiondependencyfactory.cc

+30-19
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
#include "webrtc/api/audio_codecs/builtin_audio_decoder_factory.h"
1111
#include "webrtc/api/audio_codecs/builtin_audio_encoder_factory.h"
1212
#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"
1315
#include "webrtc/media/base/media_channel.h"
1416
#include "webrtc/modules/audio_processing/include/audio_processing.h"
1517
#include "webrtc/rtc_base/bind.h"
@@ -119,21 +121,39 @@ void PeerConnectionDependencyFactory::
119121
encoder_factory = ObjcVideoCodecFactory::CreateObjcVideoEncoderFactory();
120122
decoder_factory = ObjcVideoCodecFactory::CreateObjcVideoDecoderFactory();
121123
#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());
129133
}
134+
130135
if (GlobalConfiguration::GetCustomizedVideoDecoderEnabled()) {
131136
decoder_factory.reset(new CustomizedVideoDecoderFactory(
132137
GlobalConfiguration::GetCustomizedVideoDecoder()));
138+
} else if (render_hardware_acceleration_enabled_) {
139+
decoder_factory.reset(new MSDKVideoDecoderFactory());
140+
} else {
141+
decoder_factory = std::move(webrtc::CreateBuiltinVideoDecoderFactory());
133142
}
134-
// Encoded video frame enabled
143+
144+
#elif defined(WEBRTC_LINUX)
145+
// MSDK support for Linux is not in place. Use default.
135146
if (encoded_frame_) {
136147
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());
137157
}
138158
#else
139159
#error "Unsupported platform."
@@ -154,24 +174,15 @@ void PeerConnectionDependencyFactory::
154174
}
155175
#endif
156176

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)
165177
pc_factory_ = webrtc::CreatePeerConnectionFactory(
166178
network_thread.get(), worker_thread.get(), signaling_thread.get(), adm,
167179
webrtc::CreateBuiltinAudioEncoderFactory(),
168180
webrtc::CreateBuiltinAudioDecoderFactory(), std::move(encoder_factory),
169181
std::move(decoder_factory), nullptr, nullptr);
170-
#else
171-
#error "Unsupported platform."
172-
#endif
182+
173183
RTC_LOG(LS_INFO) << "CreatePeerConnectionOnCurrentThread finished.";
174184
}
185+
175186
scoped_refptr<webrtc::PeerConnectionInterface>
176187
PeerConnectionDependencyFactory::CreatePeerConnectionOnCurrentThread(
177188
const webrtc::PeerConnectionInterface::RTCConfiguration& config,

0 commit comments

Comments
 (0)