2025-03-29 14:50:44 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
#include"DataType.h"
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#include <libavformat/avformat.h>
|
|
|
|
|
#include<libavcodec/avcodec.h>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class EncodeOutput
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
virtual ~EncodeOutput()=default;
|
|
|
|
|
|
|
|
|
|
virtual bool Write(const void *,const uint)=0;
|
|
|
|
|
};//class EncodeOutput
|
|
|
|
|
|
|
|
|
|
class VideoEncoder
|
|
|
|
|
{
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
AVFormatContext* fmt_ctx;
|
|
|
|
|
AVCodecContext* codec_ctx;
|
|
|
|
|
|
2025-03-29 16:14:11 +08:00
|
|
|
|
Size2u frame_size;
|
2025-03-29 14:50:44 +08:00
|
|
|
|
AVRational frame_rate;
|
|
|
|
|
uint bit_rate;
|
|
|
|
|
|
|
|
|
|
char filename[_MAX_PATH];
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
VideoEncoder(const char *fn,const uint br)
|
|
|
|
|
{
|
|
|
|
|
strcpy_s(filename,_MAX_PATH,fn);
|
|
|
|
|
|
|
|
|
|
bit_rate=br;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-29 16:14:11 +08:00
|
|
|
|
AVFormatContext *GetFrmCtx(){return fmt_ctx;}
|
|
|
|
|
AVCodecContext *GetCodecCtx(){return codec_ctx;}
|
2025-03-29 14:50:44 +08:00
|
|
|
|
|
|
|
|
|
virtual ~VideoEncoder()=default;
|
|
|
|
|
|
2025-03-29 16:14:11 +08:00
|
|
|
|
virtual void Set(const AVRational &fr,const Size2u &size)
|
2025-03-29 14:50:44 +08:00
|
|
|
|
{
|
2025-03-29 16:14:11 +08:00
|
|
|
|
frame_size=size;
|
2025-03-29 14:50:44 +08:00
|
|
|
|
frame_rate=fr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
virtual bool Init()=0;
|
|
|
|
|
|
|
|
|
|
virtual bool WriteFrame(const uint8 *rgba_data)=0;
|
|
|
|
|
|
|
|
|
|
virtual bool Finish()=0;
|
|
|
|
|
};//class VideoEncoder
|
|
|
|
|
|
|
|
|
|
VideoEncoder *CreateVideoEncoder(const char *filename,const uint bit_rate,const bool);
|