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