Allow video play at once in preferences

This commit is contained in:
baydam
2018-08-12 19:23:02 +00:00
parent 1eee051bfb
commit 4e95f3b91b
7 changed files with 71 additions and 38 deletions
+2
View File
@@ -86,6 +86,8 @@ public:
static const bool SHOW_OUTPUT_RESOLUTION = true;
static const QString DEFAULT_LANGUAGE;
static const bool SHOW_OUTPUT_ON_MOUSE_HOVER = true;
static const bool OSC_SAME_MEDIA_SOURCE = false;
static const bool PLAY_IN_LOOP = true;
// Style.
static const QColor WHITE;
+35 -30
View File
@@ -226,6 +226,9 @@ _playState(false),
_uri("")
{
_mutexLocker = new QMutexLocker(&_mutex);
QSettings settings;
_playInLoop = settings.value("playInLoop", MM::PLAY_IN_LOOP).toBool();
}
void VideoImpl::unloadMovie()
@@ -428,7 +431,8 @@ void VideoImpl::update()
if (_eos() || _terminate)
{
_setFinished(true);
resetMovie();
if (_playInLoop) // Check if repeat mode is on
resetMovie();
}
else
{
@@ -596,38 +600,39 @@ void VideoImpl::_checkMessages()
switch (GST_MESSAGE_TYPE (msg))
{
// Error ////////////////////////////////////////////////
case GST_MESSAGE_ERROR:
gst_message_parse_error(msg, &err, &debug_info);
qWarning() << "Error received from element " << GST_OBJECT_NAME (msg->src) << ": " << err->message << endl;
qDebug() << "Debugging information: " << (debug_info ? debug_info : "none") << "." << endl;
g_clear_error(&err);
g_free(debug_info);
// Error ////////////////////////////////////////////////
case GST_MESSAGE_ERROR:
gst_message_parse_error(msg, &err, &debug_info);
qWarning() << "Error received from element " << GST_OBJECT_NAME (msg->src) << ": " << err->message << endl;
qDebug() << "Debugging information: " << (debug_info ? debug_info : "none") << "." << endl;
g_clear_error(&err);
g_free(debug_info);
if (!isLive())
{
_terminate = true;
}
else
{
gst_element_set_state (_pipeline, GST_STATE_PAUSED);
gst_element_set_state (_pipeline, GST_STATE_NULL);
gst_element_set_state (_pipeline, GST_STATE_READY);
}
// _finish();
break;
if (!isLive())
{
_terminate = true;
}
else
{
gst_element_set_state (_pipeline, GST_STATE_PAUSED);
gst_element_set_state (_pipeline, GST_STATE_NULL);
gst_element_set_state (_pipeline, GST_STATE_READY);
}
// _finish();
break;
// End-of-stream ////////////////////////////////////////
case GST_MESSAGE_EOS:
// Automatically loop back.
resetMovie();
// _terminate = true;
// _finish();
break;
// End-of-stream ////////////////////////////////////////
case GST_MESSAGE_EOS:
// Automatically loop back.
if (_playInLoop) // Check if repeat mode is on
resetMovie();
// _terminate = true;
// _finish();
break;
// Pipeline has prerolled/ready to play ///////////////
case GST_MESSAGE_ASYNC_DONE:
if (!_isMovieReady())
// Pipeline has prerolled/ready to play ///////////////
case GST_MESSAGE_ASYNC_DONE:
if (!_isMovieReady())
{
// Check if seeking is allowed.
gint64 start, end;
+3 -1
View File
@@ -113,7 +113,7 @@ public:
bool videoIsConnected() const { return _videoIsConnected; }
void videoConnect() { _videoIsConnected = true; }
bool videoIsSupported() const { return _queue0 != NULL; }
bool audioIsConnected() const { return _audioIsConnected; }
void audioConnect() { _audioIsConnected = true; }
bool audioIsSupported() const { return _audioqueue0 != NULL; }
@@ -274,6 +274,8 @@ private:
QString _uri;
static const int MAX_SAMPLES_IN_BUFFER_QUEUES = 30;
bool _playInLoop;
};
}
+4 -3
View File
@@ -357,6 +357,7 @@ void MainWindow::closeEvent(QCloseEvent *event)
{
// Save settings
writeSettings();
_preferenceDialog->saveSettings();
// Close all top level widgets
for (QWidget *widget: QApplication::topLevelWidgets()) {
if (widget != this) { // Avoid recursion
@@ -3289,7 +3290,7 @@ void MainWindow::connectProjectWidgets()
connect(mappingItemDelegate, SIGNAL(itemRemoved(uid)),
this, SLOT(deleteMapping(uid)));
connect(_preferenceDialog, SIGNAL(settingSaved()), this, SLOT(applySettings()));
connect(_preferenceDialog, SIGNAL(settingSaved()), this, SLOT(updateSettings()));
}
void MainWindow::disconnectProjectWidgets()
@@ -3318,7 +3319,7 @@ void MainWindow::disconnectProjectWidgets()
disconnect(mappingItemDelegate, SIGNAL(itemRemoved(uid)),
this, SLOT(deleteMapping(uid)));
disconnect(_preferenceDialog, SIGNAL(settingSaved()), this, SLOT(applySettings()));
disconnect(_preferenceDialog, SIGNAL(settingSaved()), this, SLOT(updateSettings()));
}
uid MainWindow::getItemId(const QListWidgetItem& item)
@@ -3483,7 +3484,7 @@ void MainWindow::exitFullScreen()
displayTestSignalAction->setChecked(false);
}
void MainWindow::applySettings()
void MainWindow::updateSettings()
{
stickyVerticesAction->setChecked(settings.value("stickyVertices").toBool());
}
+1 -1
View File
@@ -163,7 +163,7 @@ private slots:
QDesktopServices::openUrl(QUrl("https://github.com/mapmapteam/mapmap/issues/new"));
}
void applySettings();
void updateSettings();
public slots:
+20 -2
View File
@@ -121,7 +121,9 @@ bool PreferenceDialog::loadSettings()
_languageBox->setCurrentIndex(_languageBox->findData(settings.value("language", MM::DEFAULT_LANGUAGE)));
// Allow OSC message with same media source
_oscSameMediaSourceBox->setChecked(settings.value("oscSameMediaSource").toBool());
_oscSameMediaSourceBox->setChecked(settings.value("oscSameMediaSource", MM::OSC_SAME_MEDIA_SOURCE).toBool());
// Play in loop
_playInLoopBox->setChecked(settings.value("playInLoop", MM::PLAY_IN_LOOP).toBool());
return true;
}
@@ -154,6 +156,8 @@ void PreferenceDialog::applySettings()
settings.setValue("language", _languageBox->currentData());
// Allow OSC message with same media source
settings.setValue("oscSameMediaSource", _oscSameMediaSourceBox->isChecked());
// Play in loop
settings.setValue("playInLoop", _playInLoopBox->isChecked());
}
void PreferenceDialog::refreshCurrentIP()
@@ -337,7 +341,7 @@ void PreferenceDialog::createControlsPage()
_listenPortNumber->setRange(1024, 65534);
_listenPortNumber->setFixedWidth(120);
_oscSameMediaSourceBox = new QCheckBox("Allow message with existing media source");
_oscSameMediaSourceBox = new QCheckBox(tr("Allow message with existing media source"));
_oscSameMediaSourceBox->setChecked(false);
QFormLayout *listenPortForm = new QFormLayout;
@@ -375,6 +379,20 @@ void PreferenceDialog::createControlsPage()
void PreferenceDialog::createAdvancedPage()
{
_advancedPage = new QTabWidget;
// Playback tab
_playbackWidget = new QWidget;
// Play in loop
_playInLoopBox = new QCheckBox(tr("Play in loop (requires restart)"));
_playInLoopBox->setChecked(true); // Loop by default
QVBoxLayout *playbackLayout = new QVBoxLayout;
playbackLayout->addWidget(_playInLoopBox, 1, Qt::AlignTop);
_playbackWidget->setLayout(playbackLayout);
_advancedPage->addTab(_playbackWidget, tr("Playback"));
}
void PreferenceDialog::createPreferencesList()
+6 -1
View File
@@ -39,6 +39,7 @@ public:
~PreferenceDialog();
void showDialog();
void saveSettings() { applySettings(); }
protected:
void closeEvent(QCloseEvent* event);
@@ -74,7 +75,7 @@ private:
QWidget *_mappingPage;
QWidget *_outputPage;
QTabWidget *_controlsPage;
QWidget *_advancedPage;
QTabWidget *_advancedPage;
// Interface widgets
QComboBox *_languageBox;
@@ -110,6 +111,10 @@ private:
QCheckBox *_oscSameMediaSourceBox;
// Advanced widgets
// Playback
QWidget *_playbackWidget;
QCheckBox *_playInLoopBox;
// Common widgets
QListWidget *_listWidget;