iVS3D v2.0.0
Loading...
Searching...
No Matches
videoreader.h
1#ifndef VIDEOREADER_H
2#define VIDEOREADER_H
3
4#include <QMutex>
5#include <QMutexLocker>
6#include <QObject>
7#include <iostream>
8#include <opencv2/imgcodecs.hpp>
9#include <opencv2/imgproc.hpp>
10#include <opencv2/videoio.hpp>
11
12#include "algorithmmanager.h"
13#include "reader.h"
14#include "readerfactory.h"
15#include "readerparams.h"
16#include "sequentialreaderimpl.h"
17
18extern "C" {
19#include <libavcodec/avcodec.h>
20#include <libavformat/avformat.h>
21#include <libavutil/rational.h>
22#include <libswscale/swscale.h>
23}
24
25#define NOT_IMPLEMENTED assert(false && "Not implemtented yet.")
26
41class VideoReader : public Reader
42
43{
44 public:
52 explicit VideoReader(const QString& path,
53 std::shared_ptr<ReaderParams> readerParams);
65 cv::Mat getPic(unsigned int index,
66 PictureProcessingFlags flags = APPLY_ALL) override;
72 unsigned int getPicCount() override;
78 QString getInputPath() override;
84 double getFPS() override;
90 double getVideoDuration() override;
96 bool isDir() override;
102 VideoReader *copy(std::shared_ptr<ReaderParams> params) override;
103
109 std::vector<std::string> getFileVector() override;
110
119 std::vector<uint> indices,
120 PictureProcessingFlags flags = APPLY_ALL) override;
121
126 void addMetaData(MetaData* md) override;
131 MetaData* getMetaData() override;
136 bool isValid() override;
137
138 private:
139 // getter exposed members
140 int m_currentIndex = -1;
141 std::string m_path = "";
142 size_t m_frameCount = -1;
143 bool m_isValid = false;
144 AVRational m_avgVideoFPS;
145 MetaData* m_md = nullptr;
146 //
147
148 QMutex m_mutex;
149 std::shared_ptr<ReaderParams> m_readerParams;
150 int64_t m_startTimestamp = AV_NOPTS_VALUE;
151 std::map<uint, AVFrame*> m_buffer;
152 AVRational m_streamTimeBase = AV_TIME_BASE_Q;
153 int m_streamId = -1;
154 int m_lastFrameIdx = -1;
155 // AV/SWS-Objects
156 AVFormatContext* m_formatContext = nullptr;
157 AVCodecContext* m_codecContext = nullptr;
158 const AVCodec* m_codec = nullptr;
159 struct SwsContext* m_swsContext = nullptr;
160
161 // private helper functions
162 cv::Mat avFrame2CvMat(const AVFrame* av_f);
163 void openFormatContext();
164 void selectVideoStream();
165 void openCodec();
166 void createSWS();
167 int decodeNextPkg();
168};
169
170REGISTER_READER("VideoReader", VideoReader)
171
172#endif // VIDEOREADER_H
Interface to give plugins access to all parsed and loaded meta data.
Definition metadata.h:20
The Reader interface defines functions which are used for reading and parsing the import.
Definition reader.h:23
Definition sequentialreader.h:10
The VideoReader class is used to import video files and implement the Reader interface....
Definition videoreader.h:43
MetaData * getMetaData() override
getMetaData Returns the currently saved MetaData
Definition videoreader.cpp:97
void addMetaData(MetaData *md) override
addMetaData Used to add MetaData to the reader
Definition videoreader.cpp:95
double getVideoDuration() override
Returns the video duration.
Definition videoreader.cpp:208
std::vector< std::string > getFileVector() override
Returns a empty vector.
Definition videoreader.cpp:230
SequentialReader * createSequentialReader(std::vector< uint > indices, PictureProcessingFlags flags=APPLY_ALL) override
createSequentialReader Creates a SequentialReader object for the given indices. This can be used to a...
Definition videoreader.cpp:234
QString getInputPath() override
Returns the input path.
Definition videoreader.cpp:201
bool isDir() override
Returns wether the input is a direcory or not.
Definition videoreader.cpp:216
VideoReader * copy(std::shared_ptr< ReaderParams > params) override
Creates this reader again and returns it.
Definition videoreader.cpp:218
cv::Mat getPic(unsigned int index, PictureProcessingFlags flags=APPLY_ALL) override
Returns the frame to a given index.
Definition videoreader.cpp:101
unsigned int getPicCount() override
Returns the number of frame.
Definition videoreader.cpp:199
bool isValid() override
isValid Retruns wether the reader is valid or not
Definition videoreader.cpp:99
~VideoReader()
VideoReader destructor.
Definition videoreader.cpp:39
double getFPS() override
Returns the video FPS.
Definition videoreader.cpp:203