From 5f5e870de69efe56d571a2c93362942af5bb49a5 Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期四, 20 七月 2017 14:30:55 +0800 Subject: [PATCH] restart --- RtspFace/PipeLine.cpp | 74 ++++++++++++++++++++++++------------ 1 files changed, 49 insertions(+), 25 deletions(-) diff --git a/RtspFace/PipeLine.cpp b/RtspFace/PipeLine.cpp index 4f25318..aa22039 100644 --- a/RtspFace/PipeLine.cpp +++ b/RtspFace/PipeLine.cpp @@ -65,24 +65,24 @@ for (size_t i = 0; i < buffSize; i++, pm++) { if (selectPmType == pm->type || selectPmType == PipeMaterial::PMT__FIRST || selectPmType == PipeMaterial::PMT__LAST) - { - if (pm->type == PipeMaterial::PMT_FRAME) - { - MB_Frame *mbf = (MB_Frame *) pm->buffer; - if (selectMbfType == mbf->type || selectMbfType == MB_Frame::MBFT__FIRST || selectMbfType == MB_Frame::MBFT__LAST) + { + if (pm->type == PipeMaterial::PMT_FRAME) + { + MB_Frame *mbf = (MB_Frame *) pm->buffer; + if (selectMbfType == mbf->type || selectMbfType == MB_Frame::MBFT__FIRST || selectMbfType == MB_Frame::MBFT__LAST) { called++; - if (!breaker(pm, args)) - break; + if (!breaker(pm, args)) + break; } - } - else - { + } + else + { called++; - if (!breaker(pm, args)) - break; - } - } + if (!breaker(pm, args)) + break; + } + } } } break; @@ -157,7 +157,6 @@ return true; } - //static bool PipeLine::register_global_elem_creator(const std::string& type, elem_create_func_t func) { @@ -190,6 +189,11 @@ } } +PipeLineElem* PipeLine::at(int idx) +{ + return elems[idx]; +} + bool PipeLine::remove_elem(PipeLineElem* elem) { if(elem != nullptr) @@ -205,6 +209,26 @@ } return false; +} + +void PipeLine::finit(elem_destory_func_t elem_destory_func) +{ + while (!elems.empty()) + { + PipeLineElem* elem = elems.back(); + + if (elem->manager == this) + { + elem->finit(); + if (elem_destory_func != nullptr) + elem_destory_func(elem); + } + + elems.pop_back(); + } + + elem_create_func_map.clear(); + params_map.clear(); } bool PipeLine::check_pipe_complete(PipeLineElem* lastRetElem) const @@ -250,7 +274,7 @@ if (pm == nullptr) pm = new (pmPlacement) PipeMaterial; - bool lastRet = true; + bool lastRet = true; if (elems.size() == 1) { @@ -294,8 +318,8 @@ if (lastRet) elem_last->pay(*pm); - pm->exec_deleter(lastRet); - return elem_last; + pm->exec_deleter(lastRet); + return elem_last; } return nullptr; @@ -328,18 +352,18 @@ PipeLineElemTimingDebugger::PipeLineElemTimingDebugger(const PipeLineElem* _elem) : elem(_elem), beginTime(0) { - struct timeval _beginTime; - gettimeofday(&_beginTime, NULL); - beginTime = 1000000 * _beginTime.tv_sec + _beginTime.tv_usec; + struct timeval _beginTime; + gettimeofday(&_beginTime, NULL); + beginTime = 1000000 * _beginTime.tv_sec + _beginTime.tv_usec; } PipeLineElemTimingDebugger::~PipeLineElemTimingDebugger() { - struct timeval _endTime; - gettimeofday(&_endTime, NULL); - const uint64_t endTime = 1000000 * _endTime.tv_sec + _endTime.tv_usec; + struct timeval _endTime; + gettimeofday(&_endTime, NULL); + const uint64_t endTime = 1000000 * _endTime.tv_sec + _endTime.tv_usec; - LOGP(WARN, "elem=%s@%llu, dura=%llu(us)", typeid(elem).name(), uint64_t(elem), uint64_t(endTime - beginTime)); + LOGP(WARN, "elem=%s@%llu, dura=%llu(us)", typeid(elem).name(), uint64_t(elem), uint64_t(endTime - beginTime)); } #else PipeLineElemTimingDebugger::PipeLineElemTimingDebugger(const PipeLineElem* _elem) { } -- Gitblit v1.8.0