From 0027a3d62ef3d8cfadc6105b14f1136da7702d34 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Tue, 29 May 2018 21:30:24 +0000 Subject: enabled ffmpeg plugin git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7974 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp | 47 ++++++++++++++++------- 1 file changed, 33 insertions(+), 14 deletions(-) (limited to 'src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp') 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 DecoderFFmpegFactory::createPlayList(const QString &fileName, bool useMetaData, QStringList *) +QList DecoderFFmpegFactory::createPlayList(const QString &path, TrackInfo::Parts parts, QStringList *) { - QList list; + QList 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 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; -- cgit v1.2.3-13-gbd6f