houxiao
2016-12-28 4ef430e946e717d72e923c4708a9120f94d55dbd
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;
   }