From 2ec7bb8c87f1598ba390f99d01fea059c02a966a Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期四, 25 七月 2019 17:41:51 +0800 Subject: [PATCH] update --- csrc/wrapper.hpp | 33 +++++++++++++++++++++++++++++++-- 1 files changed, 31 insertions(+), 2 deletions(-) diff --git a/csrc/wrapper.hpp b/csrc/wrapper.hpp index f242ee7..db45ea7 100644 --- a/csrc/wrapper.hpp +++ b/csrc/wrapper.hpp @@ -1,6 +1,10 @@ #ifndef _cffmpeg_wrapper_hpp_ #define _cffmpeg_wrapper_hpp_ +extern "C"{ +#include <libavcodec/avcodec.h> +} + #include <stdint.h> #include <string> @@ -15,7 +19,8 @@ namespace ffwrapper{ class FormatIn; - + class FormatOut; + class VideoProp; class CodedData; class FrameData; @@ -26,6 +31,7 @@ enum WORKER{ WORKER_RECORDER = 0, WORKER_DECODER, + WORKER_ENCODER, }; namespace cffmpeg_wrap{ @@ -49,13 +55,15 @@ 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: @@ -71,11 +79,19 @@ 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_; @@ -97,15 +113,28 @@ 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 \ No newline at end of file -- Gitblit v1.8.0