From: Jean-Baptiste Mardelle Date: Sun, 14 Nov 2010 23:22:59 +0000 (+0000) Subject: Apply external monitor setting without restarting X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=519b6c56182a412eff7d9b331b26ca76eb907947;p=kdenlive Apply external monitor setting without restarting svn path=/trunk/kdenlive/; revision=5098 --- diff --git a/src/kdenlivesettingsdialog.cpp b/src/kdenlivesettingsdialog.cpp index 86624d55..3581e45e 100644 --- a/src/kdenlivesettingsdialog.cpp +++ b/src/kdenlivesettingsdialog.cpp @@ -505,6 +505,11 @@ void KdenliveSettingsDialog::updateSettings() KdenliveSettings::setRmd_freq(value); } + if (m_configSdl.kcfg_external_display->isChecked() != KdenliveSettings::external_display()) { + KdenliveSettings::setExternal_display(m_configSdl.kcfg_external_display->isChecked()); + resetProfile = true; + } + value = m_configSdl.kcfg_audio_driver->itemData(m_configSdl.kcfg_audio_driver->currentIndex()).toString(); if (value != KdenliveSettings::audiodrivername()) { KdenliveSettings::setAudiodrivername(value); diff --git a/src/renderer.cpp b/src/renderer.cpp index d48e8c94..8df99056 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -100,6 +100,7 @@ Render::Render(const QString & rendererName, int winid, QString profile, QWidget m_mltProducer(NULL), m_mltProfile(NULL), m_framePosition(0), + m_externalConsumer(false), m_isZoneMode(false), m_isLoopMode(false), m_isSplitView(false), @@ -196,16 +197,15 @@ void Render::buildConsumer(const QString profileName) m_mltConsumer = new Mlt::Consumer(*m_mltProfile, tmp); delete[] tmp; if (m_mltConsumer) { + m_externalConsumer = true; m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); m_mltConsumer->set("terminate_on_pause", 0); - m_mltConsumer->set("audio_buffer", 1024); - m_mltConsumer->set("frequency", 48000); mlt_log_set_callback(kdenlive_callback); } if (m_mltConsumer && m_mltConsumer->is_valid()) return; } else KMessageBox::informationList(qApp->activeWindow(), i18n("Your project's profile %1 is not compatible with the blackmagic output card. Please see supported profiles below. Switching to normal video display.", m_mltProfile->description()), BMInterface::supportedModes(KdenliveSettings::blackmagic_output_device())); } - + m_externalConsumer = false; QString videoDriver = KdenliveSettings::videodrivername(); if (!videoDriver.isEmpty()) { if (videoDriver == "x11_noaccel") { @@ -270,15 +270,17 @@ Mlt::Producer *Render::invalidProducer(const QString &id) int Render::resetProfile(const QString profileName) { if (m_mltConsumer) { - if (KdenliveSettings::external_display() && m_activeProfile == profileName) return 1; - QString videoDriver = KdenliveSettings::videodrivername(); - QString currentDriver = m_mltConsumer->get("video_driver"); - if (getenv("SDL_VIDEO_YUV_HWACCEL") != NULL && currentDriver == "x11") currentDriver = "x11_noaccel"; - QString background = KdenliveSettings::window_background().name(); - QString currentBackground = m_mltConsumer->get("window_background"); - if (m_activeProfile == profileName && currentDriver == videoDriver && background == currentBackground) { - kDebug() << "reset to same profile, nothing to do"; - return 1; + if (m_externalConsumer == KdenliveSettings::external_display()) { + if (KdenliveSettings::external_display() && m_activeProfile == profileName) return 1; + QString videoDriver = KdenliveSettings::videodrivername(); + QString currentDriver = m_mltConsumer->get("video_driver"); + if (getenv("SDL_VIDEO_YUV_HWACCEL") != NULL && currentDriver == "x11") currentDriver = "x11_noaccel"; + QString background = KdenliveSettings::window_background().name(); + QString currentBackground = m_mltConsumer->get("window_background"); + if (m_activeProfile == profileName && currentDriver == videoDriver && background == currentBackground) { + kDebug() << "reset to same profile, nothing to do"; + return 1; + } } if (m_isSplitView) slotSplitView(false); diff --git a/src/renderer.h b/src/renderer.h index 3fca05c8..a7e2ff4f 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -271,6 +271,7 @@ private: Mlt::Profile *m_mltProfile; double m_framePosition; double m_fps; + bool m_externalConsumer; /** @brief True if we are playing a zone. *