1/* 2 * Copyright (C) 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 AVCODEC_MUXER_PLUGIN_H 17#define AVCODEC_MUXER_PLUGIN_H 18 19#include "plugin/plugin_definition.h" 20#include "data_sink.h" 21#include "meta/meta.h" 22#include "buffer/avbuffer.h" 23 24namespace OHOS { 25namespace Media { 26namespace Plugins { 27class MuxerPlugin : public PluginBase { 28public: 29 explicit MuxerPlugin(std::string &&name) : PluginBase(std::move(name)) {} 30 virtual Status SetDataSink(const std::shared_ptr<DataSink> &dataSink) = 0; 31 virtual Status SetParameter(const std::shared_ptr<Meta> ¶m) = 0; 32 virtual Status SetUserMeta(const std::shared_ptr<Meta> &userMeta) { return Status::ERROR_INVALID_PARAMETER; } 33 virtual Status AddTrack(int32_t &trackIndex, const std::shared_ptr<Meta> &trackDesc) = 0; 34 virtual Status Start() = 0; 35 virtual Status WriteSample(uint32_t trackIndex, const std::shared_ptr<AVBuffer> &sample) = 0; 36 virtual Status Stop() = 0; 37 virtual Status Reset() = 0; 38}; 39 40/// Muxer plugin api major number. 41#define MUXER_API_VERSION_MAJOR (1) 42 43/// Muxer plugin api minor number 44#define MUXER_API_VERSION_MINOR (0) 45 46/// Muxer plugin version 47#define MUXER_API_VERSION MAKE_VERSION(MUXER_API_VERSION_MAJOR, MUXER_API_VERSION_MINOR) 48 49 50struct MuxerPluginDef : public PluginDefBase { 51 MuxerPluginDef() : PluginDefBase() 52 { 53 apiVersion = MUXER_API_VERSION; ///< Muxer plugin version. 54 pluginType = PluginType::MUXER; ///< Plugin type, MUST be MUXER. 55 } 56}; 57} // namespace Plugins 58} // namespace Media 59} // namespace OHOS 60#endif // AVCODEC_MUXER_PLUGIN_H