From 109ffe9a777658936a38d0c146579a67c60a0d17 Mon Sep 17 00:00:00 2001 From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674> Date: 星期四, 11 五月 2017 17:48:48 +0800 Subject: [PATCH] --- RtspFace/PipeLine.h | 43 +++++++++++++++++++++++++++---------------- 1 files changed, 27 insertions(+), 16 deletions(-) diff --git a/RtspFace/PipeLine.h b/RtspFace/PipeLine.h index 2a59df7..5c3e03c 100644 --- a/RtspFace/PipeLine.h +++ b/RtspFace/PipeLine.h @@ -12,24 +12,25 @@ class PipeLineElem; class PipeLine; -enum PipeMaterialBufferType -{ - PMT__FIRST, - PMT_BYTES, - PMT_TEXT, - PMT_IMAGE, - PMT_PM_LIST, - PMT_PTR_AVFRAME, - PMT__LAST -}; - struct PipeMaterial; typedef void (* pm_deleter_func)(PipeMaterial* pm); +// PipeMaterial instance should be unref when pay() finished struct PipeMaterial { + enum PipeMaterialBufferType + { + PMT__FIRST, + PMT_NONE, // buffer = nullptr, buffSize = 0 + PMT_BYTES, // buffer = uint8_t[N], buffSize = N + PMT_FRAME, // buffer = MB_Frame*, buffSize = 0 + PMT_PM_LIST, // buffer = PipeMaterial*[N], buffSize = N + PMT_FRAME_LIST, // buffer = MB_Frame*[N], buffSize = N + PMT__LAST + }; + PipeMaterialBufferType type; - uint8_t* buffer; + void* buffer; size_t buffSize; PipeLineElem* former; pm_deleter_func deleter; @@ -66,6 +67,8 @@ // gain --> [pay --> pm.deleter --> gain -->] [pay --> pm.deleter --> gain -->] ... --> pay --> pm.deleter class PipeLine { + friend class PipeDebugger; + public: PipeLine(); @@ -73,10 +76,17 @@ ~PipeLine(); bool register_elem_creator(const std::string& type, elem_create_func_t func); + static bool register_global_elem_creator(const std::string& type, elem_create_func_t func); + void push_elem(PipeLineElem* elem); PipeLineElem* push_elem(const std::string& type); + void push_front_elem(PipeLineElem* elem); + bool remove_elem(PipeLineElem* elem); + + bool check_pipe_complete(PipeLineElem* lastRetElem) const; // do pipe sync. returns the element who returns false, or the last one. + // if false return, the element should deal with pm, clean up. PipeLineElem* pipe(PipeMaterial* pm = nullptr); // do pipe async @@ -84,18 +94,19 @@ void pipe_notify(PipeLineElem*); void pipe_stop(); - void set_global_param(const std::string& name, const std::string& value); - std::string get_global_param(const std::string& name) const; + void set_param(const std::string& name, const std::string& value); + std::string get_param(const std::string& name) const; private: typedef std::map<const std::string, elem_create_func_t> elem_create_func_map_t; elem_create_func_map_t elem_create_func_map; + static elem_create_func_map_t global_elem_create_func_map; typedef std::vector<PipeLineElem*> elem_vec_t; elem_vec_t elems; - typedef std::map<const std::string, std::string> global_params_map_t; - global_params_map_t global_params_map; + typedef std::map<const std::string, std::string> params_map_t; + params_map_t params_map; }; #endif -- Gitblit v1.8.0