From ada03e1a8d811d14fd9bf2344a4fb5e961bfa46c Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Thu, 10 Nov 2016 22:12:50 -0800 Subject: [PATCH] Allow specifying additional VLC cmdnline args in advanced settings --- src/libtomahawk/TomahawkSettings.cpp | 12 ++++++++ src/libtomahawk/TomahawkSettings.h | 4 +++ src/libtomahawk/audio/AudioOutput.cpp | 24 ++++++++++++++-- src/tomahawk/dialogs/SettingsDialog.cpp | 5 ++++ src/tomahawk/dialogs/Settings_Advanced.ui | 34 +++++++++++++++++++++-- 5 files changed, 75 insertions(+), 4 deletions(-) diff --git a/src/libtomahawk/TomahawkSettings.cpp b/src/libtomahawk/TomahawkSettings.cpp index a2ed67a23..43db6bf69 100644 --- a/src/libtomahawk/TomahawkSettings.cpp +++ b/src/libtomahawk/TomahawkSettings.cpp @@ -1764,3 +1764,15 @@ TomahawkSettings::setPlaydarKey( const QByteArray& key ) setValue( "playdar/key", key ); } +QString +TomahawkSettings::vlcArguments() const +{ + return value( "vlc/cmdline_args" ).value< QString >(); +} + +void +TomahawkSettings::setVlcArguments( const QString& args ) +{ + setValue( "vlc/cmdline_args", args); +} + diff --git a/src/libtomahawk/TomahawkSettings.h b/src/libtomahawk/TomahawkSettings.h index 517a838b8..7c757b073 100644 --- a/src/libtomahawk/TomahawkSettings.h +++ b/src/libtomahawk/TomahawkSettings.h @@ -253,6 +253,10 @@ public: QByteArray playdarKey() const; void setPlaydarKey( const QByteArray& key ); + // VLC Settings + QString vlcArguments() const; + void setVlcArguments( const QString& arguments ); + signals: void changed(); void recentlyPlayedPlaylistAdded( const QString& playlistId, int sourceId ); diff --git a/src/libtomahawk/audio/AudioOutput.cpp b/src/libtomahawk/audio/AudioOutput.cpp index f8afa8591..6d93fd9ac 100644 --- a/src/libtomahawk/audio/AudioOutput.cpp +++ b/src/libtomahawk/audio/AudioOutput.cpp @@ -22,6 +22,7 @@ #include "AudioEngine.h" #include "AudioOutput.h" #include "TomahawkVersion.h" +#include "TomahawkSettings.h" #include "audio/MediaStream.h" #include "utils/Logger.h" @@ -39,6 +40,8 @@ #include #include +#include + AudioOutput* AudioOutput::s_instance = 0; @@ -72,7 +75,7 @@ AudioOutput::AudioOutput( QObject* parent ) qRegisterMetaType("AudioOutput::AudioState"); - const char* vlcArgs[] = { + QVector vlcArgs = { "--ignore-config", "--extraintf=logger", qApp->arguments().contains( "--verbose" ) ? "--verbose=3" : "", @@ -84,11 +87,28 @@ AudioOutput::AudioOutput( QObject* parent ) // "--no-snapshot-preview", // "--services-discovery=''", "--no-video", + //"--network-caching=10000", + //"--file-caching=10000", + //"--clock-synchro=0", + //"--cr-average=10000", + //"--clock-jitter=1", "--no-xlib" }; + TomahawkSettings* s = TomahawkSettings::instance(); + //Save a list of Latin1 byte arrays for additional args + auto additionalVlcArgs = s->vlcArguments().split(","); + QVector additionalArgsChar; + + std::transform(additionalVlcArgs.begin(), additionalVlcArgs.end(), + std::back_inserter(additionalArgsChar), [](QString str) { return str.toLatin1(); }); + + for (auto&& str : additionalArgsChar) + { + vlcArgs.append(str.constData()); + } // Create and initialize a libvlc instance (it should be done only once) - m_vlcInstance = libvlc_new( sizeof(vlcArgs) / sizeof(*vlcArgs), vlcArgs ); + m_vlcInstance = libvlc_new( vlcArgs.size(), vlcArgs.constData() ); if ( !m_vlcInstance ) { tDebug() << Q_FUNC_INFO << "libVLC: could not initialize"; diff --git a/src/tomahawk/dialogs/SettingsDialog.cpp b/src/tomahawk/dialogs/SettingsDialog.cpp index 9bf8d0444..61c5b0902 100644 --- a/src/tomahawk/dialogs/SettingsDialog.cpp +++ b/src/tomahawk/dialogs/SettingsDialog.cpp @@ -126,6 +126,8 @@ SettingsDialog::SettingsDialog(QObject *parent ) m_advancedWidgetUi->enableProxyCheckBox->setChecked( useProxy ); m_advancedWidgetUi->proxyButton->setEnabled( useProxy ); + m_advancedWidgetUi->vlcArgsLineEdit->setText( s->vlcArguments() ); + m_advancedWidgetUi->aclEntryClearButton->setEnabled( TomahawkSettings::instance()->aclEntries().size() > 0 ); connect( m_advancedWidgetUi->aclEntryClearButton, SIGNAL( clicked( bool ) ), this, SLOT( aclEntryClearButtonClicked() ) ); @@ -335,6 +337,9 @@ SettingsDialog::saveSettings() s->applyChanges(); s->sync(); + m_restartRequired = m_restartRequired || m_advancedWidgetUi->vlcArgsLineEdit->text() != s->vlcArguments(); + s->setVlcArguments( m_advancedWidgetUi->vlcArgsLineEdit->text() ); + if ( m_restartRequired ) QMessageBox::information( 0, tr( "Information" ), tr( "Some changed settings will not take effect until %applicationName is restarted" ) ); diff --git a/src/tomahawk/dialogs/Settings_Advanced.ui b/src/tomahawk/dialogs/Settings_Advanced.ui index ec6c74dbd..d6b05ef32 100644 --- a/src/tomahawk/dialogs/Settings_Advanced.ui +++ b/src/tomahawk/dialogs/Settings_Advanced.ui @@ -6,8 +6,8 @@ 0 0 - 515 - 475 + 540 + 520 @@ -250,6 +250,36 @@ + + + + VLC settings + + + + + + + + Additional command line arguments + + + + + + + (separate with comma) + + + + + + + + + + +