Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ add_executable(shotcut WIN32 MACOSX_BUNDLE
models/alignclipsmodel.cpp models/alignclipsmodel.h
models/attachedfiltersmodel.cpp models/attachedfiltersmodel.h
models/audiolevelstask.cpp models/audiolevelstask.h
models/keyframestask.cpp models/keyframestask.h
models/extensionmodel.cpp models/extensionmodel.h
models/keyframesmodel.cpp models/keyframesmodel.h
models/markersmodel.cpp models/markersmodel.h
Expand Down
11 changes: 11 additions & 0 deletions src/docks/timelinedock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1685,7 +1685,17 @@ void TimelineDock::setPosition(int position)
emit seeked(position);
} else {
m_position = m_model.tractor()->get_length();
m_requestedPosition = m_position;
emit positionChanged(m_position);
emit requestedPositionChanged(m_requestedPosition);
}
}

void TimelineDock::setRequestedPosition(int position)
{
if (MLT.isMultitrack() && m_requestedPosition != position && m_model.tractor()) {
m_requestedPosition = qMin(position, m_model.tractor()->get_length());
emit requestedPositionChanged(m_requestedPosition);
}
}

Expand Down Expand Up @@ -3929,6 +3939,7 @@ void TimelineDock::onMultitrackClosed()
{
stopRecording();
m_position = -1;
m_requestedPosition = -1;
m_ignoreNextPositionChange = false;
m_trimDelta = 0;
m_transitionDelta = 0;
Expand Down
5 changes: 5 additions & 0 deletions src/docks/timelinedock.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class TimelineDock : public QDockWidget
{
Q_OBJECT
Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged)
Q_PROPERTY(int requestedPosition READ requestedPosition NOTIFY requestedPositionChanged)
Q_PROPERTY(int currentTrack READ currentTrack WRITE setCurrentTrack NOTIFY currentTrackChanged)
Q_PROPERTY(
QVariantList selection READ selectionForJS WRITE setSelectionFromJS NOTIFY selectionChanged)
Expand All @@ -60,7 +61,9 @@ class TimelineDock : public QDockWidget
SubtitlesModel *subtitlesModel() { return &m_subtitlesModel; }
SubtitlesSelectionModel *subtitlesSelectionModel() { return &m_subtitlesSelectionModel; }
int position() const { return m_position; }
int requestedPosition() const { return m_requestedPosition; }
void setPosition(int position);
void setRequestedPosition(int position);
Mlt::Producer producerForClip(int trackIndex, int clipIndex);
int clipIndexAtPlayhead(int trackIndex = -1);
int clipIndexAtPosition(int trackIndex, int position);
Expand Down Expand Up @@ -102,6 +105,7 @@ class TimelineDock : public QDockWidget
void selectionChanged();
void seeked(int position);
void positionChanged(int position);
void requestedPositionChanged(int position);
void loopChanged();
void clipOpened(Mlt::Producer *producer);
void dragging(const QPointF &pos, int duration);
Expand Down Expand Up @@ -242,6 +246,7 @@ public slots:
SubtitlesModel m_subtitlesModel;
SubtitlesSelectionModel m_subtitlesSelectionModel;
int m_position{-1};
int m_requestedPosition{-1};
std::unique_ptr<Timeline::UpdateCommand> m_updateCommand;
bool m_ignoreNextPositionChange{false};
struct Selection
Expand Down
7 changes: 7 additions & 0 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
#include "jobs/screencapturejob.h"
#include "models/audiolevelstask.h"
#include "models/keyframesmodel.h"
#include "models/keyframestask.h"
#include "models/motiontrackermodel.h"
#include "openotherdialog.h"
#include "player.h"
Expand Down Expand Up @@ -526,6 +527,10 @@ void MainWindow::setupAndConnectDocks()
SLOT(onTimelineDockTriggered(bool)));
connect(ui->actionTimeline, SIGNAL(triggered()), SLOT(onTimelineDockTriggered()));
connect(m_player, SIGNAL(seeked(int)), m_timelineDock, SLOT(onSeeked(int)));
connect(m_player,
&Player::positionRequested,
m_timelineDock,
&TimelineDock::setRequestedPosition);
connect(m_timelineDock, SIGNAL(seeked(int)), SLOT(seekTimeline(int)));
connect(m_timelineDock, SIGNAL(clipClicked()), SLOT(onTimelineClipSelected()));
connect(m_timelineDock,
Expand Down Expand Up @@ -3318,6 +3323,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
}
QThreadPool::globalInstance()->clear();
AudioLevelsTask::closeAll();
KeyframesTask::closeAll();
event->accept();
emit aboutToShutDown();
if (m_exitCode == EXIT_SUCCESS) {
Expand Down Expand Up @@ -3418,6 +3424,7 @@ void MainWindow::onProducerOpened(bool withReopen)
m_player->enableTab(Player::SourceTabIndex);
m_player->switchToTab(MLT.isClosedClip() ? Player::ProjectTabIndex : Player::SourceTabIndex);
Util::getHash(*MLT.producer());
KeyframesTask::start(*MLT.producer());
}
ui->actionSave->setEnabled(true);
QMutexLocker locker(&m_autosaveMutex);
Expand Down
11 changes: 9 additions & 2 deletions src/mltcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ bool Controller::openXML(const QString &filename)

void Controller::close()
{
m_lastSeekedPosition = -1;
if (m_profile.is_explicit()) {
pause();
} else if (m_consumer && !m_consumer->is_stopped()) {
Expand All @@ -214,6 +215,7 @@ void Controller::closeConsumer()

void Controller::play(double speed)
{
m_lastSeekedPosition = -1;
if (m_jackFilter) {
if (speed == 1.0)
m_jackFilter->fire_event("jack-start");
Expand Down Expand Up @@ -443,11 +445,16 @@ void Controller::seek(int position)
if (m_consumer->is_stopped()) {
m_consumer->start();
} else {
m_consumer->purge();
Controller::refreshConsumer(Settings.playerScrubAudio());
bool scrubAudio = false;
if (position != m_lastSeekedPosition) {
m_consumer->purge();
scrubAudio = Settings.playerScrubAudio();
}
Controller::refreshConsumer(scrubAudio);
}
}
}
m_lastSeekedPosition = position;
if (m_jackFilter) {
if (Settings.playerPauseAfterSeek())
stopJack();
Expand Down
1 change: 1 addition & 0 deletions src/mltcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ class Controller
QString m_projectFolder;
QMutex m_saveXmlMutex;
bool m_blockRefresh;
int m_lastSeekedPosition{-1};

static void on_jack_started(mlt_properties owner, void *object, mlt_event_data data);
void onJackStarted(int position);
Expand Down
Loading