1fa7767c5Sopenharmony_ci/* 2fa7767c5Sopenharmony_ci * Copyright (c) 2021-2021 Huawei Device Co., Ltd. 3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License. 5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at 6fa7767c5Sopenharmony_ci * 7fa7767c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fa7767c5Sopenharmony_ci * 9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and 13fa7767c5Sopenharmony_ci * limitations under the License. 14fa7767c5Sopenharmony_ci */ 15fa7767c5Sopenharmony_ci 16fa7767c5Sopenharmony_ci#ifndef HISTREAMER_PLUGIN_INTF_CODEC_PLUGIN_H 17fa7767c5Sopenharmony_ci#define HISTREAMER_PLUGIN_INTF_CODEC_PLUGIN_H 18fa7767c5Sopenharmony_ci 19fa7767c5Sopenharmony_ci#include <vector> 20fa7767c5Sopenharmony_ci#include "plugin/common/plugin_caps.h" 21fa7767c5Sopenharmony_ci#include "plugin/interface/plugin_base.h" 22fa7767c5Sopenharmony_ci#include "plugin/interface/plugin_definition.h" 23fa7767c5Sopenharmony_ci 24fa7767c5Sopenharmony_cinamespace OHOS { 25fa7767c5Sopenharmony_cinamespace Media { 26fa7767c5Sopenharmony_cinamespace Plugin { 27fa7767c5Sopenharmony_ci/** 28fa7767c5Sopenharmony_ci * @brief Plugin data callback interface. 29fa7767c5Sopenharmony_ci * 30fa7767c5Sopenharmony_ci * @since 1.0 31fa7767c5Sopenharmony_ci * @version 1.0 32fa7767c5Sopenharmony_ci */ 33fa7767c5Sopenharmony_cistruct DataCallback { 34fa7767c5Sopenharmony_ci virtual ~DataCallback() = default; 35fa7767c5Sopenharmony_ci 36fa7767c5Sopenharmony_ci /** 37fa7767c5Sopenharmony_ci * @brief When the input buffer has been consumed inside the plugin. 38fa7767c5Sopenharmony_ci * 39fa7767c5Sopenharmony_ci * This function works with QueueInputBuffer to implement input data transmission. 40fa7767c5Sopenharmony_ci * 41fa7767c5Sopenharmony_ci * @param input Indicates the pointer to the input data. 42fa7767c5Sopenharmony_ci */ 43fa7767c5Sopenharmony_ci virtual void OnInputBufferDone(const std::shared_ptr<Buffer>& input) = 0; 44fa7767c5Sopenharmony_ci 45fa7767c5Sopenharmony_ci /** 46fa7767c5Sopenharmony_ci * @brief When the out buffer has been produced inside the plugin. 47fa7767c5Sopenharmony_ci * 48fa7767c5Sopenharmony_ci * This function works with QueueOutputBuffer to implement out data transmission. 49fa7767c5Sopenharmony_ci * 50fa7767c5Sopenharmony_ci * @param output Indicates the pointer to the output data. 51fa7767c5Sopenharmony_ci */ 52fa7767c5Sopenharmony_ci virtual void OnOutputBufferDone(const std::shared_ptr<Buffer>& output) = 0; 53fa7767c5Sopenharmony_ci}; 54fa7767c5Sopenharmony_ci 55fa7767c5Sopenharmony_ci/** 56fa7767c5Sopenharmony_ci * @brief Codec Plugin Interface. 57fa7767c5Sopenharmony_ci * 58fa7767c5Sopenharmony_ci * Used for audio and video encoding and decoding. 59fa7767c5Sopenharmony_ci * 60fa7767c5Sopenharmony_ci * @since 1.0 61fa7767c5Sopenharmony_ci * @version 1.0 62fa7767c5Sopenharmony_ci */ 63fa7767c5Sopenharmony_cistruct CodecPlugin : public PluginBase { 64fa7767c5Sopenharmony_ci /// constructor 65fa7767c5Sopenharmony_ci explicit CodecPlugin(std::string name): PluginBase(std::move(name)) {} 66fa7767c5Sopenharmony_ci 67fa7767c5Sopenharmony_ci /** 68fa7767c5Sopenharmony_ci * @brief Queues input data 69fa7767c5Sopenharmony_ci * 70fa7767c5Sopenharmony_ci * This function works with DataCallback::OnInputBufferDone to implement input data transmission. 71fa7767c5Sopenharmony_ci * 72fa7767c5Sopenharmony_ci * The function is valid only in the RUNNING state. 73fa7767c5Sopenharmony_ci * 74fa7767c5Sopenharmony_ci * @param inputBuffer Indicates the pointer to the input data. 75fa7767c5Sopenharmony_ci * @param timeoutMs Indicates the timeout duration. 76fa7767c5Sopenharmony_ci * @return Execution status return 77fa7767c5Sopenharmony_ci * @retval OK: Plugin QueueInputBuffer succeeded. 78fa7767c5Sopenharmony_ci * @retval ERROR_INVALID_DATA: The input buffer is invalid. 79fa7767c5Sopenharmony_ci * @retval ERROR_TIMED_OUT: Operation timeout. 80fa7767c5Sopenharmony_ci */ 81fa7767c5Sopenharmony_ci virtual Status QueueInputBuffer(const std::shared_ptr<Buffer>& inputBuffer, int32_t timeoutMs) = 0; 82fa7767c5Sopenharmony_ci 83fa7767c5Sopenharmony_ci /** 84fa7767c5Sopenharmony_ci * @brief Queues output data 85fa7767c5Sopenharmony_ci * 86fa7767c5Sopenharmony_ci * This function works with DataCallback::OnOutputBufferDone to implement output data transmission. 87fa7767c5Sopenharmony_ci * 88fa7767c5Sopenharmony_ci * The function is valid only in the RUNNING state. 89fa7767c5Sopenharmony_ci * 90fa7767c5Sopenharmony_ci * @param outputBuffers Indicates the pointer to the output data. 91fa7767c5Sopenharmony_ci * @param timeoutMs Indicates the timeout duration. 92fa7767c5Sopenharmony_ci * @return Execution status return 93fa7767c5Sopenharmony_ci * @retval OK: Plugin QueueOutputBuffer succeeded. 94fa7767c5Sopenharmony_ci * @retval ERROR_INVALID_DATA: The output buffer is invalid. 95fa7767c5Sopenharmony_ci * @retval ERROR_TIMED_OUT: Operation timeout. 96fa7767c5Sopenharmony_ci */ 97fa7767c5Sopenharmony_ci virtual Status QueueOutputBuffer(const std::shared_ptr<Buffer>& outputBuffers, int32_t timeoutMs) = 0; 98fa7767c5Sopenharmony_ci 99fa7767c5Sopenharmony_ci /** 100fa7767c5Sopenharmony_ci * @brief Flushes data in the audio buffer. 101fa7767c5Sopenharmony_ci * 102fa7767c5Sopenharmony_ci * The function is valid only in after RUNNING state. 103fa7767c5Sopenharmony_ci * 104fa7767c5Sopenharmony_ci * @return Execution status return 105fa7767c5Sopenharmony_ci * @retval OK: Plugin Flush succeeded. 106fa7767c5Sopenharmony_ci */ 107fa7767c5Sopenharmony_ci virtual Status Flush() = 0; 108fa7767c5Sopenharmony_ci 109fa7767c5Sopenharmony_ci /** 110fa7767c5Sopenharmony_ci * @brief Sets the plugin callback data to notify the plugin user. 111fa7767c5Sopenharmony_ci * 112fa7767c5Sopenharmony_ci * This function can be called in any state except DESTROYED and INVALID. 113fa7767c5Sopenharmony_ci * 114fa7767c5Sopenharmony_ci * @param cb Data callback, NULL callback listening is canceled. 115fa7767c5Sopenharmony_ci * @return Execution status return 116fa7767c5Sopenharmony_ci * @retval OK: Plugin SetDataCallback succeeded. 117fa7767c5Sopenharmony_ci */ 118fa7767c5Sopenharmony_ci virtual Status SetDataCallback(DataCallback* dataCallback) = 0; 119fa7767c5Sopenharmony_ci}; 120fa7767c5Sopenharmony_ci 121fa7767c5Sopenharmony_ci/// Codec plugin api major number. 122fa7767c5Sopenharmony_ci#define CODEC_API_VERSION_MAJOR (1) 123fa7767c5Sopenharmony_ci 124fa7767c5Sopenharmony_ci/// Codec plugin api minor number 125fa7767c5Sopenharmony_ci#define CODEC_API_VERSION_MINOR (0) 126fa7767c5Sopenharmony_ci 127fa7767c5Sopenharmony_ci/// Codec plugin version 128fa7767c5Sopenharmony_ci#define CODEC_API_VERSION MAKE_VERSION(CODEC_API_VERSION_MAJOR, CODEC_API_VERSION_MINOR) 129fa7767c5Sopenharmony_ci 130fa7767c5Sopenharmony_ci/** 131fa7767c5Sopenharmony_ci * @brief Describes the codec plugin information. 132fa7767c5Sopenharmony_ci * 133fa7767c5Sopenharmony_ci * @since 1.0 134fa7767c5Sopenharmony_ci * @version 1.0 135fa7767c5Sopenharmony_ci */ 136fa7767c5Sopenharmony_cistruct CodecPluginDef : public PluginDefBase { 137fa7767c5Sopenharmony_ci CodecMode codecMode {CodecMode::SOFTWARE}; 138fa7767c5Sopenharmony_ci CapabilitySet inCaps {}; ///< Plug-in input capability, For details, @see Capability. 139fa7767c5Sopenharmony_ci CapabilitySet outCaps {}; ///< Plug-in output capability, For details, @see Capability. 140fa7767c5Sopenharmony_ci PluginCreatorFunc<CodecPlugin> creator {nullptr}; ///< Codec plugin create function. 141fa7767c5Sopenharmony_ci CodecPluginDef() 142fa7767c5Sopenharmony_ci { 143fa7767c5Sopenharmony_ci apiVersion = CODEC_API_VERSION; ///< Codec plugin version 144fa7767c5Sopenharmony_ci } 145fa7767c5Sopenharmony_ci}; 146fa7767c5Sopenharmony_ci} // namespace Plugin 147fa7767c5Sopenharmony_ci} // namespace Media 148fa7767c5Sopenharmony_ci} // namespace OHOS 149fa7767c5Sopenharmony_ci#endif // HISTREAMER_PLUGIN_INTF_CODEC_PLUGIN_H 150