You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.2 KiB
171 lines
4.2 KiB
//------------------------------------------------------------------------------
|
|
//
|
|
// Project: Anonymizer
|
|
//
|
|
// Brno University of Technology
|
|
// Faculty of Information Technology
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
//
|
|
// This project was financially supported by project VG20102015006 funds
|
|
// provided by Ministry of the Interior of the Czech republic.
|
|
//
|
|
//------------------------------------------------------------------------------
|
|
/*!
|
|
|
|
@file videoframe.h
|
|
@brief Header file
|
|
@details Details
|
|
@authors Martin Borek (mborekcz@gmail.com)
|
|
@authors Filip Orsag (orsag@fit.vutbr.cz)
|
|
@date 2014-2015
|
|
@note This project was supported by MV CR project VG20102015006.
|
|
@copyright BUT OPEN SOURCE LICENCE (see License.txt)
|
|
|
|
*/
|
|
|
|
#ifndef VIDEOFRAME_H
|
|
#define VIDEOFRAME_H
|
|
|
|
#include <opencv/cv.h>
|
|
#include <opencv/cvaux.h>
|
|
#include <opencv/cxcore.h>
|
|
#include <opencv/highgui.h>
|
|
|
|
extern "C"{
|
|
#include <ffmpeg/libavcodec/avcodec.h>
|
|
#include <ffmpeg/libavformat/avformat.h>
|
|
#include <ffmpeg/libswscale/swscale.h>
|
|
}
|
|
|
|
#define VIDEOTRACKING_DEFAULT_SCALING_METHOD SWS_BILINEAR
|
|
#define VIDEOTRACKING_OUTPUT_FORMAT AV_PIX_FMT_YUV420P
|
|
|
|
class VideoFrame
|
|
{
|
|
public:
|
|
/**
|
|
* Constructor
|
|
*/
|
|
VideoFrame();
|
|
/**
|
|
* Copy constructor
|
|
* @param obj Original
|
|
*/
|
|
VideoFrame(const VideoFrame &obj);
|
|
|
|
/**
|
|
* Constructor
|
|
* @param width Frame width
|
|
* @param height Frame height
|
|
*/
|
|
VideoFrame(unsigned int width, unsigned int height);
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
~VideoFrame();
|
|
|
|
/**
|
|
* Sets a new frame
|
|
* @param newFrame New frame data
|
|
* @return True if successful
|
|
*/
|
|
bool set_frame(AVFrame const *newFrame);
|
|
|
|
unsigned long get_time_position() const;
|
|
/**
|
|
* Returns frame timestamp.
|
|
* @return Frame timestamp
|
|
*/
|
|
int64_t get_timestamp() const;
|
|
|
|
/**
|
|
* Returns frame number (index).
|
|
* @return Frame number
|
|
*/
|
|
unsigned long get_frame_number() const;
|
|
|
|
/**
|
|
* Returns width of the frame.
|
|
* @return Frame width
|
|
*/
|
|
unsigned int get_width() const;
|
|
|
|
/**
|
|
* Returns height of the frame.
|
|
* @return Frame height
|
|
*/
|
|
unsigned int get_height() const;
|
|
|
|
/**
|
|
* Sets frame size.
|
|
* @param newWidth New frame width
|
|
* @param newHeight New frame height
|
|
*/
|
|
void set_size(unsigned int newWidth, unsigned int newHeight);
|
|
|
|
/**
|
|
* Sets timestamp.
|
|
* @param newTimestamp New timestamp
|
|
*/
|
|
void set_timestamp(int64_t newTimestamp);
|
|
|
|
/**
|
|
* Sets time position.
|
|
* @param newTimePosition New time Position
|
|
*/
|
|
void set_time_position(unsigned long newTimePosition);
|
|
|
|
/**
|
|
* Sets frame number.
|
|
* @param newFrameNumber New frame number
|
|
*/
|
|
void set_frame_number(unsigned long newFrameNumber);
|
|
|
|
/**
|
|
* Returns the frame in AVFrame.
|
|
* @return Frame
|
|
*/
|
|
AVFrame const *get_av_frame();
|
|
|
|
/**
|
|
* Returns the frame in cv::Mat.
|
|
* @return Frame
|
|
*/
|
|
cv::Mat const *get_mat_frame() const;
|
|
|
|
/**
|
|
* Converts AVFrame to cv::Mat.
|
|
* @param src Source AVFrame
|
|
* @param dstMat Destination cv::Mat; It mus be allocated before using this function.
|
|
* @return True if successful
|
|
*/
|
|
bool AVFrame2Mat(AVFrame const *src, cv::Mat *dstMat) const;
|
|
|
|
/**
|
|
* Converts cv::Mat to AVFrame.
|
|
* @param src Source cv::at
|
|
* @param dstAVFrame Destination AVFrame
|
|
* @param dstFormat Destination PixelFormat; it must be allocated before, but must not have allocated buffer (is allocated inside of this function). The buffer needs to be later freed manually.
|
|
* @return True if successful
|
|
*/
|
|
bool Mat2AVFrame(cv::Mat const &src, AVFrame *dstAVFrame, const int dstFormat) const;
|
|
|
|
public:
|
|
cv::Mat *matFrame; // Be careful using it directly! If possible, use get_mat_frame() instead
|
|
private:
|
|
AVFrame *avFrame;
|
|
|
|
const int outputFormat = VIDEOTRACKING_OUTPUT_FORMAT;
|
|
const int scalingMethod;
|
|
int64_t timestamp;
|
|
unsigned long timePosition;
|
|
unsigned long frameNumber;
|
|
unsigned int width;
|
|
unsigned int height;
|
|
|
|
};
|
|
|
|
#endif // VIDEOFRAME_H
|