houxiao
2016-12-30 a88698ced8bcd58f0f1918b10380bc66b0bfcbbc
RtspFace/PipeLine.h
@@ -12,24 +12,25 @@
class PipeLineElem;
class PipeLine;
enum PipeMaterialBufferType
{
   PMT__FIRST,
   PMT_BYTES,
   PMT_TEXT,
   PMT_IMAGE,
   PMT_PM_LIST,
   PMT_PTR_AVFRAME,
   PMT__LAST
};
struct PipeMaterial;
typedef void (* pm_deleter_func)(PipeMaterial* pm);
// PipeMaterial instance should be unref when pay() finished
struct PipeMaterial
{
   enum PipeMaterialBufferType
   {
      PMT__FIRST,
      PMT_NONE,     // buffer = nullptr, buffSize = 0
      PMT_BYTES,    // buffer = uint8_t[N], buffSize = N
      PMT_FRAME,    // buffer = MB_Frame*, buffSize = 0
      PMT_PM_LIST,  // buffer = PipeMaterial*[N], buffSize = N
      PMT_FRAME_LIST,  // buffer = MB_Frame*[N], buffSize = N
      PMT__LAST
   };
   PipeMaterialBufferType type;
   uint8_t* buffer;
   void* buffer;
   size_t buffSize;
   PipeLineElem* former;
   pm_deleter_func deleter;
@@ -66,6 +67,8 @@
//    gain --> [pay --> pm.deleter --> gain -->] [pay --> pm.deleter --> gain -->] ... --> pay --> pm.deleter
class PipeLine
{
   friend class PipeDebugger;
public:
   PipeLine();
   
@@ -77,6 +80,7 @@
   PipeLineElem* push_elem(const std::string& type);
   
   // do pipe sync. returns the element who returns false, or the last one.
   // if false return, the element should deal with pm, clean up.
   PipeLineElem* pipe(PipeMaterial* pm = nullptr);
   
   // do pipe async