the addition of a thumbnailer that works for videos
the previewSlideDelegate now uses the thumbnails instead
This commit is contained in:
parent
1b55be29e5
commit
014a38a4f9
11 changed files with 638 additions and 37 deletions
78
src/cpp/framedecoder.h
Normal file
78
src/cpp/framedecoder.h
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
SPDX-FileCopyrightText: 2010 Dirk Vanden Boer <dirk.vdb@gmail.com>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#ifndef MOVIEDECODER_H
|
||||
#define MOVIEDECODER_H
|
||||
|
||||
#include <QString>
|
||||
|
||||
class QImage;
|
||||
|
||||
extern "C" {
|
||||
#include <libavcodec/avcodec.h>
|
||||
#include <libavfilter/avfilter.h>
|
||||
#include <libavfilter/buffersink.h>
|
||||
#include <libavfilter/buffersrc.h>
|
||||
#include <libavformat/avformat.h>
|
||||
}
|
||||
|
||||
class FrameDecoder
|
||||
{
|
||||
public:
|
||||
explicit FrameDecoder(const QString &filename, AVFormatContext *pavContext = nullptr);
|
||||
~FrameDecoder();
|
||||
|
||||
QString getCodec();
|
||||
void seek(int timeInSeconds);
|
||||
bool decodeVideoFrame();
|
||||
void getScaledVideoFrame(int scaledSize, bool maintainAspectRatio, QImage &videoFrame);
|
||||
|
||||
int getWidth();
|
||||
int getHeight();
|
||||
int getDuration();
|
||||
|
||||
void initialize(const QString &filename);
|
||||
void destroy();
|
||||
bool getInitialized();
|
||||
|
||||
private:
|
||||
bool initializeVideo();
|
||||
|
||||
bool decodeVideoPacket();
|
||||
bool getVideoPacket();
|
||||
void convertAndScaleFrame(AVPixelFormat format, int scaledSize, bool maintainAspectRatio, int &scaledWidth, int &scaledHeight);
|
||||
void createAVFrame(AVFrame **avFrame, quint8 **frameBuffer, int width, int height, AVPixelFormat format);
|
||||
void calculateDimensions(int squareSize, bool maintainAspectRatio, int &destWidth, int &destHeight);
|
||||
|
||||
void deleteFilterGraph();
|
||||
bool initFilterGraph(enum AVPixelFormat pixfmt, int width, int height);
|
||||
bool processFilterGraph(AVFrame *dst, const AVFrame *src, enum AVPixelFormat pixfmt, int width, int height);
|
||||
|
||||
private:
|
||||
int m_VideoStream;
|
||||
AVFormatContext *m_pFormatContext;
|
||||
AVCodecContext *m_pVideoCodecContext;
|
||||
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59, 0, 100)
|
||||
AVCodec *m_pVideoCodec;
|
||||
#else
|
||||
const AVCodec *m_pVideoCodec;
|
||||
#endif
|
||||
AVFrame *m_pFrame;
|
||||
quint8 *m_pFrameBuffer;
|
||||
AVPacket *m_pPacket;
|
||||
bool m_FormatContextWasGiven;
|
||||
bool m_AllowSeek;
|
||||
bool m_initialized;
|
||||
AVFilterContext *m_bufferSinkContext;
|
||||
AVFilterContext *m_bufferSourceContext;
|
||||
AVFilterGraph *m_filterGraph;
|
||||
AVFrame *m_filterFrame;
|
||||
int m_lastWidth;
|
||||
int m_lastHeight;
|
||||
enum AVPixelFormat m_lastPixfmt;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue