| | |
| | | #ifndef _cffmpeg_wrapper_hpp_ |
| | | #define _cffmpeg_wrapper_hpp_ |
| | | |
| | | extern "C"{ |
| | | #include <libavcodec/avcodec.h> |
| | | } |
| | | |
| | | #include <stdint.h> |
| | | |
| | | #include <string> |
| | |
| | | |
| | | namespace ffwrapper{ |
| | | class FormatIn; |
| | | |
| | | class FormatOut; |
| | | |
| | | class VideoProp; |
| | | class CodedData; |
| | | class FrameData; |
| | |
| | | enum WORKER{ |
| | | WORKER_RECORDER = 0, |
| | | WORKER_DECODER, |
| | | WORKER_ENCODER, |
| | | }; |
| | | |
| | | namespace cffmpeg_wrap{ |
| | |
| | | |
| | | private: |
| | | std::unique_ptr<ffwrapper::FormatIn> init_reader(const char* input); |
| | | ffwrapper::FormatIn* init_reader_gb28181(const char* input); |
| | | // ffwrapper::FormatIn* init_reader_gb28181(const char* input); |
| | | void init_worker(ffwrapper::FormatIn *in); |
| | | int init_recorder(ffwrapper::FormatIn *in, std::string dir, const int mind, const int maxd); |
| | | void run_worker(ffwrapper::FormatIn *in, buz::avpacket &pkt); |
| | | |
| | | void cache_rec_info(int &index, std::string &path); |
| | | void cache_pic(std::shared_ptr<ffwrapper::FrameData> &frame); |
| | | |
| | | void cacheAVPacket(const AVPacket &pkt); |
| | | public: |
| | | int RunStream(const char* input); |
| | | private: |
| | |
| | | FUNC_REC func); |
| | | |
| | | void ScalePicture(const int w, const int h, const int flags); |
| | | void UseGB28181(); |
| | | void UseCPU(); |
| | | public: //decoder |
| | | void BuildDecoder(); |
| | | void GetPicDecoder(unsigned char **data, int *w, int *h); |
| | | void GetPacket(unsigned char **pktData, int *size, int *key); |
| | | //active api |
| | | void ActiveDecoder(FUNC_DEC fn); |
| | | |
| | | public: |
| | | void BuildEncoder(const char *file, const int w, const int h, const int fps, const int br, const int gi); |
| | | int init_encoder(ffwrapper::FormatIn *in, const char *file, const int w, const int h, const int fps, const int br, const int gi); |
| | | |
| | | private: |
| | | |
| | | std::string input_url_; |
| | |
| | | |
| | | std::list<pic_bgr24> list_pic_; |
| | | std::mutex mutex_pic_; |
| | | |
| | | std::list<AVPacket> list_avpkt_; |
| | | std::mutex mutex_avpkt_; |
| | | |
| | | // active api |
| | | FUNC_REC func_rec_; |
| | | FUNC_DEC func_dec_; |
| | | |
| | | int scale_w_, scale_h_, scale_f_; |
| | | int gb_, cpu_; |
| | | //////////////////test frame to bgr24 |
| | | public: |
| | | uint8_t *decodeJPEG(const char *file, int *w, int *h); |
| | | |
| | | private: |
| | | ffwrapper::FormatOut *encoder_; |
| | | }; |
| | | |
| | | void *CreateEncoder(const int w, const int h, const int fps, const int br, const int scale_flag, const int gi); |
| | | void DestroyEncoder(void *h); |
| | | int Encode(void *hdl, uint8_t *in, const int w, const int h, uint8_t **out, int *size, int *key); |
| | | |
| | | } |
| | | |
| | | #endif |