diff --git a/toonz/sources/include/toonz/preferences.h b/toonz/sources/include/toonz/preferences.h index 1fae2761..ab4e48af 100644 --- a/toonz/sources/include/toonz/preferences.h +++ b/toonz/sources/include/toonz/preferences.h @@ -283,6 +283,7 @@ public: int getFfmpegTimeout() { return getIntValue(ffmpegTimeout); } QString getFastRenderPath() const { return getStringValue(fastRenderPath); } QString getRhubarbPath() const { return getStringValue(rhubarbPath); } + int getRhubarbTimeout() { return getIntValue(rhubarbTimeout); } // Drawing tab QString getScanLevelType() const { return getStringValue(scanLevelType); } diff --git a/toonz/sources/include/toonz/preferencesitemids.h b/toonz/sources/include/toonz/preferencesitemids.h index f8fe3229..1b82e34a 100644 --- a/toonz/sources/include/toonz/preferencesitemids.h +++ b/toonz/sources/include/toonz/preferencesitemids.h @@ -75,6 +75,7 @@ enum PreferencesItemId { ffmpegTimeout, fastRenderPath, rhubarbPath, + rhubarbTimeout, //---------- // Drawing diff --git a/toonz/sources/toonz/lipsyncpopup.cpp b/toonz/sources/toonz/lipsyncpopup.cpp index 7a8d7d10..a1503b79 100644 --- a/toonz/sources/toonz/lipsyncpopup.cpp +++ b/toonz/sources/toonz/lipsyncpopup.cpp @@ -834,7 +834,9 @@ void LipSyncPopup::onApplyButton() { return; } runRhubarb(); - m_rhubarb->waitForFinished(); + int rhubarbTimeout = Preferences::instance()->getRhubarbTimeout(); + if (rhubarbTimeout > 0) rhubarbTimeout * 1000; + m_rhubarb->waitForFinished(rhubarbTimeout); m_progressDialog->hide(); QString results = m_rhubarb->readAllStandardError(); results += m_rhubarb->readAllStandardOutput(); diff --git a/toonz/sources/toonz/preferencespopup.cpp b/toonz/sources/toonz/preferencespopup.cpp index db482e43..44897f30 100644 --- a/toonz/sources/toonz/preferencespopup.cpp +++ b/toonz/sources/toonz/preferencespopup.cpp @@ -1046,6 +1046,7 @@ QString PreferencesPopup::getUIString(PreferencesItemId id) { {ffmpegTimeout, tr("Process Timeout:")}, {fastRenderPath, tr("Fast Render Output Directory:")}, {rhubarbPath, tr("Executable Directory:")}, + {rhubarbTimeout, tr("Analyze Audio Timeout (sec; -1 = no timeout):") }, // Drawing {scanLevelType, tr("Scan File Format:")}, @@ -1641,7 +1642,10 @@ QWidget* PreferencesPopup::createImportExportPage() { } QGridLayout* rhubarbOptionsLay = insertGroupBox(tr("Rhubarb Lip Sync"), lay); - { insertUI(rhubarbPath, rhubarbOptionsLay); } + { + insertUI(rhubarbPath, rhubarbOptionsLay); + insertUI(rhubarbTimeout, rhubarbOptionsLay); + } lay->setRowStretch(lay->rowCount(), 1); insertFootNote(lay); diff --git a/toonz/sources/toonzlib/preferences.cpp b/toonz/sources/toonzlib/preferences.cpp index 293be7a1..79d66b62 100644 --- a/toonz/sources/toonzlib/preferences.cpp +++ b/toonz/sources/toonzlib/preferences.cpp @@ -450,6 +450,8 @@ void Preferences::definePreferenceItems() { std::numeric_limits::max()); define(fastRenderPath, "fastRenderPath", QMetaType::QString, "desktop"); define(rhubarbPath, "rhubarbPath", QMetaType::QString, ""); + define(rhubarbTimeout, "rhubarbTimeout", QMetaType::Int, -1, -1, + std::numeric_limits::max()); // Drawing define(scanLevelType, "scanLevelType", QMetaType::QString, "tif");