diff --git a/design/codec_hdi_refactor/codec_hdi_refactor-chw.md b/design/codec_hdi_refactor/codec_hdi_refactor-chw.md index e3cc133cab727a2344839266a158ed82d8a8dca1..f7e64ce478c3c491b7fc936cf3b13a0250a9228d 100644 --- a/design/codec_hdi_refactor/codec_hdi_refactor-chw.md +++ b/design/codec_hdi_refactor/codec_hdi_refactor-chw.md @@ -23,27 +23,25 @@ HdiAdapter -> Hdi:所有buffer向下传递 HdiAdapter -> Hdi:等待打开端口事件完成 ``` -## 重构类图终版 +## 重构类图 ``` plantuml 'plugin CodecAdapterPlugin -up-|> CodecPlugin CodecAdapter -up-o CodecAdapterPlugin HdiCodecAdapter -up-|> CodecAdapter +'manager +CodecManager -left-o CodecFactory +HdiCodecManager -up-o CodecManager +OmxCodecManager -up-o CodecManager 'adapter -CodecAdapter o-right- CodecBufferPool +HdiCodecAdapter o-right- CodecBufferPool CodecBufferPool o-right- CodecBuffer -CodecPort -right-o CodecAdapter -CodecCmdExecutor -right-o CodecAdapter -'cmdExecutor -DecodeCmdExecutor -up-|> CodecCmdExecutor -EncodeCmdExecutor -up-|> CodecCmdExecutor -'codecPort -CodecPortIn -up-|> CodecPort -CodecPortOut -up-|> CodecPort +CodecPort -right-o HdiCodecAdapter +CodecCmdExecutor -right-o HdiCodecAdapter 'component factory HdiCodecFactory -up-|> CodecFactory OmxCodecFactory -up-|> CodecFactory -CodecAdapter o-right- CodecFactory +CodecAdapterPlugin o-right- CodecFactory interface CodecPlugin { @@ -64,21 +62,60 @@ interface CodecPlugin { } class CodecAdapterPlugin { - #shared_ptr adapter_; - +Status RegisterOneCodecPackage(const +std::shared_ptr& reg, const std::string& packageName); - +void UnRegisterOneCodecPackage(const std::string& packageName); + //shared_ptr g_codecFactory_; + //shared_ptr g_codecManager_; + -shared_ptr codecAdapter_; + //Status RegisterOneCodecPackage(const std::shared_ptr& reg, const std::string& packageName); + //void UnRegisterOneCodecPackage(const std::string& packageName); + +Status Init() override; + +Status Deinit() override; + +Status Prepare() override; + +Status Reset() override; + +Status Start() override; + +Status Stop() override; + +Status GetParameter(Plugin::Tag tag, Plugin::ValueType& value) override; + +Status SetParameter(Plugin::Tag tag, const Plugin::ValueType& value) override; + +shared_ptr GetAllocator() override; + +Status QueueInputBuffer(const shared_ptr& inputBuffer, int32_t timeoutMs) override; + +Status QueueOutputBuffer(const shared_ptr& outputBuffer, int32_t timeoutMs) override; + +Status Flush() override; + +Status SetCallback(Callback* cb) override; + +Status SetDataCallback(DataCallback* dataCallback) override; } -class CodecAdapter { - -struct CodecComponentType* codecComp_ {nullptr}; - -struct CodecCallbackType* codecCallback_ {nullptr}; - -shared_ptr inBufPool_; - -shared_ptr outBufPool_; - -shared_ptr codecPortIn_; - -shared_ptr codecPortOut_; - -shared_ptr cmdExecutor_; - -shared_ptr codecFactory_; - +CodecAdapter(); +Abstract CodecManager { + +virtual ~CodecManager() = default; + +virtual int32_t CreateComponent(Plugin::Any &component, uint32_t &id, std::string name, Plugin::Any &appData, Plugin::Any &callbacks) = 0; + +virtual int32_t DestroyComponent(Plugin::Any &component, uint32_t id) = 0; + +virtual Status RegisterCodecPlugins(const std::shared_ptr& reg) = 0; + +virtual Status UnRegisterCodecPlugins() = 0; +} + +class HdiCodecManager { + +HdiCodecManager(); + +~HdiCodecManager(); + +int32_t CreateComponent(Plugin::Any& component, uint32_t& id, std::string name, Plugin::Any& appData, Plugin::Any& callbacks) override; + +int32_t DestroyComponent(Plugin::Any& component, uint32_t id) override; + +Status RegisterCodecPlugins(const std::shared_ptr& reg) override; + +Status UnRegisterCodecPlugins() override; + -void Init(); + -void Reset(); + -void AddHdiCap(const CodecCompCapability& hdiCap); + -void InitCaps(); + -static std::vector GetCodecFormats-(const CodecVideoPortCap& port); + -static std::string GetCodecMime(const AvCodecRole& role); + -stdtic PluginType HdiCodecManager::GetCodecType(const CodecType& hdiType); + -CodecComponentManager* mgr_ = nullptr; + -std::vector codecCapabilitys_; + -std::map handleMap_; +} + +class OmxCodecManager { + +} + +Abstract CodecAdapter { + +CodecAdapter(string componentName); +Status Init(); +Status Deinit(); +Status Prepare(); @@ -92,19 +129,30 @@ class CodecAdapter { +Status QueueOutputBuffer(const std::shared_ptr& outputBuffers); +Status SetCallback(Callback* cb); +Status SetDataCallback(DataCallback* dataCallback); + + #void NotifyInputBufferDone(const std::shared_ptr& input); + #void NotifyOutputBufferDone(const std::shared_ptr& output); +} + +class HdiCodecAdapter { + +HdiCodecAdapter(string componentName); + +SetCodecManager(shared_ptr codecManager); + -struct CodecComponentType* codecComp_ {nullptr}; + -struct CodecCallbackType* codecCallback_ {nullptr}; + -shared_ptr inBufPool_; + -shared_ptr outBufPool_; + -shared_ptr codecPortIn_; + -shared_ptr codecPortOut_; + -shared_ptr cmdExecutor_; +Status GetComponentVersion(struct CompVerInfo& verInfo); -Status int32_t EventHandler(CodecCallbackType* self, OMX_EVENTTYPE event, EventInfo* info); -Status int32_t EmptyBufferDone(CodecCallbackType* self, int64_t appData, const OmxCodecBuffer* buffer); -Status int32_t FillBufferDone(CodecCallbackType* self, int64_t appData, const OmxCodecBuffer* buffer); - -void NotifyInputBufferDone(const std::shared_ptr& input); - -void NotifyOutputBufferDone(const std::shared_ptr& output); } class CodecBufferPool { - -shared_ptr InBufMap_; - -shared_ptr OutBufMap_; - -BlockingQueue freeInBufferId_; - -BlockingQueue freeOutBufferId_; + -shared_ptr BufMap_; + -BlockingQueue freeBufferId_; +Status ConfigOutPortBufType(); +Status AllocBuffer(shared_ptr& buffer); +Status FreeBuffer(); @@ -115,8 +163,7 @@ class CodecBuffer { -shared_ptr sharedMem_; -BufferHandle* bufferHandle_; +CodecBuffer(shared_ptr); - +InitBuffer(uint32_t CodecBufferType); - +DeinitBuffer(); + -InitBuffer(uint32_t CodecBufferType); } abstract CodecPort { @@ -129,15 +176,7 @@ abstract CodecPort { +status Enable(); } -class CodecPortIn { - Status ConfigVideoFormat(); -} - -class CodecPortOut { - Status ConfigBufType(); -} - -abstract CodecCmdExecutor { +Class CodecCmdExecutor { -struct CodecComponentType* codecComp_ {nullptr}; -OSAL::Mutex mutex_; -OSAL::ConditionVariable cond_; @@ -155,17 +194,19 @@ abstract CodecCmdExecutor { } abstract CodecFactory { - +virtual shrared_ptr CreateHdiComponent() = 0; - +virtual CreateOmxComponent() = 0; + +CodecFactory(); + +virtual shared_ptr GetCodecManager() = 0; + +virtual shared_ptr GetCodecAdapter(string componentName) = 0; } class HdiCodecFactory { - -CodecComponentManager* compManager_ {nullptr}; - +shrared_ptr CreateHdiComponent() override; + +shared_ptr GetCodecManager() override; + +shared_ptr GetCodecAdapter(string componentName) override; } class OmxCodecFactory { - +CreateOmxComponent() override; + +shared_ptr GetCodecManager() override; + +shared_ptr GetCodecAdapter(string componentName) override; } ```