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 OHOS_I_AV_ENGINE_PROVIDER_H
17 #define OHOS_I_AV_ENGINE_PROVIDER_H
18 
19 #include <memory>
20 #include <string>
21 #include <vector>
22 
23 #include "i_av_engine_provider_callback.h"
24 #include "i_av_receiver_engine.h"
25 #include "i_av_sender_engine.h"
26 
27 namespace OHOS {
28 namespace DistributedHardware {
29 /**
30  * @brief AV engine provider interface.
31  *
32  * AV engine provider is used to create or query the sender engines and receiver engines.
33  * It is loaded and running both on the source and the sink device.
34  *
35  * @since 1.0
36  * @version 1.0
37  */
38 class IAVEngineProvider {
39 public:
40     /**
41      * @brief Destructor.
42      * @return No return value.
43      */
44     virtual ~IAVEngineProvider() = default;
45 
46     /**
47      * @brief Create an av sender engine.
48      * @param peerDevId  id of the remote target device.
49      * @return Returns a IAVSenderEngine shared pointer if successful, otherwise returns null pointer.
50      */
CreateAVSenderEngine(const std::string & peerDevId)51     virtual std::shared_ptr<IAVSenderEngine> CreateAVSenderEngine(const std::string &peerDevId)
52     {
53         (void)peerDevId;
54         return nullptr;
55     }
56 
57     /**
58      * @brief Get the av sender engine list.
59      * @return Returns the av sender engine list if successful, otherwise returns empty vector.
60      */
GetAVSenderEngineList()61     virtual std::vector<std::shared_ptr<IAVSenderEngine>> GetAVSenderEngineList()
62     {
63         std::vector<std::shared_ptr<IAVSenderEngine>> list;
64         return list;
65     }
66 
67     /**
68      * @brief Create an av receiver engine.
69      * @param peerDevId  id of the remote target device.
70      * @return Returns a IAVReceiverEngine shared pointer if successful, otherwise returns null pointer.
71      */
CreateAVReceiverEngine(const std::string & peerDevId)72     virtual std::shared_ptr<IAVReceiverEngine> CreateAVReceiverEngine(const std::string &peerDevId)
73     {
74         (void)peerDevId;
75         return nullptr;
76     }
77 
78     /**
79      * @brief Get the av receiver engine list.
80      * @return Returns the av receiver engine list if successful, otherwise returns empty vector.
81      */
GetAVReceiverEngineList()82     virtual std::vector<std::shared_ptr<IAVReceiverEngine>> GetAVReceiverEngineList()
83     {
84         std::vector<std::shared_ptr<IAVReceiverEngine>> list;
85         return list;
86     }
87 
88     /**
89      * @brief Register interface callback to the engine provider.
90      * @param callback  interface callback.
91      * @return Returns DH_AVT_SUCCESS(0) if successful, otherwise returns other error code.
92      */
RegisterProviderCallback(const std::shared_ptr<IAVEngineProviderCallback> & callback)93     virtual int32_t RegisterProviderCallback(const std::shared_ptr<IAVEngineProviderCallback> &callback)
94     {
95         (void)callback;
96         return DH_AVT_SUCCESS;
97     }
98 };
99 } // DistributedHardware
100 } // OHOS
101 #endif // OHOS_I_AV_ENGINE_PROVIDER_H