* Copyright (c) 2021-2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef HISTREAMER_PLUGIN_INTF_CODEC_PLUGIN_H
#define HISTREAMER_PLUGIN_INTF_CODEC_PLUGIN_H
#include <vector>
#include "plugin/common/plugin_caps.h"
#include "plugin/interface/plugin_base.h"
#include "plugin/interface/plugin_definition.h"
namespace OHOS {
namespace Media {
namespace Plugin {
* @brief Plugin data callback interface.
*
* @since 1.0
* @version 1.0
*/
struct DataCallback {
virtual ~DataCallback() = default;
* @brief When the input buffer has been consumed inside the plugin.
*
* This function works with QueueInputBuffer to implement input data transmission.
*
* @param input Indicates the pointer to the input data.
*/
virtual void OnInputBufferDone(const std::shared_ptr<Buffer>& input) = 0;
* @brief When the out buffer has been produced inside the plugin.
*
* This function works with QueueOutputBuffer to implement out data transmission.
*
* @param output Indicates the pointer to the output data.
*/
virtual void OnOutputBufferDone(const std::shared_ptr<Buffer>& output) = 0;
};
* @brief Codec Plugin Interface.
*
* Used for audio and video encoding and decoding.
*
* @since 1.0
* @version 1.0
*/
struct CodecPlugin : public PluginBase {
explicit CodecPlugin(std::string name): PluginBase(std::move(name)) {}
* @brief Queues input data
*
* This function works with DataCallback::OnInputBufferDone to implement input data transmission.
*
* The function is valid only in the RUNNING state.
*
* @param inputBuffer Indicates the pointer to the input data.
* @param timeoutMs Indicates the timeout duration.
* @return Execution status return
* @retval OK: Plugin QueueInputBuffer succeeded.
* @retval ERROR_INVALID_DATA: The input buffer is invalid.
* @retval ERROR_TIMED_OUT: Operation timeout.
*/
virtual Status QueueInputBuffer(const std::shared_ptr<Buffer>& inputBuffer, int32_t timeoutMs) = 0;
* @brief Queues output data
*
* This function works with DataCallback::OnOutputBufferDone to implement output data transmission.
*
* The function is valid only in the RUNNING state.
*
* @param outputBuffers Indicates the pointer to the output data.
* @param timeoutMs Indicates the timeout duration.
* @return Execution status return
* @retval OK: Plugin QueueOutputBuffer succeeded.
* @retval ERROR_INVALID_DATA: The output buffer is invalid.
* @retval ERROR_TIMED_OUT: Operation timeout.
*/
virtual Status QueueOutputBuffer(const std::shared_ptr<Buffer>& outputBuffers, int32_t timeoutMs) = 0;
* @brief Flushes data in the audio buffer.
*
* The function is valid only in after RUNNING state.
*
* @return Execution status return
* @retval OK: Plugin Flush succeeded.
*/
virtual Status Flush() = 0;
* @brief Sets the plugin callback data to notify the plugin user.
*
* This function can be called in any state except DESTROYED and INVALID.
*
* @param cb Data callback, NULL callback listening is canceled.
* @return Execution status return
* @retval OK: Plugin SetDataCallback succeeded.
*/
virtual Status SetDataCallback(DataCallback* dataCallback) = 0;
};
#define CODEC_API_VERSION_MAJOR (1)
#define CODEC_API_VERSION_MINOR (0)
#define CODEC_API_VERSION MAKE_VERSION(CODEC_API_VERSION_MAJOR, CODEC_API_VERSION_MINOR)
* @brief Describes the codec plugin information.
*
* @since 1.0
* @version 1.0
*/
struct CodecPluginDef : public PluginDefBase {
CodecMode codecMode {CodecMode::SOFTWARE};
CapabilitySet inCaps {};
CapabilitySet outCaps {};
PluginCreatorFunc<CodecPlugin> creator {nullptr};
CodecPluginDef()
{
apiVersion = CODEC_API_VERSION;
}
};
}
}
}
#endif