From f04b2e05a32f810ebe66b7b3a15f37b532ce2dc0 Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 22 十二月 2016 17:27:31 +0800
Subject: [PATCH] add pl emements

---
 RtspFace/PipeLine.cpp |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/RtspFace/PipeLine.cpp b/RtspFace/PipeLine.cpp
index 6f53b19..16f5ee1 100644
--- a/RtspFace/PipeLine.cpp
+++ b/RtspFace/PipeLine.cpp
@@ -77,7 +77,7 @@
 	uint8_t pmPlacement[sizeof(PipeMaterial)];
 	if (pm == nullptr)
 		pm = new (pmPlacement) PipeMaterial;
-	
+
 	if (elems.size() == 1)
 	{
 		elem_begin->gain(*pm);
@@ -85,24 +85,34 @@
 	}
 	else if (elems.size() == 2)
 	{
-		elem_begin->gain(*pm);
-		elem_last->pay(*pm);
+		if (elem_begin->gain(*pm))
+			elem_last->pay(*pm);
+		else
+			return elem_begin;
 		return elem_last;
 	}
 	else
 	{
-		elem_begin->gain(*pm);
+		if (!elem_begin->gain(*pm))
+			return elem_begin;
 		
+		bool lastRet = true;
 		elem_vec_t::iterator iter = elems.begin();
+		++iter;
+		elem_begin = *iter;
 		while (elem_begin != elem_last)
 		{
+			if (lastRet && (lastRet = elem_begin->pay(*pm)) )
+				lastRet = elem_begin->gain(*pm);
+			else
+				return elem_begin;
+			
 			++iter;
 			elem_begin = *iter;
-			elem_begin->pay(*pm);
-			elem_begin->gain(*pm);
 		}
 	
-		elem_last->pay(*pm);
+		if (lastRet)
+			elem_last->pay(*pm);
 		return elem_last;
 	}
 	

--
Gitblit v1.8.0