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 |   30 +++++++++++++++++++++---------
 1 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/RtspFace/PipeLine.h b/RtspFace/PipeLine.h
index e690be3..5c3e03c 100644
--- a/RtspFace/PipeLine.h
+++ b/RtspFace/PipeLine.h
@@ -21,14 +21,16 @@
 	enum PipeMaterialBufferType
 	{
 		PMT__FIRST,
-		PMT_BYTES, // uint8_t[]
-		PMT_FRAME, // MB_Frame*
-		PMT_PM_LIST,
+		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; // #todo MaterialBuffer merge into there
-	uint8_t* buffer;//#todo void*
+	PipeMaterialBufferType type;
+	void* buffer;
 	size_t buffSize;
 	PipeLineElem* former;
 	pm_deleter_func deleter;
@@ -65,6 +67,8 @@
 //    gain --> [pay --> pm.deleter --> gain -->] [pay --> pm.deleter --> gain -->] ... --> pay --> pm.deleter
 class PipeLine
 {
+	friend class PipeDebugger;
+
 public:
 	PipeLine();
 	
@@ -72,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
@@ -83,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