houxiao
2016-12-22 f04b2e05a32f810ebe66b7b3a15f37b532ce2dc0
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;
   }