From 5f5e870de69efe56d571a2c93362942af5bb49a5 Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 20 七月 2017 14:30:55 +0800
Subject: [PATCH] restart

---
 RtspFace/PipeLine.cpp |   74 ++++++++++++++++++++++++------------
 1 files changed, 49 insertions(+), 25 deletions(-)

diff --git a/RtspFace/PipeLine.cpp b/RtspFace/PipeLine.cpp
index 4f25318..aa22039 100644
--- a/RtspFace/PipeLine.cpp
+++ b/RtspFace/PipeLine.cpp
@@ -65,24 +65,24 @@
 		for (size_t i = 0; i < buffSize; i++, pm++)
 		{
 			if (selectPmType == pm->type || selectPmType == PipeMaterial::PMT__FIRST || selectPmType == PipeMaterial::PMT__LAST)
-            {
-                if (pm->type == PipeMaterial::PMT_FRAME)
-                {
-                    MB_Frame *mbf = (MB_Frame *) pm->buffer;
-                    if (selectMbfType == mbf->type || selectMbfType == MB_Frame::MBFT__FIRST || selectMbfType == MB_Frame::MBFT__LAST)
+			{
+				if (pm->type == PipeMaterial::PMT_FRAME)
+				{
+					MB_Frame *mbf = (MB_Frame *) pm->buffer;
+					if (selectMbfType == mbf->type || selectMbfType == MB_Frame::MBFT__FIRST || selectMbfType == MB_Frame::MBFT__LAST)
 					{
 						called++;
-                        if (!breaker(pm, args))
-                            break;
+						if (!breaker(pm, args))
+							break;
 					}
-                }
-                else
-                {
+				}
+				else
+				{
 					called++;
-                    if (!breaker(pm, args))
-                        break;
-                }
-            }
+					if (!breaker(pm, args))
+						break;
+				}
+			}
 		}
 	}
 	break;
@@ -157,7 +157,6 @@
 	return true;
 }
 
-
 //static
 bool PipeLine::register_global_elem_creator(const std::string& type, elem_create_func_t func)
 {
@@ -190,6 +189,11 @@
 	}
 }
 
+PipeLineElem* PipeLine::at(int idx)
+{
+	return elems[idx];
+}
+
 bool PipeLine::remove_elem(PipeLineElem* elem)
 {
 	if(elem != nullptr)
@@ -205,6 +209,26 @@
 	}
 	
 	return false;
+}
+
+void PipeLine::finit(elem_destory_func_t elem_destory_func)
+{
+	while (!elems.empty())
+	{
+		PipeLineElem* elem = elems.back();
+
+		if (elem->manager == this)
+		{
+			elem->finit();
+			if (elem_destory_func != nullptr)
+				elem_destory_func(elem);
+		}
+
+		elems.pop_back();
+	}
+
+	elem_create_func_map.clear();
+	params_map.clear();
 }
 
 bool PipeLine::check_pipe_complete(PipeLineElem* lastRetElem) const
@@ -250,7 +274,7 @@
 	if (pm == nullptr)
 		pm = new (pmPlacement) PipeMaterial;
 	
-    bool lastRet = true;
+	bool lastRet = true;
 
 	if (elems.size() == 1)
 	{
@@ -294,8 +318,8 @@
 	
 		if (lastRet)
 			elem_last->pay(*pm);
-        pm->exec_deleter(lastRet);
-        return elem_last;
+		pm->exec_deleter(lastRet);
+		return elem_last;
 	}
 	
 	return nullptr;
@@ -328,18 +352,18 @@
 PipeLineElemTimingDebugger::PipeLineElemTimingDebugger(const PipeLineElem* _elem) : 
 	elem(_elem), beginTime(0)
 {
-    struct timeval _beginTime;
-    gettimeofday(&_beginTime, NULL);
-    beginTime = 1000000 * _beginTime.tv_sec + _beginTime.tv_usec;
+	struct timeval _beginTime;
+	gettimeofday(&_beginTime, NULL);
+	beginTime = 1000000 * _beginTime.tv_sec + _beginTime.tv_usec;
 }
 
 PipeLineElemTimingDebugger::~PipeLineElemTimingDebugger()
 {
-    struct timeval _endTime;
-    gettimeofday(&_endTime, NULL);
-    const uint64_t endTime = 1000000 * _endTime.tv_sec + _endTime.tv_usec;
+	struct timeval _endTime;
+	gettimeofday(&_endTime, NULL);
+	const uint64_t endTime = 1000000 * _endTime.tv_sec + _endTime.tv_usec;
 
-    LOGP(WARN, "elem=%s@%llu, dura=%llu(us)", typeid(elem).name(), uint64_t(elem), uint64_t(endTime - beginTime));
+	LOGP(WARN, "elem=%s@%llu, dura=%llu(us)", typeid(elem).name(), uint64_t(elem), uint64_t(endTime - beginTime));
 }
 #else
 PipeLineElemTimingDebugger::PipeLineElemTimingDebugger(const PipeLineElem* _elem) { }

--
Gitblit v1.8.0