|
- #pragma once
- #include <QImage>
- #include <QMutex>
- #include <QMutexLocker>
- #include <QThread>
- #include "ConstBuffer.h"
-
- extern "C" {
- #include "libavcodec/avcodec.h"
- #include "libavformat/avformat.h"
- #include "libavutil/imgutils.h"
- #include "libavutil/mathematics.h"
- #include "libavutil/opt.h"
- #include "libavutil/pixfmt.h"
- #include "libavutil/samplefmt.h"
- #include "libswscale/swscale.h"
- }
-
- class FfmpegDecodeNew : public QThread
- {
- Q_OBJECT
- public:
- FfmpegDecodeNew(QObject* parent = Q_NULLPTR);
- ~FfmpegDecodeNew();
- void init();
- void setParam(unsigned short format, int width, int height);
- inline IBuffer* getConstBuffer()
- {
- return m_pConstBuffer;
- }
- bool getImage(QImage& image);
- void stop()
- {
- m_bNeedWork = false;
- m_bImageUpdated = false;
- }
-
- private:
- bool m_bNeedWork;
- ConstBuffer* m_pConstBuffer;
- AVPacket* m_pAVPacket; // 压缩数据包
- const AVCodec* m_pAVCodec; // 解码器
- AVCodecParserContext* m_pAVCodecParserContext; // 解析器
- AVCodecContext* m_pAVCodecContext;
- AVFrame* m_pAVFrameSrc;
- AVFrame* m_pAVFrameDes;
- SwsContext* m_pSwsContext;
- AVPixelFormat m_AVPixelFormat;
- bool m_bSwsContext;
- QMutex m_mutex;
- bool m_bImageUpdated;
- QImage m_image;
- unsigned short m_usFormat; // 图像格式
- int m_iWidth; // 图像宽度
- int m_iHeight; // 图像高度
- private:
- void run() override;
- void decode(AVCodecContext* pCodecContext, AVFrame* pFrame, AVPacket* pPacket);
- };
|