From a88698ced8bcd58f0f1918b10380bc66b0bfcbbc Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期五, 30 十二月 2016 18:32:15 +0800 Subject: [PATCH] add pl_scale pl_fork --- RtspFace/PipeLine.h | 28 ++++++++++++++++------------ 1 files changed, 16 insertions(+), 12 deletions(-) diff --git a/RtspFace/PipeLine.h b/RtspFace/PipeLine.h index 2a59df7..79e1984 100644 --- a/RtspFace/PipeLine.h +++ b/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 -- Gitblit v1.8.0