Compare commits

...

12 Commits

Author SHA1 Message Date
Heiko Becker
8414e83fe7 GIT_SILENT Update Appstream for new release 2021-07-05 21:09:47 +02:00
Heiko Becker
a735af832e GIT_SILENT Upgrade release service version to 21.04.3. 2021-07-05 20:54:41 +02:00
Jean-Baptiste Mardelle
3f1c428b0d Fix crash closing project with a mix on a clip with keyframable effect.
Related to #1126
2021-07-04 21:24:32 +02:00
Jean-Baptiste Mardelle
10ef3b9d6c Fix speech to text after recent VOSK api change
Fixes #438306
2021-07-04 07:41:49 +02:00
Jean-Baptiste Mardelle
dc00699237 Cleanup font setting for qml timeline 2021-06-25 14:38:06 +02:00
Alexander Robb
3195a83785 Add webp mime type to clip creation dialog 2021-06-25 14:37:15 +02:00
Jean-Baptiste Mardelle
be5f24f72a Fix startup crash on Wayland, thanks to login.kde@unrelenting.technology
BUG: 431505
2021-06-25 14:37:01 +02:00
Jean-Baptiste Mardelle
f32acaf7b6 Mix: Fix first clip out not correctly reset on second clip deletion 2021-06-11 10:30:30 +02:00
Jean-Baptiste Mardelle
8ab92f3906 Fix crash on exit when a mix is selected 2021-06-11 10:23:56 +02:00
Ryan Holtz
f24a21e92a Resolved Bug 436895 - "Rotoscoping not working right"
When building the QVariantMap for serialization into a QJsonDocument within KeyframeMdel::getRotoProperty, an incorrect padding width was being calculated for the QString keys. As a QVariantMap uses string ordering for its values, this resulted in Roto_spline keyframe data appearing out-of-order in saved data, as well as when being handed to MLT for previewing.

As adding 1 to the incoming value of log10() is ostensibly a no-op, and log10() returns 1 less than the number of digits in positive integers, the original author's intent was probably to add 1 to the result rather than the input. This results in all of the resulting JSON objects' names being padded equally, eliminating the ordering-related munging.

Additionally, any user previously affected by this needs only to re-save the relevant .kdenlive project file, and proper ordering will be restored.
2021-06-11 08:58:02 +02:00
Jean-Baptiste Mardelle
e2da06720b Remove duplicate line from last cherry-pick 2021-06-08 08:04:51 +02:00
Jean-Baptiste Mardelle
fcd82a3fde Hopefully proper patch to solve "white" rendering issues 2021-06-08 08:03:19 +02:00
15 changed files with 35 additions and 21 deletions

View File

