Fix crash on exit
This commit is contained in:
parent
d9ca5309ac
commit
b1300aff46
7 changed files with 30 additions and 38 deletions
|
|
@ -9,6 +9,7 @@
|
|||
#include <string_view>
|
||||
#include <utility>
|
||||
|
||||
#include "ChatPage.h"
|
||||
#include "Logging.h"
|
||||
#include "UserSettingsPage.h"
|
||||
#include "WebRTCSession.h"
|
||||
|
|
@ -847,7 +848,7 @@ WebRTCSession::startPipeline(int opusPayloadType, int vp8PayloadType)
|
|||
|
||||
webrtc_ = gst_bin_get_by_name(GST_BIN(pipe_), "webrtcbin");
|
||||
|
||||
if (settings_->useStunServer()) {
|
||||
if (ChatPage::instance()->userSettings()->useStunServer()) {
|
||||
nhlog::ui()->info("WebRTC: setting STUN server: {}", STUN_SERVER);
|
||||
g_object_set(webrtc_, "stun-server", STUN_SERVER, nullptr);
|
||||
}
|
||||
|
|
@ -902,15 +903,17 @@ WebRTCSession::startPipeline(int opusPayloadType, int vp8PayloadType)
|
|||
bool
|
||||
WebRTCSession::createPipeline(int opusPayloadType, int vp8PayloadType)
|
||||
{
|
||||
auto it = std::find_if(audioSources_.cbegin(), audioSources_.cend(), [this](const auto &s) {
|
||||
return s.name == settings_->microphone().toStdString();
|
||||
});
|
||||
std::string microphoneSetting =
|
||||
ChatPage::instance()->userSettings()->microphone().toStdString();
|
||||
auto it =
|
||||
std::find_if(audioSources_.cbegin(),
|
||||
audioSources_.cend(),
|
||||
[µphoneSetting](const auto &s) { return s.name == microphoneSetting; });
|
||||
if (it == audioSources_.cend()) {
|
||||
nhlog::ui()->error("WebRTC: unknown microphone: {}",
|
||||
settings_->microphone().toStdString());
|
||||
nhlog::ui()->error("WebRTC: unknown microphone: {}", microphoneSetting);
|
||||
return false;
|
||||
}
|
||||
nhlog::ui()->debug("WebRTC: microphone: {}", it->name);
|
||||
nhlog::ui()->debug("WebRTC: microphone: {}", microphoneSetting);
|
||||
|
||||
GstElement *source = gst_device_create_element(it->device, nullptr);
|
||||
GstElement *volume = gst_element_factory_make("volume", "srclevel");
|
||||
|
|
@ -977,21 +980,24 @@ WebRTCSession::addVideoPipeline(int vp8PayloadType)
|
|||
if (videoSources_.empty())
|
||||
return !isOffering_;
|
||||
|
||||
auto it = std::find_if(videoSources_.cbegin(), videoSources_.cend(), [this](const auto &s) {
|
||||
return s.name == settings_->camera().toStdString();
|
||||
});
|
||||
std::string cameraSetting = ChatPage::instance()->userSettings()->camera().toStdString();
|
||||
auto it = std::find_if(videoSources_.cbegin(),
|
||||
videoSources_.cend(),
|
||||
[&cameraSetting](const auto &s) { return s.name == cameraSetting; });
|
||||
if (it == videoSources_.cend()) {
|
||||
nhlog::ui()->error("WebRTC: unknown camera: {}", settings_->camera().toStdString());
|
||||
nhlog::ui()->error("WebRTC: unknown camera: {}", cameraSetting);
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string resSetting = settings_->cameraResolution().toStdString();
|
||||
std::string resSetting =
|
||||
ChatPage::instance()->userSettings()->cameraResolution().toStdString();
|
||||
const std::string &res = resSetting.empty() ? it->caps.front().resolution : resSetting;
|
||||
std::string frSetting = settings_->cameraFrameRate().toStdString();
|
||||
std::string frSetting =
|
||||
ChatPage::instance()->userSettings()->cameraFrameRate().toStdString();
|
||||
const std::string &fr = frSetting.empty() ? it->caps.front().frameRates.front() : frSetting;
|
||||
auto resolution = tokenise(res, 'x');
|
||||
auto frameRate = tokenise(fr, '/');
|
||||
nhlog::ui()->debug("WebRTC: camera: {}", it->name);
|
||||
nhlog::ui()->debug("WebRTC: camera: {}", cameraSetting);
|
||||
nhlog::ui()->debug("WebRTC: camera resolution: {}x{}", resolution.first, resolution.second);
|
||||
nhlog::ui()->debug("WebRTC: camera frame rate: {}/{}", frameRate.first, frameRate.second);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue