aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/ffmpeg
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-02-02 17:54:51 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2019-02-02 17:54:51 +0000
commit07aabef41f4d2d370e43cc32a96fbb311b1ecd90 (patch)
tree4dcbb889285fab1207d4ba3da285e3e202707f1a /src/plugins/Input/ffmpeg
parent13c8cfbab0030c92ef65a96668268b553a4d7541 (diff)
downloadqmmp-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/plugins/Input/ffmpeg')
-rw-r--r--src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp68
-rw-r--r--src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h10
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