diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-02-02 17:54:51 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-02-02 17:54:51 +0000 |
| commit | 07aabef41f4d2d370e43cc32a96fbb311b1ecd90 (patch) | |
| tree | 4dcbb889285fab1207d4ba3da285e3e202707f1a /src | |
| parent | 13c8cfbab0030c92ef65a96668268b553a4d7541 (diff) | |
| download | qmmp-07aabef41f4d2d370e43cc32a96fbb311b1ecd90.tar.gz qmmp-07aabef41f4d2d370e43cc32a96fbb311b1ecd90.tar.bz2 qmmp-07aabef41f4d2d370e43cc32a96fbb311b1ecd90.zip | |
ffmpeg: fixed cover image reading
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8665 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
| -rw-r--r-- | src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp | 68 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h | 10 |
2 files changed, 37 insertions, 41 deletions
diff --git a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp index f60b7f79d..b7b32a244 100644 --- a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp +++ b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp @@ -18,55 +18,59 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +extern "C" { +#include <libavformat/avformat.h> +#include <libavcodec/avcodec.h> +} #include <stdint.h> #include "ffmpegmetadatamodel.h" FFmpegMetaDataModel::FFmpegMetaDataModel(const QString &path) : MetaDataModel(true) { - m_in = nullptr; + AVFormatContext *in = nullptr; #ifdef Q_OS_WIN - if (avformat_open_input(&m_in, path.toUtf8().constData(), nullptr, nullptr) < 0) + if (avformat_open_input(&in, path.toUtf8().constData(), nullptr, nullptr) < 0) #else - if (avformat_open_input(&m_in, path.toLocal8Bit().constData(), nullptr, nullptr) < 0) + if (avformat_open_input(&in, path.toLocal8Bit().constData(), nullptr, nullptr) < 0) #endif return; - avformat_find_stream_info(m_in, nullptr); - av_read_play(m_in); -} -FFmpegMetaDataModel::~FFmpegMetaDataModel() -{ - if(m_in) - avformat_close_input(&m_in); -} + if(in) + { + avformat_find_stream_info(in, nullptr); + av_read_play(in); -QPixmap FFmpegMetaDataModel::cover() const -{ - if(!m_in) - return QPixmap(); #if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,48,0)) //ffmpeg-3.1: 57.48.101 - AVCodecParameters *c = nullptr; + AVCodecParameters *c = nullptr; #else - AVCodecContext *c = nullptr; + AVCodecContext *c = nullptr; #endif - for (uint idx = 0; idx < m_in->nb_streams; idx++) - { + for (uint idx = 0; idx < in->nb_streams; idx++) + { #if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,48,0)) //ffmpeg-3.1: 57.48.101 - c = m_in->streams[idx]->codecpar; + c = in->streams[idx]->codecpar; #else - c = m_in->streams[idx]->codec; + c = in->streams[idx]->codec; #endif - if (c->codec_type == AVMEDIA_TYPE_VIDEO && c->codec_id == AV_CODEC_ID_MJPEG) - break; - } - if (c) - { - AVPacket pkt; - av_read_frame(m_in, &pkt); - QPixmap pix; - pix.loadFromData(QByteArray((const char*)pkt.data, pkt.size)); - return pix; + if (c->codec_type == AVMEDIA_TYPE_VIDEO && c->codec_id == AV_CODEC_ID_MJPEG) + break; + } + if (c) + { + AVPacket pkt; + av_read_frame(in, &pkt); + m_pixmap.loadFromData(QByteArray((const char*)pkt.data, pkt.size)); + } + + avformat_close_input(&in); } - return QPixmap(); +} + +FFmpegMetaDataModel::~FFmpegMetaDataModel() +{} + +QPixmap FFmpegMetaDataModel::cover() const +{ + return m_pixmap; } diff --git a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h index 20d1f550e..9faa3a8f0 100644 --- a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h +++ b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h @@ -21,14 +21,6 @@ #ifndef FFMPEGMETADATAMODEL_H #define FFMPEGMETADATAMODEL_H -extern "C"{ -#include <libavformat/avformat.h> -#include <libavcodec/avcodec.h> -#if (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,32,0)) -#include <libavutil/dict.h> -#endif -} - #include <qmmp/metadatamodel.h> class FFmpegMetaDataModel : public MetaDataModel @@ -39,7 +31,7 @@ public: QPixmap cover() const override; private: - AVFormatContext *m_in; + QPixmap m_pixmap; }; #endif // FFMPEGMETADATAMODEL_H |
