video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-07-26 88c21b872799a1ae9dd7dd7d20f3811d749d9418
csrc/wrapper.hpp
@@ -28,15 +28,8 @@
    class cvbridge;
}
enum WORKER{
    WORKER_RECORDER = 0,
    WORKER_DECODER,
    WORKER_ENCODER,
};
namespace cffmpeg_wrap{
    typedef std::function<int(ffwrapper::FormatIn*)> FUNC_WORKER;
    typedef struct _pic_bgr24{
        unsigned char *data;
@@ -48,6 +41,14 @@
        class Recorder;
        struct avpacket;
    }
    typedef std::function<std::shared_ptr<buz::Recorder>(ffwrapper::FormatIn*)> FN_REC;
    typedef struct _fn_rec{
        FN_REC fn_init;
        std::shared_ptr<buz::Recorder> rec;
    }FnRec;
    class Wrapper{
        public:
            Wrapper();
@@ -56,11 +57,10 @@
        private: 
            std::unique_ptr<ffwrapper::FormatIn> init_reader(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);
            std::shared_ptr<buz::Recorder> init_recorder(ffwrapper::FormatIn *in, std::string id,std::string dir, const int mind, const int maxd);
            void cache_rec_info(int &index, std::string &path);
            void cache_rec_info(std::string &id, int &index, std::string &path);
            void cache_pic(std::shared_ptr<ffwrapper::FrameData> &frame);
            void cacheAVPacket(const AVPacket &pkt);
@@ -70,9 +70,9 @@
            void run_stream_thread();
        public: //recorder
            void BuildRecorder(const char *dir, const int mind, const int maxd);
            int FireRecorder(const int64_t &id);
            void GetInfoRecorder(int &index, std::string &path);
            void BuildRecorder(const char* id,const char *dir, const int mind, const int maxd);
            int FireRecorder(const char* sid,const int64_t &id);
            void GetInfoRecorder(std::string &sid, int &index, std::string &path);
            // active api
            void ActiveRecorder(const char *dir, const int mind, const int maxd,
@@ -88,23 +88,21 @@
            //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_;
            buz::Recorder  *recorder_;
            std::unique_ptr<std::thread> thread_;
            std::atomic_bool    stop_stream_;
            ffwrapper::cvbridge *bridge_;
            std::unordered_map<int, FUNC_WORKER> map_workers_;
            bool use_decoder_;
            std::unordered_map<std::string, FnRec> map_rec_;
            //passive api
            struct record_file_info{
                std::string id;
                int file_frame_index;
                std::string file_path;
            };
@@ -127,8 +125,6 @@
        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);