From 017b7eb736ccc53c52f81486be8196d7fafc3289 Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 28 十二月 2016 10:31:42 +0800
Subject: [PATCH] add MaterialBuffer
---
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