1/*
2 * Copyright (c) 2022 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/**
17 * @addtogroup Codec
18 * @{
19 *
20 * @brief Defines APIs related to the Codec module.
21 *
22 * The Codec module provides APIs for initializing the custom data and audio and video codecs,
23 * setting codec parameters, and controlling and transferring data.
24 *
25 * @since 3.1
26 */
27
28/**
29 * @file codec_component_manager.h
30 *
31 * @brief Provides APIs for managing the Codec component.
32 *
33 * The APIs can be used to obtain the component encoding and decoding capability list,
34 * and create or destroy components for the Codec module.
35 *
36 * @since 3.1
37 */
38
39#ifndef CODEC_COMPONENT_MANAGER_H
40#define CODEC_COMPONENT_MANAGER_H
41
42#include "codec_component_if.h"
43
44#ifdef __cplusplus
45#if __cplusplus
46extern "C" {
47#endif
48#endif /* __cplusplus */
49
50/**
51 * @brief Defines the APIs for managing the codec components.
52 *
53 * The APIs can be used to:
54 * Obtain the number of codec components and a codec capability list.
55 * Create or destroy a codec component.
56 */
57struct CodecComponentManager {
58    /**
59     * @brief Obtains the number of codec components.
60     *
61     * All codec capability sets can be further obtained based on the number of codec components.
62     *
63     * @return Returns the number of codec components obtained.
64     */
65    int32_t (*GetComponentNum)();
66
67    /**
68     * @brief Obtains the codec capability list.
69     *
70     * You can use this API to obtain the encoding and decoding capabilities provided by the Codec module.
71     * The capability is represented in the {@link CodecCompCapability} structure.
72     *
73     * @param capList Indicates the pointer to the component capability list {@link CodecCompCapability} obtained.
74     * @param count Indicates the number of codec components, which is obtained by {@link GetComponentNum}.
75     *
76     * @return Returns <b>HDF_SUCCESS</b> if the operation is successful.
77     * @return Returns <b>HDF_ERR_INVALID_PARAM</b> if the operation failed due to invalid parameters.
78     * @return Returns <b>HDF_ERR_INVALID_OBJECT</b> if the operation failed due to invalid objects.
79     * @return Returns <b>HDF_ERR_MALLOC_FAIL</b> if the operation failed due to insufficient memory.
80     */
81    int32_t (*GetComponentCapabilityList)(CodecCompCapability *capList, int32_t count);
82
83    /**
84     * @brief Creates a codec instance.
85     *
86     * You can use this API to create a codec component instance based on the component name.
87     *
88     * @param component Indicates the pointer to the codec component created.
89	 * @param componentId Indicates the id to the codec component created.
90     * @param compName Indicates the name of the component to create.
91     * @param appData Indicates the pointer to the value defined by the application.
92     * The value is returned by the callback.
93     * @param callbacks Indicates the pointer to the callback defined by <b>OMX_CALLBACKTYPE</b>.
94     * For details, see {@link CodecCallbackType}.
95     *
96     * @return Returns <b>HDF_SUCCESS</b> if the operation is successful.
97     * @return Returns <b>HDF_ERR_INVALID_PARAM</b> if the operation failed due to invalid parameters.
98     * @return Returns <b>HDF_ERR_INVALID_OBJECT</b> if the operation failed due to invalid objects.
99     * @return Returns <b>HDF_ERR_MALLOC_FAIL</b> if the operation failed due to insufficient memory.
100     */
101    int32_t (*CreateComponent)(struct CodecComponentType **component, uint32_t *componentId, char *compName,
102                               int64_t appData, struct CodecCallbackType *callbacks);
103
104    /**
105     * @brief Destroys a codec component instance.
106     *
107     * @param componentId Indicates the codec component id to destroy.
108     *
109     * @return Returns <b>HDF_SUCCESS</b> if the operation is successful.
110     * @return Returns <b>HDF_ERR_INVALID_PARAM</b> if the operation failed due to invalid parameters.
111     * @return Returns <b>HDF_ERR_INVALID_OBJECT</b> if the operation failed due to invalid objects.
112     * @return Returns <b>HDF_ERR_MALLOC_FAIL</b> if the operation failed due to insufficient memory.
113     */
114    int32_t (*DestroyComponent)(uint32_t componentId);
115
116    struct HdfRemoteService *(*AsObject)(struct CodecComponentManager *self);
117};
118
119/**
120 * @brief Instantiates the <b>CodecComponentManager</b> object.
121 *
122 * @return Returns the <b>CodecComponentManager</b> object instantiated.
123 */
124struct CodecComponentManager *GetCodecComponentManager(void);
125
126/**
127 * @brief Releases the <b>CodecComponentManager</b> object.
128 */
129void CodecComponentManagerRelease(void);
130
131#ifdef __cplusplus
132#if __cplusplus
133}
134#endif
135#endif /* __cplusplus */
136
137#endif /* CODEC_COMPONENT_MANAGER_H */
138/** @} */