@@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 3.0)
# KDE Application Version, managed by release script
set (RELEASE_SERVICE_VERSION_MAJOR "21")
set (RELEASE_SERVICE_VERSION_MINOR "04")
set (RELEASE_SERVICE_VERSION_MICRO "2")
set (RELEASE_SERVICE_VERSION_MICRO "3")
set(KDENLIVE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")

View File

@@ -267,10 +267,10 @@
</ul>
</description>
<releases>
<release version="21.04.3" date="2021-07-08"/>
<release version="21.04.2" date="2021-06-10"/>
<release version="21.04.1" date="2021-05-13"/>
<release version="21.04.0" date="2021-04-22"/>
<release version="20.12.3" date="2021-03-04"/>
</releases>
<url type="homepage">https://kdenlive.org/</url>
<url type="bugtracker">https://bugs.kde.org</url>

0
data/scripts/checkvosk.py Normal file → Executable file
View File

View File

@@ -23,6 +23,7 @@ if not os.path.exists(sys.argv[2]):
sample_rate=16000
model = Model(sys.argv[2])
rec = KaldiRecognizer(model, sample_rate)
rec.SetWords(True)
process = subprocess.Popen(['ffmpeg', '-loglevel', 'quiet', '-i',
sys.argv[3],

View File

@@ -22,6 +22,7 @@ if not os.path.exists(sys.argv[2]):
sample_rate=16000
model = Model(sys.argv[2])
rec = KaldiRecognizer(model, sample_rate)
rec.SetWords(True)
# zone rendering
if len(sys.argv) > 4 and (float(sys.argv[4])>0 or float(sys.argv[5])>0):

View File

@@ -134,6 +134,7 @@ int main(int argc, char **argv)
// older MLT version, does not support embedded consumer in/out in xml, and current
// MLT (6.16) does not pass it onto the multi / movit consumer, so read it manually and enforce
LocaleHandling::resetAllLocale();
QFile f(playlist);
QDomDocument doc;
doc.setContent(&f, false);
@@ -146,7 +147,6 @@ int main(int argc, char **argv)
playlist.append(QStringLiteral("?multi=1"));
}
}
LocaleHandling::resetAllLocale();
auto *rJob = new RenderJob(render, playlist, target, pid, in, out, qApp);
rJob->start();
QObject::connect(rJob, &RenderJob::renderingFinished, rJob, [&, rJob]() {

View File

@@ -737,7 +737,7 @@ QString KeyframeModel::getRotoProperty() const
int out = in + ptr->data(m_index, AssetParameterModel::ParentDurationRole).toInt();
QVariantMap map;
for (const auto &keyframe : m_keyframeList) {
map.insert(QString::number(keyframe.first.frames(pCore->getCurrentFps())).rightJustified(int(log10(double(out + 1))), '0'), keyframe.second.second);
map.insert(QString::number(keyframe.first.frames(pCore->getCurrentFps())).rightJustified(int(log10(double(out))) + 1, '0'), keyframe.second.second);
}
doc = QJsonDocument::fromVariant(map);
}

View File

@@ -81,7 +81,7 @@ QStringList ClipCreationDialog::getExtensions()
mimeTypes << QStringLiteral("image/gif") << QStringLiteral("image/jpeg") << QStringLiteral("image/png") << QStringLiteral("image/x-tga")
<< QStringLiteral("image/x-bmp") << QStringLiteral("image/svg+xml") << QStringLiteral("image/tiff") << QStringLiteral("image/x-xcf")
<< QStringLiteral("image/x-xcf-gimp") << QStringLiteral("image/x-vnd.adobe.photoshop") << QStringLiteral("image/x-pcx")
<< QStringLiteral("image/x-exr") << QStringLiteral("image/x-portable-pixmap") << QStringLiteral("application/x-krita");
<< QStringLiteral("image/x-exr") << QStringLiteral("image/x-portable-pixmap") << QStringLiteral("application/x-krita") << QStringLiteral("image/webp");
QMimeDatabase db;
QStringList allExtensions;

View File

@@ -1887,8 +1887,10 @@ void KdenliveSettingsDialog::checkVoskDependencies()
{
#ifdef Q_OS_WIN
QString pyExec = QStandardPaths::findExecutable(QStringLiteral("python"));
QString pip3Exec = QStandardPaths::findExecutable(QStringLiteral("pip"));
#else
QString pyExec = QStandardPaths::findExecutable(QStringLiteral("python3"));
QString pip3Exec = QStandardPaths::findExecutable(QStringLiteral("pip3"));
#endif
if (pyExec.isEmpty()) {
doShowSpeechMessage(i18n("Cannot find python3, please install it on your system."), KMessageWidget::Warning);
@@ -1925,7 +1927,7 @@ void KdenliveSettingsDialog::checkVoskDependencies()
} else {
if (m_speechListWidget->count() == 0) {
doShowSpeechMessage(i18n("Please add a speech model."), KMessageWidget::Information);
} else {
} else if (!pip3Exec.isEmpty()) {
if (!m_voskUpdated) {
// only allow upgrading python modules once
m_voskAction->setText(i18n("Check for update"));
@@ -1939,7 +1941,7 @@ void KdenliveSettingsDialog::checkVoskDependencies()
} else {
if (m_speechListWidget->count() == 0) {
doShowSpeechMessage(i18n("Please add a speech model."), KMessageWidget::Information);
} else {
} else if (!pip3Exec.isEmpty()) {
if (!m_voskUpdated) {
// only allow upgrading python modules once
m_voskAction->setText(i18n("Check for update"));

View File

@@ -50,11 +50,11 @@ void LocaleHandling::resetLocale()
void LocaleHandling::resetAllLocale()
{
#ifdef Q_OS_FREEBSD
setlocale(LC_ALL, "C");
setlocale(LC_ALL, "C.UTF-8");
#else
std::setlocale(LC_ALL, "C");
std::setlocale(LC_ALL, "C.UTF-8");
#endif
::qputenv("LC_ALL", "C");
::qputenv("LC_ALL", "C.UTF-8");
}
QPair<QLocale, LocaleHandling::MatchType> LocaleHandling::getQLocaleForDecimalPoint(const QString &requestedLocale, const QString &decimalPoint)

View File

@@ -121,7 +121,10 @@ GLWidget::GLWidget(int id, QObject *parent)
setPersistentSceneGraph(true);
setClearBeforeRendering(false);
setResizeMode(QQuickView::SizeRootObjectToView);
m_offscreenSurface.setFormat(QOpenGLContext::globalShareContext()->format());
auto fmt = QOpenGLContext::globalShareContext()->format();
fmt.setDepthBufferSize(format().depthBufferSize());
fmt.setStencilBufferSize(format().stencilBufferSize());
m_offscreenSurface.setFormat(fmt);
m_offscreenSurface.create();
m_refreshTimer.setSingleShot(true);

View File

@@ -210,11 +210,13 @@ bool ClipModel::requestResize(int size, bool right, Fun &undo, Fun &redo, bool l
outPoint = out - in;
inPoint = 0;
}
bool closing = false;
if (m_currentTrackId != -1) {
if (auto ptr = m_parent.lock()) {
if (ptr->getTrackById(m_currentTrackId)->isLocked()) {
return false;
}
closing = ptr->m_closing;
if (right && ptr->getTrackById_const(m_currentTrackId)->isLastClip(getPosition())) {
trackDuration = ptr->getTrackById_const(m_currentTrackId)->trackDuration();
}
@@ -316,7 +318,9 @@ bool ClipModel::requestResize(int size, bool right, Fun &undo, Fun &redo, bool l
qDebug() << "----------\n-----------\n// ADJUSTING EFFECT LENGTH, LOGUNDO " << logUndo << ", " << old_in << "/" << inPoint << ", "
<< m_producer->get_playtime();
adjustEffectLength(right, old_in, inPoint, old_out - old_in, m_producer->get_playtime(), offset, reverse, operation, logUndo);
if (!closing) {
adjustEffectLength(right, old_in, inPoint, old_out - old_in, m_producer->get_playtime(), offset, reverse, operation, logUndo);
}
UPDATE_UNDO_REDO(operation, reverse, undo, redo);
return true;
}

View File

@@ -1841,7 +1841,13 @@ bool TimelineModel::requestClipDeletion(int clipId, Fun &undo, Fun &redo)
res = getTrackById(trackId)->requestRemoveMix({clipId, mixData.secondClipId}, undo, redo);
}
}
res = res && getTrackById(trackId)->requestClipDeletion(clipId, true, true, undo, redo, false, true);
if (getTrackById_const(trackId)->hasStartMix(clipId)) {
MixInfo mixData = getTrackById_const(trackId)->getMixInfo(clipId).first;
if (isClip(mixData.firstClipId)) {
res = getTrackById(trackId)->requestRemoveMix({mixData.firstClipId, clipId}, undo, redo);
}
}
res = res && getTrackById(trackId)->requestClipDeletion(clipId, true, !m_closing, undo, redo, false, true);
if (!res) {
undo();
return false;

View File

@@ -98,6 +98,8 @@ void TimelineController::prepareClose()
disconnect(m_model.get(), &TimelineModel::selectionChanged, this, &TimelineController::selectionChanged);
disconnect(this, &TimelineController::videoTargetChanged, this, &TimelineController::updateVideoTarget);
disconnect(this, &TimelineController::audioTargetChanged, this, &TimelineController::updateAudioTarget);
disconnect(m_model.get(), &TimelineModel::selectedMixChanged, this, &TimelineController::showMixModel);
disconnect(m_model.get(), &TimelineModel::selectedMixChanged, this, &TimelineController::selectedMixChanged);
m_ready = false;
m_root = nullptr;
// Delete timeline preview before resetting model so that removing clips from timeline doesn't invalidate
@@ -133,10 +135,8 @@ void TimelineController::setModel(std::shared_ptr<TimelineItemModel> model)
connect(m_model.get(), &TimelineModel::invalidateZone, this, &TimelineController::invalidateZone, Qt::DirectConnection);
connect(m_model.get(), &TimelineModel::durationUpdated, this, &TimelineController::checkDuration);
connect(m_model.get(), &TimelineModel::selectionChanged, this, &TimelineController::selectionChanged);
connect(m_model.get(), &TimelineModel::selectedMixChanged, [this] (int cid, const std::shared_ptr<AssetParameterModel> &asset) {
emit showMixModel(cid, asset);
emit selectedMixChanged();
});
connect(m_model.get(), &TimelineModel::selectedMixChanged, this, &TimelineController::showMixModel);
connect(m_model.get(), &TimelineModel::selectedMixChanged, this, &TimelineController::selectedMixChanged);
connect(m_model.get(), &TimelineModel::checkTrackDeletion, this, &TimelineController::checkTrackDeletion, Qt::DirectConnection);
}

View File

@@ -179,10 +179,7 @@ void TimelineWidget::setModel(const std::shared_ptr<TimelineItemModel> &model, M
rootContext()->setContextProperty("audiorec", pCore->getAudioDevice());
rootContext()->setContextProperty("guidesModel", pCore->projectManager()->current()->getGuideModel().get());
rootContext()->setContextProperty("clipboard", new ClipboardProxy(this));
QFont ft = QFontDatabase::systemFont(QFontDatabase::GeneralFont);
ft.setPointSize(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont).pointSize());
setFont(ft);
rootContext()->setContextProperty("miniFont", font());
rootContext()->setContextProperty("miniFont", QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont));
rootContext()->setContextProperty("subtitleModel", pCore->getSubtitleModel().get());
const QStringList effs = sortedItems(KdenliveSettings::favorite_effects(), false).values();
const QStringList trans = sortedItems(KdenliveSettings::favorite_transitions(), true).values();