From 4ef430e946e717d72e923c4708a9120f94d55dbd Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 28 十二月 2016 09:35:14 +0800
Subject: [PATCH] test h264 encoder

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

diff --git a/RtspFace/PipeLine.cpp b/RtspFace/PipeLine.cpp
index 16f5ee1..8b1ffea 100644
--- a/RtspFace/PipeLine.cpp
+++ b/RtspFace/PipeLine.cpp
@@ -1,7 +1,18 @@
 #include "PipeLine.h"
 
-PipeMaterial::PipeMaterial() : buffer(nullptr), buffSize(0), former(nullptr)
+PipeMaterial::PipeMaterial() : 
+	type(PMT__FIRST), buffer(nullptr), buffSize(0), 
+	former(nullptr), deleter(nullptr), args(nullptr)
 {
+}
+
+void PipeMaterial::exec_deleter()
+{
+	if (deleter != nullptr)
+	{
+		deleter(this);
+		deleter = nullptr;
+	}
 }
 
 PipeLine::PipeLine() : global_params_map(), elem_create_func_map(), elems()
@@ -81,12 +92,16 @@
 	if (elems.size() == 1)
 	{
 		elem_begin->gain(*pm);
+		pm->exec_deleter();
 		return elem_begin;
 	}
 	else if (elems.size() == 2)
 	{
 		if (elem_begin->gain(*pm))
+		{
 			elem_last->pay(*pm);
+			pm->exec_deleter();
+		}
 		else
 			return elem_begin;
 		return elem_last;
@@ -103,16 +118,22 @@
 		while (elem_begin != elem_last)
 		{
 			if (lastRet && (lastRet = elem_begin->pay(*pm)) )
+			{
+				pm->exec_deleter();
 				lastRet = elem_begin->gain(*pm);
+			}
 			else
-				return elem_begin;
+				return elem_begin;//#todo this may memory leakage in pm
 			
 			++iter;
 			elem_begin = *iter;
 		}
 	
 		if (lastRet)
+		{
 			elem_last->pay(*pm);
+			pm->exec_deleter();
+		}
 		return elem_last;
 	}
 	

--
Gitblit v1.8.0