xref: /aosp_15_r20/hardware/interfaces/media/c2/1.0/IComponentStore.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker/*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker *
4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker *
8*4d7e907cSAndroid Build Coastguard Worker *      http://www.apache.org/licenses/LICENSE-2.0
9*4d7e907cSAndroid Build Coastguard Worker *
10*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker */
16*4d7e907cSAndroid Build Coastguard Worker
17*4d7e907cSAndroid Build Coastguard Workerpackage [email protected];
18*4d7e907cSAndroid Build Coastguard Worker
19*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::IClientManager;
20*4d7e907cSAndroid Build Coastguard Workerimport IComponentInterface;
21*4d7e907cSAndroid Build Coastguard Workerimport IComponentListener;
22*4d7e907cSAndroid Build Coastguard Workerimport IComponent;
23*4d7e907cSAndroid Build Coastguard Workerimport IConfigurable;
24*4d7e907cSAndroid Build Coastguard Workerimport IInputSurface;
25*4d7e907cSAndroid Build Coastguard Worker
26*4d7e907cSAndroid Build Coastguard Worker/**
27*4d7e907cSAndroid Build Coastguard Worker * Entry point for Codec2 HAL.
28*4d7e907cSAndroid Build Coastguard Worker *
29*4d7e907cSAndroid Build Coastguard Worker * All methods in `IComponentStore` must not block. If a method call cannot be
30*4d7e907cSAndroid Build Coastguard Worker * completed in a timely manner, it must return `TIMED_OUT` in the return
31*4d7e907cSAndroid Build Coastguard Worker * status. The only exceptions are getPoolClientManager() and getConfigurable(),
32*4d7e907cSAndroid Build Coastguard Worker * which must always return immediately.
33*4d7e907cSAndroid Build Coastguard Worker */
34*4d7e907cSAndroid Build Coastguard Workerinterface IComponentStore {
35*4d7e907cSAndroid Build Coastguard Worker
36*4d7e907cSAndroid Build Coastguard Worker    /**
37*4d7e907cSAndroid Build Coastguard Worker     * Creates a component by name.
38*4d7e907cSAndroid Build Coastguard Worker     *
39*4d7e907cSAndroid Build Coastguard Worker     * @param name Name of the component to create. This must match one of the
40*4d7e907cSAndroid Build Coastguard Worker     *     names returned by listComponents().
41*4d7e907cSAndroid Build Coastguard Worker     * @param listener Callback receiver.
42*4d7e907cSAndroid Build Coastguard Worker     * @param pool `IClientManager` object of the BufferPool in the client
43*4d7e907cSAndroid Build Coastguard Worker     *     process. This may be null if the client does not own a BufferPool.
44*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
45*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The component was created successfully.
46*4d7e907cSAndroid Build Coastguard Worker     *   - `NOT_FOUND` - There is no component with the given name.
47*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to create the component.
48*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
49*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
50*4d7e907cSAndroid Build Coastguard Worker     * @return comp The created component if @p status is `OK`.
51*4d7e907cSAndroid Build Coastguard Worker     *
52*4d7e907cSAndroid Build Coastguard Worker     * @sa IComponentListener.
53*4d7e907cSAndroid Build Coastguard Worker     */
54*4d7e907cSAndroid Build Coastguard Worker    createComponent(
55*4d7e907cSAndroid Build Coastguard Worker            string name,
56*4d7e907cSAndroid Build Coastguard Worker            IComponentListener listener,
57*4d7e907cSAndroid Build Coastguard Worker            IClientManager pool
58*4d7e907cSAndroid Build Coastguard Worker        ) generates (
59*4d7e907cSAndroid Build Coastguard Worker            Status status,
60*4d7e907cSAndroid Build Coastguard Worker            IComponent comp
61*4d7e907cSAndroid Build Coastguard Worker        );
62*4d7e907cSAndroid Build Coastguard Worker
63*4d7e907cSAndroid Build Coastguard Worker    /**
64*4d7e907cSAndroid Build Coastguard Worker     * Creates a component interface by name.
65*4d7e907cSAndroid Build Coastguard Worker     *
66*4d7e907cSAndroid Build Coastguard Worker     * @param name Name of the component interface to create. This should match
67*4d7e907cSAndroid Build Coastguard Worker     *     one of the names returned by listComponents().
68*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
69*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The component interface was created successfully.
70*4d7e907cSAndroid Build Coastguard Worker     *   - `NOT_FOUND` - There is no component interface with the given name.
71*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to create the component interface.
72*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
73*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
74*4d7e907cSAndroid Build Coastguard Worker     * @return compIntf The created component interface if @p status is `OK`.
75*4d7e907cSAndroid Build Coastguard Worker     */
76*4d7e907cSAndroid Build Coastguard Worker    createInterface(
77*4d7e907cSAndroid Build Coastguard Worker            string name
78*4d7e907cSAndroid Build Coastguard Worker        ) generates (
79*4d7e907cSAndroid Build Coastguard Worker            Status status,
80*4d7e907cSAndroid Build Coastguard Worker            IComponentInterface compIntf
81*4d7e907cSAndroid Build Coastguard Worker        );
82*4d7e907cSAndroid Build Coastguard Worker
83*4d7e907cSAndroid Build Coastguard Worker    /**
84*4d7e907cSAndroid Build Coastguard Worker     * Component traits.
85*4d7e907cSAndroid Build Coastguard Worker     */
86*4d7e907cSAndroid Build Coastguard Worker    struct ComponentTraits {
87*4d7e907cSAndroid Build Coastguard Worker        /**
88*4d7e907cSAndroid Build Coastguard Worker         * Name of the component. This must be unique for each component.
89*4d7e907cSAndroid Build Coastguard Worker         *
90*4d7e907cSAndroid Build Coastguard Worker         * This name is use to identify the component to create in
91*4d7e907cSAndroid Build Coastguard Worker         * createComponent() and createComponentInterface().
92*4d7e907cSAndroid Build Coastguard Worker         */
93*4d7e907cSAndroid Build Coastguard Worker        string name;
94*4d7e907cSAndroid Build Coastguard Worker
95*4d7e907cSAndroid Build Coastguard Worker        enum Domain : uint32_t {
96*4d7e907cSAndroid Build Coastguard Worker            OTHER = 0,
97*4d7e907cSAndroid Build Coastguard Worker            VIDEO,
98*4d7e907cSAndroid Build Coastguard Worker            AUDIO,
99*4d7e907cSAndroid Build Coastguard Worker            IMAGE,
100*4d7e907cSAndroid Build Coastguard Worker        };
101*4d7e907cSAndroid Build Coastguard Worker        /**
102*4d7e907cSAndroid Build Coastguard Worker         * Component domain.
103*4d7e907cSAndroid Build Coastguard Worker         */
104*4d7e907cSAndroid Build Coastguard Worker        Domain domain;
105*4d7e907cSAndroid Build Coastguard Worker
106*4d7e907cSAndroid Build Coastguard Worker        enum Kind : uint32_t {
107*4d7e907cSAndroid Build Coastguard Worker            OTHER = 0,
108*4d7e907cSAndroid Build Coastguard Worker            DECODER,
109*4d7e907cSAndroid Build Coastguard Worker            ENCODER,
110*4d7e907cSAndroid Build Coastguard Worker        };
111*4d7e907cSAndroid Build Coastguard Worker        /**
112*4d7e907cSAndroid Build Coastguard Worker         * Component kind.
113*4d7e907cSAndroid Build Coastguard Worker         */
114*4d7e907cSAndroid Build Coastguard Worker        Kind kind;
115*4d7e907cSAndroid Build Coastguard Worker
116*4d7e907cSAndroid Build Coastguard Worker        /**
117*4d7e907cSAndroid Build Coastguard Worker         * Rank used by `MediaCodecList` to determine component ordering. Lower
118*4d7e907cSAndroid Build Coastguard Worker         * value means higher priority.
119*4d7e907cSAndroid Build Coastguard Worker         */
120*4d7e907cSAndroid Build Coastguard Worker        uint32_t rank;
121*4d7e907cSAndroid Build Coastguard Worker
122*4d7e907cSAndroid Build Coastguard Worker        /**
123*4d7e907cSAndroid Build Coastguard Worker         * MIME type.
124*4d7e907cSAndroid Build Coastguard Worker         */
125*4d7e907cSAndroid Build Coastguard Worker        string mediaType;
126*4d7e907cSAndroid Build Coastguard Worker
127*4d7e907cSAndroid Build Coastguard Worker        /**
128*4d7e907cSAndroid Build Coastguard Worker         * Aliases for component name for backward compatibility.
129*4d7e907cSAndroid Build Coastguard Worker         *
130*4d7e907cSAndroid Build Coastguard Worker         * Multiple components can have the same alias (but not the same
131*4d7e907cSAndroid Build Coastguard Worker         * component name) as long as their media types differ.
132*4d7e907cSAndroid Build Coastguard Worker         */
133*4d7e907cSAndroid Build Coastguard Worker        vec<string> aliases;
134*4d7e907cSAndroid Build Coastguard Worker    };
135*4d7e907cSAndroid Build Coastguard Worker
136*4d7e907cSAndroid Build Coastguard Worker    /**
137*4d7e907cSAndroid Build Coastguard Worker     * Returns the list of components supported by this component store.
138*4d7e907cSAndroid Build Coastguard Worker     *
139*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
140*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation was successful.
141*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to complete this method.
142*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
143*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
144*4d7e907cSAndroid Build Coastguard Worker     * @return traits List of component traits for all components supported by
145*4d7e907cSAndroid Build Coastguard Worker     *     this store (in no particular order).
146*4d7e907cSAndroid Build Coastguard Worker     */
147*4d7e907cSAndroid Build Coastguard Worker    listComponents() generates (
148*4d7e907cSAndroid Build Coastguard Worker            Status status,
149*4d7e907cSAndroid Build Coastguard Worker            vec<ComponentTraits> traits
150*4d7e907cSAndroid Build Coastguard Worker        );
151*4d7e907cSAndroid Build Coastguard Worker
152*4d7e907cSAndroid Build Coastguard Worker    /**
153*4d7e907cSAndroid Build Coastguard Worker     * Creates a persistent input surface that can be used as an input surface
154*4d7e907cSAndroid Build Coastguard Worker     * for any IComponent instance
155*4d7e907cSAndroid Build Coastguard Worker     *
156*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
157*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation was successful.
158*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to complete this method.
159*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
160*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
161*4d7e907cSAndroid Build Coastguard Worker     * @return surface A persistent input surface. This may be null to indicate
162*4d7e907cSAndroid Build Coastguard Worker     *     an error.
163*4d7e907cSAndroid Build Coastguard Worker     */
164*4d7e907cSAndroid Build Coastguard Worker    createInputSurface() generates (
165*4d7e907cSAndroid Build Coastguard Worker            Status status,
166*4d7e907cSAndroid Build Coastguard Worker            IInputSurface surface
167*4d7e907cSAndroid Build Coastguard Worker        );
168*4d7e907cSAndroid Build Coastguard Worker
169*4d7e907cSAndroid Build Coastguard Worker    /**
170*4d7e907cSAndroid Build Coastguard Worker     * Returns a list of `StructDescriptor` objects for a set of requested
171*4d7e907cSAndroid Build Coastguard Worker     * C2Param structure indices that this store is aware of.
172*4d7e907cSAndroid Build Coastguard Worker     *
173*4d7e907cSAndroid Build Coastguard Worker     * This operation must be performed at best effort, e.g. the component
174*4d7e907cSAndroid Build Coastguard Worker     * store must simply ignore all struct indices that it is not aware of.
175*4d7e907cSAndroid Build Coastguard Worker     *
176*4d7e907cSAndroid Build Coastguard Worker     * @param indices Indices of C2Param structures to describe.
177*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
178*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The operation completed successfully.
179*4d7e907cSAndroid Build Coastguard Worker     *   - `NOT_FOUND` - Some indices were not known.
180*4d7e907cSAndroid Build Coastguard Worker     *   - `NO_MEMORY` - Not enough memory to complete this method.
181*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
182*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
183*4d7e907cSAndroid Build Coastguard Worker     * @return structs List of `StructDescriptor` objects.
184*4d7e907cSAndroid Build Coastguard Worker     */
185*4d7e907cSAndroid Build Coastguard Worker    getStructDescriptors(
186*4d7e907cSAndroid Build Coastguard Worker            vec<ParamIndex> indices
187*4d7e907cSAndroid Build Coastguard Worker        ) generates (
188*4d7e907cSAndroid Build Coastguard Worker            Status status,
189*4d7e907cSAndroid Build Coastguard Worker            vec<StructDescriptor> structs
190*4d7e907cSAndroid Build Coastguard Worker        );
191*4d7e907cSAndroid Build Coastguard Worker
192*4d7e907cSAndroid Build Coastguard Worker    /**
193*4d7e907cSAndroid Build Coastguard Worker     * Copies the contents of @p src into @p dst without changing the format of
194*4d7e907cSAndroid Build Coastguard Worker     * @p dst.
195*4d7e907cSAndroid Build Coastguard Worker     *
196*4d7e907cSAndroid Build Coastguard Worker     * @param src Source buffer.
197*4d7e907cSAndroid Build Coastguard Worker     * @param dst Destination buffer.
198*4d7e907cSAndroid Build Coastguard Worker     * @return status Status of the call, which may be
199*4d7e907cSAndroid Build Coastguard Worker     *   - `OK`        - The copy is successful.
200*4d7e907cSAndroid Build Coastguard Worker     *   - `CANNOT_DO` - @p src and @p dst are not compatible.
201*4d7e907cSAndroid Build Coastguard Worker     *   - `REFUSED`   - No permission to copy.
202*4d7e907cSAndroid Build Coastguard Worker     *   - `TIMED_OUT` - The operation cannot be finished in a timely manner.
203*4d7e907cSAndroid Build Coastguard Worker     *   - `CORRUPTED` - Some unknown error occurred.
204*4d7e907cSAndroid Build Coastguard Worker     */
205*4d7e907cSAndroid Build Coastguard Worker    copyBuffer(Buffer src, Buffer dst) generates (Status status);
206*4d7e907cSAndroid Build Coastguard Worker
207*4d7e907cSAndroid Build Coastguard Worker    /**
208*4d7e907cSAndroid Build Coastguard Worker     * Returns the `IClientManager` object for the component's BufferPool.
209*4d7e907cSAndroid Build Coastguard Worker     *
210*4d7e907cSAndroid Build Coastguard Worker     * @return pool If the component store supports receiving buffers via
211*4d7e907cSAndroid Build Coastguard Worker     *     BufferPool API, @p pool must be a valid `IClientManager` instance.
212*4d7e907cSAndroid Build Coastguard Worker     *     Otherwise, @p pool must be null.
213*4d7e907cSAndroid Build Coastguard Worker     */
214*4d7e907cSAndroid Build Coastguard Worker    getPoolClientManager() generates (IClientManager pool);
215*4d7e907cSAndroid Build Coastguard Worker
216*4d7e907cSAndroid Build Coastguard Worker    /**
217*4d7e907cSAndroid Build Coastguard Worker     * Returns the @ref IConfigurable instance associated to this component
218*4d7e907cSAndroid Build Coastguard Worker     * store.
219*4d7e907cSAndroid Build Coastguard Worker     *
220*4d7e907cSAndroid Build Coastguard Worker     * @return configurable `IConfigurable` instance. This must not be null.
221*4d7e907cSAndroid Build Coastguard Worker     */
222*4d7e907cSAndroid Build Coastguard Worker    getConfigurable() generates (IConfigurable configurable);
223*4d7e907cSAndroid Build Coastguard Worker};
224*4d7e907cSAndroid Build Coastguard Worker
225