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.
112 lines
3.2 KiB
112 lines
3.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 avwriter.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 AVWRITER_H
|
|
#define AVWRITER_H
|
|
|
|
extern "C"{
|
|
#include <ffmpeg/libavcodec/avcodec.h>
|
|
#include <ffmpeg/libavformat/avformat.h>
|
|
#include <ffmpeg/libswscale/swscale.h>
|
|
|
|
#include <ffmpeg/libavutil/common.h>
|
|
#include <ffmpeg/libavutil/imgutils.h>
|
|
#include <ffmpeg/libavutil/mathematics.h>
|
|
#include <ffmpeg/libavutil/samplefmt.h>
|
|
|
|
|
|
#include <ffmpeg/libavutil/avassert.h>
|
|
#include <ffmpeg/libavutil/channel_layout.h>
|
|
#include <ffmpeg/libavutil/opt.h>
|
|
#include <ffmpeg/libavutil/timestamp.h>
|
|
#include <ffmpeg/libswresample/swresample.h>
|
|
}
|
|
|
|
#include "videoframe.h"
|
|
|
|
class AVWriter
|
|
{
|
|
public:
|
|
AVWriter();
|
|
~AVWriter();
|
|
|
|
/**
|
|
* Initializes contexts, opens codecs and opens the output file for writing.
|
|
* @param filename Output filename
|
|
* @param inVideoStream Input video stream
|
|
* @param inAudioStream Input audio stream
|
|
* @param inFormatName Name of the input file format
|
|
* @param inFileExtension Extension of the input file
|
|
* @return True if initialization successful
|
|
*/
|
|
bool initialize_output(std::string filename, AVStream const *inVideoStream, AVStream const *inAudioStream,
|
|
char const *inFormatName, std::string inFileExtension);
|
|
|
|
/**
|
|
* Correct closing of the output file.
|
|
* @return True if successful
|
|
*/
|
|
bool close_output();
|
|
|
|
/**
|
|
* Writes the video frame to the output video stream.
|
|
* @param frame Frame to be written
|
|
* @return True if successful
|
|
*/
|
|
bool write_video_frame(VideoFrame &frame);
|
|
|
|
/**
|
|
* Writes the audio packet to the output audio stream.
|
|
* @param pkt Packet to be written
|
|
* @return True if successful
|
|
*/
|
|
bool write_audio_packet(AVPacket &pkt);
|
|
|
|
/**
|
|
* Writes all frames remaining in the encoder; emptying buffers.
|
|
* @return True if successful
|
|
*/
|
|
bool write_last_frames();
|
|
|
|
private:
|
|
/**
|
|
* Adds a new stream (either audio or video) for creating an output media file.
|
|
* @param outputStream Output stream that is initialized by this function
|
|
* @param inputStream Input stream; it's values are used for outputStream initialization
|
|
* @return True if successful
|
|
*/
|
|
bool add_stream(AVStream **outputStream, AVStream const *inputStream);
|
|
|
|
private:
|
|
AVFormatContext *formatContext;
|
|
AVStream *videoStream;
|
|
AVStream *audioStream;
|
|
|
|
const int outputFormat = AV_PIX_FMT_YUV420P;
|
|
};
|
|
|
|
#endif // AVWRITER_H
|