From 23857c00703cc3aabf1a3fbb29ac63228697b08a Mon Sep 17 00:00:00 2001 From: Dan Dennedy Date: Tue, 22 Mar 2011 05:28:50 +0000 Subject: [PATCH] Fix segfault choosing Blackmagic playback card for the first time. svn path=/trunk/kdenlive/; revision=5511 --- src/blackmagic/devices.cpp | 5 +---- src/kdenlivesettings.kcfg | 2 +- src/renderer.cpp | 35 +++++++++++++++++++---------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/blackmagic/devices.cpp b/src/blackmagic/devices.cpp index 8c139b71..fddb4ae9 100644 --- a/src/blackmagic/devices.cpp +++ b/src/blackmagic/devices.cpp @@ -163,9 +163,6 @@ bool BMInterface::getBlackMagicOutputDeviceList(KComboBox *devicelist) while(deckLinkIterator->Next(&deckLink) == S_OK) { char * deviceNameString = NULL; - // Increment the total number of DeckLink cards found - numDevices++; - //if (numDevices > 1) kDebug() << "// FOUND a BM device\n\n+++++++++++++++++++++++++++++++++++++"; // *** Print the model name of the DeckLink card @@ -221,7 +218,7 @@ bool BMInterface::getBlackMagicOutputDeviceList(KComboBox *devicelist) // Release the IDeckLinkDisplayMode object to prevent a leak displayMode->Release(); }*/ - devicelist->addItem(deviceName); + devicelist->addItem(deviceName, numDevices++); found = true; } diff --git a/src/kdenlivesettings.kcfg b/src/kdenlivesettings.kcfg index 8e0dc584..c03c47c4 100644 --- a/src/kdenlivesettings.kcfg +++ b/src/kdenlivesettings.kcfg @@ -216,7 +216,7 @@ false - + 0 diff --git a/src/renderer.cpp b/src/renderer.cpp index 054aa0c6..c70abc4e 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -198,22 +198,25 @@ void Render::buildConsumer(const QString profileName) if (KdenliveSettings::external_display() && m_name != "clip") { // Use blackmagic card for video output QMap< QString, QString > profileProperties = ProfilesDialog::getSettingsFromFile(profileName); - if (BMInterface::isSupportedProfile(KdenliveSettings::blackmagic_output_device(), profileProperties)) { - QString decklink = "decklink:" + QString::number(KdenliveSettings::blackmagic_output_device()); - tmp = qstrdup(decklink.toUtf8().constData()); - m_mltConsumer = new Mlt::Consumer(*m_mltProfile, tmp); - delete[] tmp; - if (m_mltConsumer->is_valid()) { - 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("buffer", 12); - m_mltConsumer->set("deinterlace_method", "onefield"); - m_mltConsumer->set("real_time", KdenliveSettings::mltthreads()); - 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())); + int device = KdenliveSettings::blackmagic_output_device(); + if (device >= 0) { + if (BMInterface::isSupportedProfile(device, profileProperties)) { + QString decklink = "decklink:" + QString::number(KdenliveSettings::blackmagic_output_device()); + tmp = qstrdup(decklink.toUtf8().constData()); + m_mltConsumer = new Mlt::Consumer(*m_mltProfile, tmp); + delete[] tmp; + if (m_mltConsumer->is_valid()) { + 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("buffer", 12); + m_mltConsumer->set("deinterlace_method", "onefield"); + m_mltConsumer->set("real_time", KdenliveSettings::mltthreads()); + 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(); -- 2.39.2