aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/Input/Input.pro2
-rw-r--r--src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp1
-rw-r--r--src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp47
-rw-r--r--src/plugins/Input/ffmpeg/decoderffmpegfactory.h14
4 files changed, 37 insertions, 27 deletions
diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro
index 6298e042a..f244f1a2a 100644
--- a/src/plugins/Input/Input.pro
+++ b/src/plugins/Input/Input.pro
@@ -20,7 +20,7 @@ contains(CONFIG, MODPLUG_PLUGIN){
}
contains(CONFIG, FFMPEG_PLUGIN){
- #SUBDIRS += ffmpeg
+ SUBDIRS += ffmpeg
}
contains(CONFIG, GME_PLUGIN){
diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp
index 5361a56ce..cf414f61c 100644
--- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp
+++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp
@@ -200,7 +200,6 @@ bool DecoderFFmpeg::initialize()
metaData.insert(Qmmp::YEAR, year->value);
if(track)
metaData.insert(Qmmp::TRACK, track->value);
- metaData.insert(Qmmp::URL, m_path);
addMetaData(metaData);
}
diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp
index eaf4d9edf..d0d772c91 100644
--- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp
+++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp
@@ -154,24 +154,24 @@ Decoder *DecoderFFmpegFactory::create(const QString &path, QIODevice *input)
return new DecoderFFmpeg(path, input);
}
-QList<FileInfo *> DecoderFFmpegFactory::createPlayList(const QString &fileName, bool useMetaData, QStringList *)
+QList<TrackInfo *> DecoderFFmpegFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *)
{
- QList <FileInfo*> list;
+ QList <TrackInfo*> list;
AVFormatContext *in = 0;
#ifdef Q_OS_WIN
- if (avformat_open_input(&in,fileName.toUtf8().constData(), 0, 0) < 0)
+ if(avformat_open_input(&in, path.toUtf8().constData(), 0, 0) < 0)
#else
- if (avformat_open_input(&in,fileName.toLocal8Bit().constData(), 0, 0) < 0)
+ if(avformat_open_input(&in, path.toLocal8Bit().constData(), 0, 0) < 0)
#endif
{
qDebug("DecoderFFmpegFactory: unable to open file");
return list;
}
- FileInfo *info = new FileInfo(fileName);
+ TrackInfo *info = new TrackInfo(path);
avformat_find_stream_info(in, 0);
- if (useMetaData)
+ if(parts & TrackInfo::MetaData)
{
AVDictionaryEntry *album = av_dict_get(in->metadata,"album",0,0);
if(!album)
@@ -194,21 +194,40 @@ QList<FileInfo *> DecoderFFmpegFactory::createPlayList(const QString &fileName,
track = av_dict_get(in->metadata,"WM/TrackNumber",0,0);
if(album)
- info->setMetaData(Qmmp::ALBUM, QString::fromUtf8(album->value).trimmed());
+ info->setValue(Qmmp::ALBUM, QString::fromUtf8(album->value));
if(artist)
- info->setMetaData(Qmmp::ARTIST, QString::fromUtf8(artist->value).trimmed());
+ info->setValue(Qmmp::ARTIST, QString::fromUtf8(artist->value));
if(comment)
- info->setMetaData(Qmmp::COMMENT, QString::fromUtf8(comment->value).trimmed());
+ info->setValue(Qmmp::COMMENT, QString::fromUtf8(comment->value));
if(genre)
- info->setMetaData(Qmmp::GENRE, QString::fromUtf8(genre->value).trimmed());
+ info->setValue(Qmmp::GENRE, QString::fromUtf8(genre->value));
if(title)
- info->setMetaData(Qmmp::TITLE, QString::fromUtf8(title->value).trimmed());
+ info->setValue(Qmmp::TITLE, QString::fromUtf8(title->value));
if(year)
- info->setMetaData(Qmmp::YEAR, year->value);
+ info->setValue(Qmmp::YEAR, year->value);
if(track)
- info->setMetaData(Qmmp::TRACK, track->value);
+ info->setValue(Qmmp::TRACK, track->value);
}
- info->setLength(in->duration/AV_TIME_BASE);
+
+ if(parts & TrackInfo::Properties)
+ {
+ int idx = av_find_best_stream(in, AVMEDIA_TYPE_AUDIO, -1, -1, 0, 0);
+ if(idx >= 0)
+ {
+ #if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,48,0)) //ffmpeg-3.1: 57.48.101
+ AVCodecParameters *c = in->streams[idx]->codecpar;
+ #else
+ AVCodecContext *c = in->streams[idx]->codec;
+ #endif
+ info->setValue(Qmmp::BITRATE, c->bit_rate);
+ info->setValue(Qmmp::SAMPLERATE, c->sample_rate);
+ info->setValue(Qmmp::CHANNELS, c->channels);
+ info->setValue(Qmmp::BITS_PER_SAMPLE, c->bits_per_raw_sample);
+ info->setValue(Qmmp::FORMAT_NAME, QString::fromLatin1(avcodec_get_name(c->codec_id)));
+ }
+ }
+
+ info->setDuration(in->duration * 1000 / AV_TIME_BASE);
avformat_close_input(&in);
list << info;
return list;
diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.h b/src/plugins/Input/ffmpeg/decoderffmpegfactory.h
index 74b68fb52..ce2caa166 100644
--- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.h
+++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.h
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006-2016 by Ilya Kotov *
+ * Copyright (C) 2006-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -20,18 +20,10 @@
#ifndef DECODERFFMPEGFACTORY_H
#define DECODERFFMPEGFACTORY_H
-#include <QObject>
-#include <QString>
-#include <QIODevice>
-#include <QWidget>
-#include <qmmp/decoder.h>
-#include <qmmp/output.h>
#include <qmmp/decoderfactory.h>
-#include <qmmp/fileinfo.h>
-class DecoderFFmpegFactory : public QObject,
- DecoderFactory
+class DecoderFFmpegFactory : public QObject, DecoderFactory
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qmmp.qmmp.DecoderFactoryInterface.1.0")
@@ -42,7 +34,7 @@ public:
bool canDecode(QIODevice *input) const;
const DecoderProperties properties() const;
Decoder *create(const QString &, QIODevice *);
- QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData, QStringList *);
+ QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *);
MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0);
void showSettings(QWidget *parent);
void showAbout(QWidget *parent);