From d4109b2cef809daba0f95f244029456613383f01 Mon Sep 17 00:00:00 2001 From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674> Date: 星期五, 06 一月 2017 11:31:42 +0800 Subject: [PATCH] add pm list test --- RtspFace/PL_Fork.cpp | 151 +++++++++++++++++++++++++++++++++++++------------- 1 files changed, 112 insertions(+), 39 deletions(-) diff --git a/RtspFace/PL_Fork.cpp b/RtspFace/PL_Fork.cpp index 9bf79c3..627a857 100644 --- a/RtspFace/PL_Fork.cpp +++ b/RtspFace/PL_Fork.cpp @@ -1,49 +1,122 @@ -#ifndef _PL_FORK_H_ -#define _PL_FORK_H_ +#include "PL_Fork.h" +#include "MaterialBuffer.h" +#include "logger.h" -#include "PipeLine.h" - -struct PL_Fork_Config +struct PL_Fork_Internal { + //uint8_t buffer[1920*1080*4]; + //size_t buffSize; + //size_t buffSizeMax; + PipeMaterial lastPm; + + MB_Frame lastFrame; + + PL_Fork_Config config; + + bool payError; + + PL_Fork_Internal() : + //buffSize(0), buffSizeMax(sizeof(buffer)), + lastPm(), lastFrame(), config(), payError(true) + { + } + + ~PL_Fork_Internal() + { + } + + void reset() + { + //buffSize = 0; + payError = true; + + PipeMaterial _lastPm; + lastPm = _lastPm; + + MB_Frame _lastFrame; + lastFrame = _lastFrame; + + PL_Fork_Config _config; + config = _config; + } }; -class PL_Fork : public PipeLineElem +PipeLineElem* create_PL_Fork() { -public: - enum ForkBy + return new PL_Fork; +} + +PL_Fork::PL_Fork() : internal(new PL_Fork_Internal), pl(nullptr) +{ +} + +PL_Fork::~PL_Fork() +{ + delete (PL_Fork_Internal*)internal; + internal= nullptr; +} + +bool PL_Fork::init(void* args) +{ + PL_Fork_Internal* in = (PL_Fork_Internal*)internal; + in->reset(); + + if (args == nullptr) { - FB_NONE, - FB_TURNS, - FB_RANDOM, - FB_PM_TYPE, - FB_MB_TYPE, - FB_BREAK_LIST - }; + LOG_ERROR << "Config should give"; + return false; + } + + PL_Fork_Config* config = (PL_Fork_Config*)args; + in->config = *config; + + return true; +} + +void PL_Fork::finit() +{ + PL_Fork_Internal* in = (PL_Fork_Internal*)internal; + +} + +bool PL_Fork::pay(const PipeMaterial& pm) +{ + PL_Fork_Internal* in = (PL_Fork_Internal*)internal; + PL_Fork_Config& config(in->config); + + in->lastPm = pm; - enum ForkSync + return false; +} + +bool PL_Fork::gain(PipeMaterial& pm) +{ + PL_Fork_Internal* in = (PL_Fork_Internal*)internal; + + return false; +} + +void PL_Fork::attach_pipe_line(PipeLine* pl) +{ + PL_Fork_Internal* in = (PL_Fork_Internal*)internal; + + if (this->pl != nullptr) { - FS_NONE, - FS_SEQUENCE, - FS_PARALLEL, - FS_MAIN_PL_FIRST, - FS_MAIN_PL_LAST, - }; - -public: - PL_Fork(); - virtual ~PL_Fork(); - - virtual bool init(void* args); - virtual void finit(); - - virtual bool pay(const PipeMaterial& pm); - virtual bool gain(PipeMaterial& pm); + LOG_ERROR << "Has areadly attached pipe line"; + return; + } -private: - void* internal; -}; - -PipeLineElem* create_PL_Paint(); - -#endif + if (pl == nullptr) + { + LOG_NOTICE << "Detach pipe line"; + this->pl->remove_elem(this); + this->pl = nullptr; + return; + } + + this->pl = pl; + PipeLine* mainPipeLineManager = this->manager; + pl->push_front_elem(this); + this->manager = mainPipeLineManager; +} -- Gitblit v1.8.0