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