From 1de966efc704dd5d18e3fd63325a1f82948a3d82 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期三, 19 四月 2017 15:30:50 +0800
Subject: [PATCH]
---
RtspFace/PipeLine.h | 30 +++++++++++++++++++++---------
1 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/RtspFace/PipeLine.h b/RtspFace/PipeLine.h
index e690be3..5c3e03c 100644
--- a/RtspFace/PipeLine.h
+++ b/RtspFace/PipeLine.h
@@ -21,14 +21,16 @@
enum PipeMaterialBufferType
{
PMT__FIRST,
- PMT_BYTES, // uint8_t[]
- PMT_FRAME, // MB_Frame*
- PMT_PM_LIST,
+ 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; // #todo MaterialBuffer merge into there
- uint8_t* buffer;//#todo void*
+ PipeMaterialBufferType type;
+ void* buffer;
size_t buffSize;
PipeLineElem* former;
pm_deleter_func deleter;
@@ -65,6 +67,8 @@
// gain --> [pay --> pm.deleter --> gain -->] [pay --> pm.deleter --> gain -->] ... --> pay --> pm.deleter
class PipeLine
{
+ friend class PipeDebugger;
+
public:
PipeLine();
@@ -72,10 +76,17 @@
~PipeLine();
bool register_elem_creator(const std::string& type, elem_create_func_t func);
+ static bool register_global_elem_creator(const std::string& type, elem_create_func_t func);
+
void push_elem(PipeLineElem* elem);
PipeLineElem* push_elem(const std::string& type);
+ void push_front_elem(PipeLineElem* elem);
+ bool remove_elem(PipeLineElem* elem);
+
+ bool check_pipe_complete(PipeLineElem* lastRetElem) const;
// 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
@@ -83,18 +94,19 @@
void pipe_notify(PipeLineElem*);
void pipe_stop();
- void set_global_param(const std::string& name, const std::string& value);
- std::string get_global_param(const std::string& name) const;
+ void set_param(const std::string& name, const std::string& value);
+ std::string get_param(const std::string& name) const;
private:
typedef std::map<const std::string, elem_create_func_t> elem_create_func_map_t;
elem_create_func_map_t elem_create_func_map;
+ static elem_create_func_map_t global_elem_create_func_map;
typedef std::vector<PipeLineElem*> elem_vec_t;
elem_vec_t elems;
- typedef std::map<const std::string, std::string> global_params_map_t;
- global_params_map_t global_params_map;
+ typedef std::map<const std::string, std::string> params_map_t;
+ params_map_t params_map;
};
#endif
--
Gitblit v1.8.0