diff options
| -rw-r--r-- | src/plugins/CommandLineOptions/SeekOption/seekoption.cpp | 15 | ||||
| -rw-r--r-- | src/plugins/Engines/mplayer/mplayerengine.cpp | 115 | ||||
| -rw-r--r-- | src/plugins/Engines/mplayer/mplayerengine.h | 3 | ||||
| -rw-r--r-- | src/plugins/Engines/mplayer/mplayerenginefactory.cpp | 13 | ||||
| -rw-r--r-- | src/plugins/Engines/mplayer/mplayermetadatamodel.cpp | 23 |
5 files changed, 72 insertions, 97 deletions
diff --git a/src/plugins/CommandLineOptions/SeekOption/seekoption.cpp b/src/plugins/CommandLineOptions/SeekOption/seekoption.cpp index ce4ff6ffe..77786ec0a 100644 --- a/src/plugins/CommandLineOptions/SeekOption/seekoption.cpp +++ b/src/plugins/CommandLineOptions/SeekOption/seekoption.cpp @@ -20,7 +20,7 @@ #include <QtPlugin> #include <QLocale> -#include <QRegExp> +#include <QRegularExpression> #include <qmmp/soundcore.h> #include "seekoption.h" @@ -52,13 +52,14 @@ QString SeekOption::executeCommand(int id, const QStringList &args) int seek_pos = -1; int elapsed = core->elapsed() / 1000; - QRegExp seek_regexp1 ("^([0-9]{1,4})$"); - QRegExp seek_regexp2 ("^([0-9]{1,2}):([0-9]{1,2})$"); + static const QRegularExpression seek_regexp1 ("^([0-9]{1,4})$"); + static const QRegularExpression seek_regexp2 ("^([0-9]{1,2}):([0-9]{1,2})$"); - if(seek_regexp1.indexIn(args.first()) != -1) - seek_pos = seek_regexp1.cap(1).toInt(); - else if(seek_regexp2.indexIn(args.first()) != -1) - seek_pos = seek_regexp2.cap(1).toInt()*60 + seek_regexp2.cap(2).toInt(); + QRegularExpressionMatch match; + if((match = seek_regexp1.match(args.first())).hasMatch()) + seek_pos = match.captured(1).toInt(); + else if((match = seek_regexp2.match(args.first())).hasMatch()) + seek_pos = match.captured(1).toInt()*60 + match.captured(2).toInt(); switch (id) { case SEEK: //seek absolute diff --git a/src/plugins/Engines/mplayer/mplayerengine.cpp b/src/plugins/Engines/mplayer/mplayerengine.cpp index c9d0ee4d6..ffa5e6025 100644 --- a/src/plugins/Engines/mplayer/mplayerengine.cpp +++ b/src/plugins/Engines/mplayer/mplayerengine.cpp @@ -24,10 +24,11 @@ #include <QAction> #include <QKeyEvent> #include <QMenu> -#include <QRegExp> +#include <QRegularExpression> #include <QSettings> #include <QFileInfo> #include <QDebug> +#include <QDir> #include <qmmp/trackinfo.h> #include <qmmp/inputsource.h> #include <qmmp/volumehandler.h> @@ -35,30 +36,14 @@ //#define MPLAYER_DEBUG -static QRegExp rx_av("^[AV]: *([0-9,:.-]+)"); -static QRegExp rx_pause("^(.*)=(.*)PAUSE(.*)"); -static QRegExp rx_end("^(.*)End of file(.*)"); -static QRegExp rx_quit("^(.*)Quit(.*)"); -static QRegExp rx_audio("^AUDIO: *([0-9,.]+) *Hz.*([0-9,.]+) *ch.*([0-9]+).* ([0-9,.]+) *kbit.*"); -static QRegExp rx_audio2("^AUDIO: *([0-9,.]+) *Hz.*([0-9,.]+) *ch.*([a-z]+).* ([0-9,.]+) *kbit.*"); - TrackInfo *MplayerInfo::createTrackInfo(const QString &path) { - QRegExp rx_id_length("^ID_LENGTH=([0-9,.]+)*"); - QRegExp rx_id_audio_bitrate("^ID_AUDIO_BITRATE=([0-9,.]+)*"); - QRegExp rx_id_audio_rate("^ID_AUDIO_RATE=([0-9,.]+)*"); - QRegExp rx_id_audio_nch("^ID_AUDIO_NCH=([0-9,.]+)*"); - QRegExp rx_id_audio_codec("^ID_AUDIO_CODEC=(.*)"); - QStringList args; - args << "-slave"; - args << "-identify"; - args << "-frames"; - args << "0"; - args << "-vo"; - args << "null"; - args << "-ao"; - args << "null"; - args << path; + QRegularExpression rx_id_length("^ID_LENGTH=([0-9,.]+)*"); + QRegularExpression rx_id_audio_bitrate("^ID_AUDIO_BITRATE=([0-9,.]+)*"); + QRegularExpression rx_id_audio_rate("^ID_AUDIO_RATE=([0-9,.]+)*"); + QRegularExpression rx_id_audio_nch("^ID_AUDIO_NCH=([0-9,.]+)*"); + QRegularExpression rx_id_audio_codec("^ID_AUDIO_CODEC=(.*)"); + QStringList args = { "-slave", "-identify", "-frames", "0", "-vo", "null", "-ao", "null", path }; QProcess mplayer_process; mplayer_process.start("mplayer", args); mplayer_process.waitForFinished(1500); @@ -68,16 +53,18 @@ TrackInfo *MplayerInfo::createTrackInfo(const QString &path) const QStringList lines = str.split("\n"); for(const QString &line : qAsConst(lines)) { - if(rx_id_length.indexIn(line) > -1) - info->setDuration((qint64) rx_id_length.cap(1).toDouble() * 1000); - else if(rx_id_audio_bitrate.indexIn(line) > -1) - info->setValue(Qmmp::BITRATE, rx_id_audio_bitrate.cap(1).toDouble()); - else if(rx_id_audio_rate.indexIn(line) > -1) - info->setValue(Qmmp::SAMPLERATE, rx_id_audio_rate.cap(1).toDouble()); - else if(rx_id_audio_nch.indexIn(line) > -1) - info->setValue(Qmmp::CHANNELS, rx_id_audio_nch.cap(1).toInt()); - else if(rx_id_audio_codec.indexIn(line) > -1) - info->setValue(Qmmp::FORMAT_NAME, rx_id_audio_codec.cap(1)); + QRegularExpressionMatch match; + + if((match = rx_id_length.match(line)).hasMatch()) + info->setDuration(match.captured(1).toDouble() * 1000); + else if((match = rx_id_audio_bitrate.match(line)).hasMatch()) + info->setValue(Qmmp::BITRATE, match.captured(1).toDouble()); + else if((match = rx_id_audio_rate.match(line)).hasMatch()) + info->setValue(Qmmp::SAMPLERATE, match.captured(1).toDouble()); + else if((match = rx_id_audio_nch.match(line)).hasMatch()) + info->setValue(Qmmp::CHANNELS, match.captured(1).toInt()); + else if((match = rx_id_audio_codec.match(line)).hasMatch()) + info->setValue(Qmmp::FORMAT_NAME, match.captured(1)); } info->setValue(Qmmp::BITS_PER_SAMPLE, 32); info->setValue(Qmmp::DECODER, "mplayer"); @@ -88,14 +75,18 @@ TrackInfo *MplayerInfo::createTrackInfo(const QString &path) return info; } -QStringList MplayerInfo::filters() +const QStringList &MplayerInfo::filters() { - QStringList filters; - filters << "*.avi" << "*.mpg" << "*.mpeg" << "*.divx" << "*.qt" << "*.mov" << "*.wmv" << "*.asf" - << "*.flv" << "*.3gp" << "*.mkv" << "*.mp4" << "*.webm"; + static const QStringList filters = { "*.avi", "*.mpg", "*.mpeg", "*.divx", "*.qt", "*.mov", "*.wmv", "*.asf", + "*.flv", "*.3gp", "*.mkv", "*.mp4", "*.webm" }; return filters; } +bool MplayerInfo::supports(const QString &path) +{ + return QDir::match(filters(), path.section("/", -1)); +} + MplayerEngine::MplayerEngine(QObject *parent) : AbstractEngine(parent) { @@ -122,16 +113,7 @@ bool MplayerEngine::play() bool MplayerEngine::enqueue(InputSource *source) { - const QStringList filters = MplayerInfo::filters(); - bool supports = false; - for(const QString &filter : qAsConst(filters)) - { - QRegExp regexp(filter, Qt::CaseInsensitive, QRegExp::Wildcard); - supports = regexp.exactMatch(source->path()); - if(supports) - break; - } - if(!supports) + if(!MplayerInfo::supports(source->path())) return false; if(!m_process || m_process->state() == QProcess::NotRunning) @@ -203,20 +185,29 @@ void MplayerEngine::setMuted(bool muted) void MplayerEngine::readStdOut() { + static const QRegularExpression rx_av("^[AV]: *([0-9,:.-]+)"); + static const QRegularExpression rx_pause("^(.*)=(.*)PAUSE(.*)"); + static const QRegularExpression rx_end("^(.*)End of file(.*)"); + static const QRegularExpression rx_quit("^(.*)Quit(.*)"); + static const QRegularExpression rx_audio("^AUDIO: *([0-9,.]+) *Hz.*([0-9,.]+) *ch.*([0-9]+).* ([0-9,.]+) *kbit.*"); + static const QRegularExpression rx_audio2("^AUDIO: *([0-9,.]+) *Hz.*([0-9,.]+) *ch.*([a-z]+).* ([0-9,.]+) *kbit.*"); + const QStringList lines = QString::fromLocal8Bit(m_process->readAll()).trimmed().split("\n"); - for(const QString &line : lines) + for(const QString &line : qAsConst(lines)) { - if (rx_av.indexIn(line) > -1) + QRegularExpressionMatch match; + + if ((match = rx_av.match(line)).hasMatch()) { StateHandler::instance()->dispatch(Qmmp::Playing); - m_currentTime = (qint64) rx_av.cap(1).toDouble(); + m_currentTime = (qint64) match.captured(1).toDouble(); StateHandler::instance()->dispatch(m_currentTime * 1000, m_bitrate); } - else if (rx_pause.indexIn(line) > -1) + else if ((match = rx_pause.match(line)).hasMatch()) { StateHandler::instance()->dispatch(Qmmp::Paused); } - else if (rx_end.indexIn(line) > -1) + else if ((match = rx_end.match(line)).hasMatch()) { if (m_process->state() == QProcess::Running) m_process->waitForFinished(3500); @@ -233,7 +224,7 @@ void MplayerEngine::readStdOut() return; } } - else if (rx_quit.indexIn(line) > -1 && !m_user_stop) + else if ((match = rx_quit.match(line)).hasMatch() && !m_user_stop) { if (m_process->state() == QProcess::Running) { @@ -242,21 +233,21 @@ void MplayerEngine::readStdOut() } StateHandler::instance()->dispatch(Qmmp::Stopped); } - else if (rx_audio.indexIn(line) > -1) + else if ((match = rx_audio.match(line)).hasMatch()) { - m_samplerate = rx_audio.cap(1).toInt(); - m_channels = rx_audio.cap(2).toInt(); - m_bitsPerSample = rx_audio.cap(3).toDouble(); - m_bitrate = rx_audio.cap(4).toDouble(); + m_samplerate = match.captured(1).toInt(); + m_channels = match.captured(2).toInt(); + m_bitsPerSample = match.captured(3).toDouble(); + m_bitrate = match.captured(4).toDouble(); AudioParameters ap(m_samplerate, ChannelMap(m_channels), AudioParameters::findAudioFormat(m_bitsPerSample)); StateHandler::instance()->dispatch(ap); } - else if (rx_audio2.indexIn(line) > -1) + else if ((match = rx_audio2.match(line)).hasMatch()) { - m_samplerate = rx_audio2.cap(1).toInt(); - m_channels = rx_audio2.cap(2).toInt(); + m_samplerate = match.captured(1).toInt(); + m_channels = match.captured(2).toInt(); m_bitsPerSample = 32; - m_bitrate = rx_audio2.cap(4).toDouble(); + m_bitrate = match.captured(4).toDouble(); AudioParameters ap(m_samplerate, ChannelMap(m_channels), AudioParameters::findAudioFormat(m_bitsPerSample)); StateHandler::instance()->dispatch(ap); } diff --git a/src/plugins/Engines/mplayer/mplayerengine.h b/src/plugins/Engines/mplayer/mplayerengine.h index b0edff08b..47f2005e6 100644 --- a/src/plugins/Engines/mplayer/mplayerengine.h +++ b/src/plugins/Engines/mplayer/mplayerengine.h @@ -38,7 +38,8 @@ class MplayerInfo { public: static TrackInfo *createTrackInfo(const QString &path); - static QStringList filters(); + static const QStringList &filters(); + static bool supports(const QString &path); }; class MplayerEngine : public AbstractEngine diff --git a/src/plugins/Engines/mplayer/mplayerenginefactory.cpp b/src/plugins/Engines/mplayer/mplayerenginefactory.cpp index dfc13cf27..491dc7cb0 100644 --- a/src/plugins/Engines/mplayer/mplayerenginefactory.cpp +++ b/src/plugins/Engines/mplayer/mplayerenginefactory.cpp @@ -43,14 +43,7 @@ EngineProperties MplayerEngineFactory::properties() const bool MplayerEngineFactory::supports(const QString &source) const { - const QStringList filters = MplayerInfo::filters(); - for(const QString &filter : qAsConst(filters)) - { - QRegExp regexp(filter, Qt::CaseInsensitive, QRegExp::Wildcard); - if (regexp.exactMatch(source)) - return true; - } - return false; + return MplayerInfo::supports(source); } AbstractEngine *MplayerEngineFactory::create(QObject *parent) @@ -61,9 +54,7 @@ AbstractEngine *MplayerEngineFactory::create(QObject *parent) QList<TrackInfo *> MplayerEngineFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *) { Q_UNUSED(parts); - QList<TrackInfo *> info; - info << MplayerInfo::createTrackInfo(path); - return info; + return { MplayerInfo::createTrackInfo(path) }; } MetaDataModel* MplayerEngineFactory::createMetaDataModel(const QString &path, bool readOnly) diff --git a/src/plugins/Engines/mplayer/mplayermetadatamodel.cpp b/src/plugins/Engines/mplayer/mplayermetadatamodel.cpp index 73c7a2ff5..ebe698795 100644 --- a/src/plugins/Engines/mplayer/mplayermetadatamodel.cpp +++ b/src/plugins/Engines/mplayer/mplayermetadatamodel.cpp @@ -18,7 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#include <QRegExp> +#include <QRegularExpression> #include <QFileInfo> #include <QStringList> #include <QProcess> @@ -37,28 +37,20 @@ QList<MetaDataItem> MplayerMetaDataModel::extraProperties() const QList<MetaDataItem> ep; ep << MetaDataItem(tr("Size"), QFileInfo(m_path).size ()/1024, tr("KiB")); //prepare and start mplayer process - QStringList args; - args << "-slave"; - args << "-identify"; - args << "-frames"; - args << "0"; - args << "-vo"; - args << "null"; - args << "-ao"; - args << "null"; - args << m_path; + QStringList args = { "-slave", "-identify", "-frames", "0", "-vo", "null", "-ao", "null", m_path }; QProcess mplayer_process; mplayer_process.start("mplayer", args); mplayer_process.waitForFinished(); QString str = QString::fromLocal8Bit(mplayer_process.readAll()).trimmed(); const QStringList lines = str.split("\n"); //mplayer std output parsing - QRegExp rx_id("^(ID_.*)=(.*)"); + QRegularExpression rx_id("^(ID_.*)=(.*)"); QMap<QString, QString> params; for(const QString &line : qAsConst(lines)) { - if(rx_id.indexIn(line.trimmed()) > -1) - params.insert(rx_id.cap(1), rx_id.cap(2)); + QRegularExpressionMatch match = rx_id.match(line.trimmed()); + if(match.hasMatch()) + params.insert(match.captured(1), match.captured(2)); } //general info ep << MetaDataItem(tr("Demuxer"), params["ID_DEMUXER"]); @@ -68,8 +60,7 @@ QList<MetaDataItem> MplayerMetaDataModel::extraProperties() const ep << MetaDataItem(tr("Video codec"), params["ID_VIDEO_CODEC"]); ep << MetaDataItem(tr("Aspect ratio"), params["ID_VIDEO_ASPECT"]); ep << MetaDataItem(tr("Video bitrate"), params["ID_VIDEO_BITRATE"].toInt() / 1000, tr("kbps")); - ep << MetaDataItem(tr("Resolution"), QString("%1x%2").arg(params["ID_VIDEO_WIDTH"]) - .arg(params["ID_VIDEO_HEIGHT"])); + ep << MetaDataItem(tr("Resolution"), QString("%1x%2").arg(params["ID_VIDEO_WIDTH"]).arg(params["ID_VIDEO_HEIGHT"])); ep << MetaDataItem(tr("Audio codec"), params["ID_AUDIO_CODEC"]); ep << MetaDataItem(tr("Sample rate"), params["ID_AUDIO_RATE"], tr("Hz")); ep << MetaDataItem(tr("Audio bitrate"), params["ID_AUDIO_BITRATE"].toInt() / 1000, tr("kbps")); |
