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 HISTREAMER_PLUGINS_INTF_PLUGIN_BASE_H 17 #define HISTREAMER_PLUGINS_INTF_PLUGIN_BASE_H 18 19 #include <memory> 20 #include "plugin_event.h" 21 #include "meta/meta_key.h" 22 #include "meta/media_types.h" 23 #include "meta/meta.h" 24 #include "common/status.h" 25 26 namespace OHOS { 27 namespace Media { 28 namespace Plugins { 29 enum class ErrorType { 30 PLUGIN_ERROR, 31 ALGO_ERROR, 32 CLIENT_ERROR, 33 SERVER_ERROR, 34 }; 35 /** 36 * @brief Plugin status callback interface. 37 * 38 * @since 1.0 39 * @version 1.0 40 */ 41 struct Callback { 42 /// Destructor 43 virtual ~Callback() = default; 44 45 /** 46 * @brief When asynchronous time occurs during plugin running, 47 * the plugin implementer invokes this interface to notify the plugin user. 48 * 49 * @note Reserved Interface, Not used yet. 50 * 51 * @param event Event ID. 52 */ 53 virtual void OnEvent(const PluginEvent &event) = 0; 54 SetSelectBitRateFlagCallback55 virtual void SetSelectBitRateFlag(bool flag, uint32_t desBitRate) 56 { 57 (void)flag; 58 (void)desBitRate; 59 } 60 CanAutoSelectBitRateCallback61 virtual bool CanAutoSelectBitRate() 62 { 63 return false; 64 } 65 }; 66 67 /** 68 * @brief Base class of a plugin. All plugins of different types inherit this interface. 69 * 70 * @details The base class contains only common operation methods and defines basic operation processes. 71 * Different operations are valid only in the corresponding states. The timing of calls is guaranteed by 72 * the plugin framework. Some operations also change the plugin status. 73 * For details, see the description of each function. 74 * 75 * @since 1.0 76 * @version 1.0 77 */ 78 /// Constructor 79 struct PluginBase { PluginBasePluginBase80 explicit PluginBase(std::string name): pluginName_(std::move(name)) {} 81 82 /// Destructor 83 virtual ~PluginBase() = default; 84 85 /** 86 * @brief Get plugin name 87 * 88 * @return plugin name 89 */ GetNamePluginBase90 std::string GetName() const 91 { 92 return pluginName_; 93 } 94 95 /** 96 * @brief Plugin initialization, which is used to load external resources or plugin common resources. 97 * 98 * The function is valid only in the CREATED state. If the initialization is successful, 99 * the plugin enters the INITIALIZED state. 100 * 101 * @return Execution status return 102 * @retval OK: Plugin Init succeeded. 103 * @retval ERROR_NO_MEMORY: Memory allocation or external resource loading error caused by insufficient memory. 104 */ InitPluginBase105 virtual Status Init() 106 { 107 return Status::OK; 108 } 109 110 /** 111 * @brief Plugin deinitialize to release resources. 112 * 113 * This function can be invoked in any state. 114 * After the function is invoked, the plugin will no longer be available. 115 * 116 * @return Execution status return 117 * @retval OK: Plugin Deinit succeeded. 118 */ DeinitPluginBase119 virtual Status Deinit() 120 { 121 return Status::OK; 122 } 123 124 /** 125 * @brief Preparing parameters required or allocate the memory for plugin running. 126 * 127 * The function is valid only in the INITIALIZED state. If the prepare is successful, 128 * the plugin enters the PREPARED state. 129 * 130 * @return Execution status return 131 * @retval OK: Plugin Prepare succeeded. 132 * @retval ERROR_NO_MEMORY: Memory allocation error caused by insufficient memory. 133 */ PreparePluginBase134 virtual Status Prepare() 135 { 136 return Status::OK; 137 } 138 139 /** 140 * @brief Reset the plugin, reset the plugin running status and parameters before Prepare. 141 * 142 * The function is valid only in the PREPARED/RUNNING/PAUSED state. If the reset is successful, 143 * the plugin enters the INITIALIZED state. 144 * 145 * @return Execution status return 146 * @retval OK: Plugin Reset succeeded. 147 * @retval ERROR_UNIMPLEMENTED: This method is not implemented and cannot respond to reset. 148 */ ResetPluginBase149 virtual Status Reset() 150 { 151 return Status::OK; 152 } 153 154 /** 155 * @brief The plugin enters the running state and can process data. 156 * 157 * The function is valid only in the PREPARED state. If the start is successful, 158 * the plugin enters the RUNNING state. If an error occurs during the running, 159 * the plu-in status can be changed through asynchronous callback. 160 * 161 * @return Execution status return 162 * @retval OK: Plugin Start succeeded. 163 */ StartPluginBase164 virtual Status Start() 165 { 166 return Status::OK; 167 } 168 169 /** 170 * @brief The plugin enters the stopped state and stops processing data. 171 * 172 * The function is valid only in the RUNNING state. If the stop is successful, 173 * the plugin enters the PREPARED state. Temporary data generated during the operation will be cleared. 174 * 175 * @return Execution status return 176 * @retval OK: Plugin Stop succeeded. 177 */ StopPluginBase178 virtual Status Stop() 179 { 180 return Status::OK; 181 } 182 183 /** 184 * @brief Get the value of a specified parameter. 185 * 186 * This function can be called in any state except DESTROYED and INVALID. 187 * 188 * @param tag Plugin parameter type, which is described by tag. 189 * @param value Plugin parameter value. which is described by Any type. Need check the real type in tag. 190 * @return Execution status return 191 * @retval OK: Plugin GetParameter succeeded. 192 * @retval ERROR_INVALID_PARAMETER: The plugin does not support this parameter. 193 */ GetParameterPluginBase194 virtual Status GetParameter(std::shared_ptr<Meta> &meta) 195 { 196 (void)meta; 197 return Status::ERROR_UNIMPLEMENTED; 198 } 199 200 /** 201 * @brief Set the specified parameter. The value must be within the valid range of the parameter. 202 * 203 * This function can be called in any state except DESTROYED and INVALID. 204 * 205 * @param tag Plugin parameter type, which is described by tag. 206 * @param value Plugin parameter value. which is described by Any type. Need check the real type in tag. 207 * @return Execution status return 208 * @retval OK: Plugin SetParameter succeeded. 209 * @retval ERROR_INVALID_PARAMETER: The plugin does not support this parameter. 210 * @retval ERROR_INVALID_DATA: The value is not in the valid range. 211 * @retval ERROR_MISMATCHED_TYPE: The data type is mismatched. 212 */ SetParameterPluginBase213 virtual Status SetParameter(const std::shared_ptr<Meta> &meta) 214 { 215 (void)meta; 216 return Status::ERROR_UNIMPLEMENTED; 217 } 218 219 /** 220 * @brief Sets the plugin callback message to notify the plugin user. 221 * 222 * This function can be called in any state except DESTROYED and INVALID. 223 * 224 * @param cb Message callback, NULL callback listening is canceled. 225 * @return Execution status return 226 * @retval OK: Plugin SetCallback succeeded. 227 */ SetCallbackPluginBase228 virtual Status SetCallback(Callback* cb) 229 { 230 (void)cb; 231 return Status::OK; 232 } 233 234 protected: 235 const std::string pluginName_; 236 }; 237 } // namespace Plugins 238 } // namespace Media 239 } // namespace OHOS 240 #endif // HISTREAMER_PLUGINS_INTF_PLUGIN_BASE_H 241