1/* 2 * Copyright (c) 2023-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#ifndef PLUGINS_CODEC_PLUGIN_H 17#define PLUGINS_CODEC_PLUGIN_H 18 19#include <vector> 20#include <memory> 21#include "meta/media_types.h" 22#include "buffer/avbuffer.h" 23#include "plugin/plugin_base.h" 24#include "plugin/plugin_event.h" 25#include "plugin/plugin_definition.h" 26#include "meta/meta.h" 27#include "common/status.h" 28 29namespace OHOS { 30namespace Media { 31namespace Plugins { 32class DataCallback { 33public: 34 virtual ~DataCallback() = default; 35 36 virtual void OnInputBufferDone(const std::shared_ptr<AVBuffer> &inputBuffer) = 0; 37 38 virtual void OnOutputBufferDone(const std::shared_ptr<AVBuffer> &outputBuffer) = 0; 39 40 virtual void OnEvent(const std::shared_ptr<Plugins::PluginEvent> event) = 0; 41}; 42 43class CodecPlugin : public Plugins::PluginBase { 44public: 45 explicit CodecPlugin(std::string name) : PluginBase(std::move(name)) {} 46 virtual Status GetInputBuffers(std::vector<std::shared_ptr<AVBuffer>> &inputBuffers) = 0; 47 48 virtual Status GetOutputBuffers(std::vector<std::shared_ptr<AVBuffer>> &outputBuffers) = 0; 49 50 virtual Status QueueInputBuffer(const std::shared_ptr<AVBuffer> &inputBuffer) = 0; 51 52 virtual Status QueueOutputBuffer(std::shared_ptr<AVBuffer> &outputBuffer) = 0; 53 54 virtual Status SetParameter(const std::shared_ptr<Meta> ¶meter) = 0; 55 56 virtual Status GetParameter(std::shared_ptr<Meta> ¶meter) = 0; 57 58 virtual Status Start() = 0; 59 60 virtual Status Stop() = 0; 61 62 virtual Status Flush() = 0; 63 64 virtual Status Reset() = 0; 65 66 virtual Status Release() = 0; 67 68 virtual Status SetDataCallback(DataCallback *dataCallback) = 0; 69}; 70 71/// Codec plugin api major number. 72#define CODEC_API_VERSION_MAJOR (1) 73 74/// Codec plugin api minor number 75#define CODEC_API_VERSION_MINOR (0) 76 77/// Codec plugin version 78#define CODEC_API_VERSION MAKE_VERSION(CODEC_API_VERSION_MAJOR, CODEC_API_VERSION_MINOR) 79 80/** 81 * @brief Describes the codec plugin information. 82 * 83 * @since 1.0 84 * @version 1.0 85 */ 86struct CodecPluginDef : public PluginDefBase { 87 CodecPluginDef() 88 { 89 apiVersion = CODEC_API_VERSION; ///< Codec plugin version 90 pluginType = PluginType::AUDIO_DECODER; ///< Plugin type, MUST be AUDIO_DECODER. 91 } 92}; 93} // namespace Plugins 94} // namespace Media 95} // namespace OHOS 96#endif // PLUGINS_MEDIA_CODEC_PLUGIN_H 97