10485dae0Sopenharmony_ci/*
20485dae0Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
30485dae0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40485dae0Sopenharmony_ci * you may not use this file except in compliance with the License.
50485dae0Sopenharmony_ci * You may obtain a copy of the License at
60485dae0Sopenharmony_ci *
70485dae0Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
80485dae0Sopenharmony_ci *
90485dae0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100485dae0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110485dae0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120485dae0Sopenharmony_ci * See the License for the specific language governing permissions and
130485dae0Sopenharmony_ci * limitations under the License.
140485dae0Sopenharmony_ci */
150485dae0Sopenharmony_ci
160485dae0Sopenharmony_ci#ifndef PLUGIN_H
170485dae0Sopenharmony_ci#define PLUGIN_H
180485dae0Sopenharmony_ci
190485dae0Sopenharmony_ci#include <string>
200485dae0Sopenharmony_ci
210485dae0Sopenharmony_ci#include "plugin/i_plugin.h"
220485dae0Sopenharmony_ci
230485dae0Sopenharmony_cinamespace OHOS {
240485dae0Sopenharmony_cinamespace AI {
250485dae0Sopenharmony_ciclass Plugin {
260485dae0Sopenharmony_cipublic:
270485dae0Sopenharmony_ci    /**
280485dae0Sopenharmony_ci     * Initialize plugin
290485dae0Sopenharmony_ci     *
300485dae0Sopenharmony_ci     * @param [in] aid Algorithm id
310485dae0Sopenharmony_ci     * @param [in] version Algorithm version
320485dae0Sopenharmony_ci     */
330485dae0Sopenharmony_ci    Plugin(const std::string &aid, long long version);
340485dae0Sopenharmony_ci
350485dae0Sopenharmony_ci    /**
360485dae0Sopenharmony_ci     * Destructor of plugin
370485dae0Sopenharmony_ci     */
380485dae0Sopenharmony_ci    virtual ~Plugin();
390485dae0Sopenharmony_ci
400485dae0Sopenharmony_ci    /**
410485dae0Sopenharmony_ci     * Get algorithm of plugin
420485dae0Sopenharmony_ci     *
430485dae0Sopenharmony_ci     * @return Algorithm handler
440485dae0Sopenharmony_ci     */
450485dae0Sopenharmony_ci    IPlugin *GetPluginAlgorithm();
460485dae0Sopenharmony_ci
470485dae0Sopenharmony_ci    /**
480485dae0Sopenharmony_ci     * Set algorithm of plugin
490485dae0Sopenharmony_ci     *
500485dae0Sopenharmony_ci     * @param [in] pluginAlgorithm Algorithm handler
510485dae0Sopenharmony_ci     */
520485dae0Sopenharmony_ci    void SetPluginAlgorithm(IPlugin *pluginAlgorithm);
530485dae0Sopenharmony_ci
540485dae0Sopenharmony_ci    /**
550485dae0Sopenharmony_ci     * Load algorithm
560485dae0Sopenharmony_ci     *
570485dae0Sopenharmony_ci     * @return Returns RETCODE_SUCCESS(0) if the operation is successful, returns a non-zero value otherwise.
580485dae0Sopenharmony_ci     */
590485dae0Sopenharmony_ci    int LoadPluginAlgorithm();
600485dae0Sopenharmony_ci
610485dae0Sopenharmony_ci    /**
620485dae0Sopenharmony_ci     * Unload algorithm
630485dae0Sopenharmony_ci     */
640485dae0Sopenharmony_ci    void UnloadPluginAlgorithm();
650485dae0Sopenharmony_ci
660485dae0Sopenharmony_ci    /**
670485dae0Sopenharmony_ci     * Get algorithm version
680485dae0Sopenharmony_ci     *
690485dae0Sopenharmony_ci     * @return Algorithm version
700485dae0Sopenharmony_ci     */
710485dae0Sopenharmony_ci    long long GetVersion() const;
720485dae0Sopenharmony_ci
730485dae0Sopenharmony_ci    /**
740485dae0Sopenharmony_ci     * Get algorithm id
750485dae0Sopenharmony_ci     *
760485dae0Sopenharmony_ci     * @return Algorithm id
770485dae0Sopenharmony_ci     */
780485dae0Sopenharmony_ci    std::string GetAid() const;
790485dae0Sopenharmony_ci
800485dae0Sopenharmony_ciprivate:
810485dae0Sopenharmony_ci    IPlugin *pluginAlgorithm_ {nullptr};
820485dae0Sopenharmony_ci    std::string aid_ {""};
830485dae0Sopenharmony_ci    long long version_ {0};
840485dae0Sopenharmony_ci    void *handle_ {nullptr};
850485dae0Sopenharmony_ci};
860485dae0Sopenharmony_ci} // namespace AI
870485dae0Sopenharmony_ci} // namespace OHOS
880485dae0Sopenharmony_ci
890485dae0Sopenharmony_ci#endif // PLUGIN_H