xref: /aosp_15_r20/hardware/interfaces/media/omx/1.0/IOmxStore.hal (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker/*
2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2017 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 IOmx;
20*4d7e907cSAndroid Build Coastguard Worker
21*4d7e907cSAndroid Build Coastguard Worker/**
22*4d7e907cSAndroid Build Coastguard Worker * Ref: frameworks/av/include/media/IOMX.h: IOMX
23*4d7e907cSAndroid Build Coastguard Worker *
24*4d7e907cSAndroid Build Coastguard Worker * There will be two instances of IOmxStore: "platform" and "vendor".
25*4d7e907cSAndroid Build Coastguard Worker *
26*4d7e907cSAndroid Build Coastguard Worker * The IOmxStore service provided by the platform must present "platform" as the
27*4d7e907cSAndroid Build Coastguard Worker * interface name.
28*4d7e907cSAndroid Build Coastguard Worker *
29*4d7e907cSAndroid Build Coastguard Worker * The IOmxStore service provided by the vendor must present "vendor" as the
30*4d7e907cSAndroid Build Coastguard Worker * instance name.
31*4d7e907cSAndroid Build Coastguard Worker */
32*4d7e907cSAndroid Build Coastguard Workerinterface IOmxStore {
33*4d7e907cSAndroid Build Coastguard Worker
34*4d7e907cSAndroid Build Coastguard Worker    /**
35*4d7e907cSAndroid Build Coastguard Worker     * Attribute is a key-value pair of strings. The `value` member is generally
36*4d7e907cSAndroid Build Coastguard Worker     * a stringified value of the following:
37*4d7e907cSAndroid Build Coastguard Worker     *   enum<v1,v2,...,vn>:    v1 | v2 | ... | vn
38*4d7e907cSAndroid Build Coastguard Worker     *   num:                   0 | [1-9][0-9]*
39*4d7e907cSAndroid Build Coastguard Worker     *   string:                arbitrary string
40*4d7e907cSAndroid Build Coastguard Worker     *   size:                  <num>x<num>
41*4d7e907cSAndroid Build Coastguard Worker     *   ratio:                 <num>:<num>
42*4d7e907cSAndroid Build Coastguard Worker     *   range<type>:           <type> | <type>-<type>
43*4d7e907cSAndroid Build Coastguard Worker     *   list<type>:            <type> | <type>,<list<type>>
44*4d7e907cSAndroid Build Coastguard Worker     */
45*4d7e907cSAndroid Build Coastguard Worker    struct Attribute {
46*4d7e907cSAndroid Build Coastguard Worker        string key;
47*4d7e907cSAndroid Build Coastguard Worker        string value;
48*4d7e907cSAndroid Build Coastguard Worker    };
49*4d7e907cSAndroid Build Coastguard Worker
50*4d7e907cSAndroid Build Coastguard Worker    /**
51*4d7e907cSAndroid Build Coastguard Worker     * Service attribute
52*4d7e907cSAndroid Build Coastguard Worker     *
53*4d7e907cSAndroid Build Coastguard Worker     * Optional service attributes:
54*4d7e907cSAndroid Build Coastguard Worker     *   key: 'max-video-encoder-input-buffers', value-type: num
55*4d7e907cSAndroid Build Coastguard Worker     *   key: 'supports-multiple-secure-codecs', value-type: enum<0,1>
56*4d7e907cSAndroid Build Coastguard Worker     *   key: 'supports-secure-with-non-secure-codec', value-type: enum<0,1>
57*4d7e907cSAndroid Build Coastguard Worker     *
58*4d7e907cSAndroid Build Coastguard Worker     * For keys with prefix 'supports-', the value of 0 means "no" (not
59*4d7e907cSAndroid Build Coastguard Worker     * supported) while the value of 1 means "yes" (supported).
60*4d7e907cSAndroid Build Coastguard Worker     */
61*4d7e907cSAndroid Build Coastguard Worker    typedef Attribute ServiceAttribute;
62*4d7e907cSAndroid Build Coastguard Worker
63*4d7e907cSAndroid Build Coastguard Worker    /**
64*4d7e907cSAndroid Build Coastguard Worker     * List attributes that are service-specific (not node-specific).
65*4d7e907cSAndroid Build Coastguard Worker     *
66*4d7e907cSAndroid Build Coastguard Worker     * @return attributes The list of `Attribute`s that are specific to this
67*4d7e907cSAndroid Build Coastguard Worker     *                    service.
68*4d7e907cSAndroid Build Coastguard Worker     */
69*4d7e907cSAndroid Build Coastguard Worker    listServiceAttributes(
70*4d7e907cSAndroid Build Coastguard Worker        ) generates (
71*4d7e907cSAndroid Build Coastguard Worker            Status status,
72*4d7e907cSAndroid Build Coastguard Worker            vec<ServiceAttribute> attributes
73*4d7e907cSAndroid Build Coastguard Worker        );
74*4d7e907cSAndroid Build Coastguard Worker
75*4d7e907cSAndroid Build Coastguard Worker    /**
76*4d7e907cSAndroid Build Coastguard Worker     * Node attribute
77*4d7e907cSAndroid Build Coastguard Worker     *
78*4d7e907cSAndroid Build Coastguard Worker     * Optional node attributes to describe supported values:
79*4d7e907cSAndroid Build Coastguard Worker     *   key: 'bitrate-range', value-type: range<num>
80*4d7e907cSAndroid Build Coastguard Worker     *   key: 'max-concurrent-instances', value-type: num
81*4d7e907cSAndroid Build Coastguard Worker     *   key: 'max-supported-instances', value-type: num
82*4d7e907cSAndroid Build Coastguard Worker     *
83*4d7e907cSAndroid Build Coastguard Worker     * Optional node attributes for audio nodes to describe supported values:
84*4d7e907cSAndroid Build Coastguard Worker     *   key: 'max-channel-count', value-type: num
85*4d7e907cSAndroid Build Coastguard Worker     *   key: 'sample-rate-ranges', value-type: list<range<num>>
86*4d7e907cSAndroid Build Coastguard Worker     *
87*4d7e907cSAndroid Build Coastguard Worker     * Optional node attributes for video nodes to describe supported values:
88*4d7e907cSAndroid Build Coastguard Worker     *   key: 'alignment', value-type: size
89*4d7e907cSAndroid Build Coastguard Worker     *   key: 'block-aspect-ratio-range', value-type: range<ratio>
90*4d7e907cSAndroid Build Coastguard Worker     *   key: 'block-count-range', value-type: range<num>
91*4d7e907cSAndroid Build Coastguard Worker     *   key: 'block-size', value-type: size
92*4d7e907cSAndroid Build Coastguard Worker     *   key: 'blocks-per-second-range', value-type: range<num>
93*4d7e907cSAndroid Build Coastguard Worker     *   key: 'feature-can-swap-width-height', value-type: enum<0,1>
94*4d7e907cSAndroid Build Coastguard Worker     *   key: 'frame-rate-range', value-type: range<num>
95*4d7e907cSAndroid Build Coastguard Worker     *   key: 'pixel-aspect-ratio-range', value-type: range<ratio>
96*4d7e907cSAndroid Build Coastguard Worker     *   key: 'size-range', value-type: range<size>
97*4d7e907cSAndroid Build Coastguard Worker     *
98*4d7e907cSAndroid Build Coastguard Worker     * Required node attributes for video nodes that are required by Android to
99*4d7e907cSAndroid Build Coastguard Worker     * describe measured values for this device:
100*4d7e907cSAndroid Build Coastguard Worker     *   key: 'measured-frame-rate-<width>x<height>-range',
101*4d7e907cSAndroid Build Coastguard Worker     *     value-type: range<num>; where width: num, height: num
102*4d7e907cSAndroid Build Coastguard Worker     *
103*4d7e907cSAndroid Build Coastguard Worker     * Optional node attributes for decoders to describe supported values:
104*4d7e907cSAndroid Build Coastguard Worker     *   key: 'feature-adaptive-playback', value: enum<0,1>
105*4d7e907cSAndroid Build Coastguard Worker     *   key: 'feature-secure-playback', value: enum<0,1>
106*4d7e907cSAndroid Build Coastguard Worker     *   key: 'feature-tunneled-playback', value: enum<0,1>
107*4d7e907cSAndroid Build Coastguard Worker     *
108*4d7e907cSAndroid Build Coastguard Worker     * Optional node attributes for video decoders to describe supported values:
109*4d7e907cSAndroid Build Coastguard Worker     *   key: 'feature-partial-frame', value: enum<0,1>
110*4d7e907cSAndroid Build Coastguard Worker     *
111*4d7e907cSAndroid Build Coastguard Worker     * Optional node attributes for encoders to describe supported values:
112*4d7e907cSAndroid Build Coastguard Worker     *   key: 'complexity-default', value-type: num
113*4d7e907cSAndroid Build Coastguard Worker     *   key: 'complexity-range', value-type: range<num>
114*4d7e907cSAndroid Build Coastguard Worker     *   key: 'feature-bitrate-modes', value-type: list<enum<VBR,CBR,CQ>>
115*4d7e907cSAndroid Build Coastguard Worker     *   key: 'feature-intra-refresh', value-type: enum<0,1>
116*4d7e907cSAndroid Build Coastguard Worker     *   key: 'quality-default', value-type: num
117*4d7e907cSAndroid Build Coastguard Worker     *   key: 'quality-range', value-type: range<num>
118*4d7e907cSAndroid Build Coastguard Worker     *   key: 'quality-scale', value-type: string
119*4d7e907cSAndroid Build Coastguard Worker     *
120*4d7e907cSAndroid Build Coastguard Worker     * For keys with prefix 'feature-' and value type enum<0,1>, the value of 0
121*4d7e907cSAndroid Build Coastguard Worker     * means "optional", while the value of 1 means "required".
122*4d7e907cSAndroid Build Coastguard Worker     */
123*4d7e907cSAndroid Build Coastguard Worker    typedef Attribute NodeAttribute;
124*4d7e907cSAndroid Build Coastguard Worker
125*4d7e907cSAndroid Build Coastguard Worker    /**
126*4d7e907cSAndroid Build Coastguard Worker     * Information for an IOmxNode node.
127*4d7e907cSAndroid Build Coastguard Worker     */
128*4d7e907cSAndroid Build Coastguard Worker    struct NodeInfo {
129*4d7e907cSAndroid Build Coastguard Worker        /**
130*4d7e907cSAndroid Build Coastguard Worker         * Name of this node.
131*4d7e907cSAndroid Build Coastguard Worker         *
132*4d7e907cSAndroid Build Coastguard Worker         * `name` can be supplied to `IOmx::allocateNode` of a
133*4d7e907cSAndroid Build Coastguard Worker         * corresponding `IOmx` instance to create the node.
134*4d7e907cSAndroid Build Coastguard Worker         */
135*4d7e907cSAndroid Build Coastguard Worker        string name;
136*4d7e907cSAndroid Build Coastguard Worker        /**
137*4d7e907cSAndroid Build Coastguard Worker         * Name of the `IOmx` instance that can create this node.
138*4d7e907cSAndroid Build Coastguard Worker         *
139*4d7e907cSAndroid Build Coastguard Worker         * To obtain the `IOmx` instance, call `getOmx(owner)`.
140*4d7e907cSAndroid Build Coastguard Worker         */
141*4d7e907cSAndroid Build Coastguard Worker        string owner;
142*4d7e907cSAndroid Build Coastguard Worker        /**
143*4d7e907cSAndroid Build Coastguard Worker         * List of node attributes.
144*4d7e907cSAndroid Build Coastguard Worker         */
145*4d7e907cSAndroid Build Coastguard Worker        vec<NodeAttribute> attributes;
146*4d7e907cSAndroid Build Coastguard Worker    };
147*4d7e907cSAndroid Build Coastguard Worker
148*4d7e907cSAndroid Build Coastguard Worker    /**
149*4d7e907cSAndroid Build Coastguard Worker     * Information about nodes provided for a supported node role
150*4d7e907cSAndroid Build Coastguard Worker     */
151*4d7e907cSAndroid Build Coastguard Worker    struct RoleInfo {
152*4d7e907cSAndroid Build Coastguard Worker        /**
153*4d7e907cSAndroid Build Coastguard Worker         * Standard OMX node role.
154*4d7e907cSAndroid Build Coastguard Worker         */
155*4d7e907cSAndroid Build Coastguard Worker        string role;
156*4d7e907cSAndroid Build Coastguard Worker        /**
157*4d7e907cSAndroid Build Coastguard Worker         * Corresponding media type (as defined in MediaFormat.MIMETYPE_*
158*4d7e907cSAndroid Build Coastguard Worker         * constants for types required by Android).
159*4d7e907cSAndroid Build Coastguard Worker         */
160*4d7e907cSAndroid Build Coastguard Worker        string type;
161*4d7e907cSAndroid Build Coastguard Worker        /**
162*4d7e907cSAndroid Build Coastguard Worker         * Whether this role is for an encoder or a decoder.
163*4d7e907cSAndroid Build Coastguard Worker         */
164*4d7e907cSAndroid Build Coastguard Worker        bool isEncoder;
165*4d7e907cSAndroid Build Coastguard Worker        /**
166*4d7e907cSAndroid Build Coastguard Worker         * Whether to prefer platform nodes for this role.
167*4d7e907cSAndroid Build Coastguard Worker         */
168*4d7e907cSAndroid Build Coastguard Worker        bool preferPlatformNodes;
169*4d7e907cSAndroid Build Coastguard Worker        /**
170*4d7e907cSAndroid Build Coastguard Worker         * List of nodes that support this role, ordered by preference.
171*4d7e907cSAndroid Build Coastguard Worker         */
172*4d7e907cSAndroid Build Coastguard Worker        vec<NodeInfo> nodes;
173*4d7e907cSAndroid Build Coastguard Worker    };
174*4d7e907cSAndroid Build Coastguard Worker
175*4d7e907cSAndroid Build Coastguard Worker    /**
176*4d7e907cSAndroid Build Coastguard Worker     * Return the prefix of names of supported nodes.
177*4d7e907cSAndroid Build Coastguard Worker     *
178*4d7e907cSAndroid Build Coastguard Worker     * @return prefix The prefix of the names of all nodes supported by this
179*4d7e907cSAndroid Build Coastguard Worker     *                service.
180*4d7e907cSAndroid Build Coastguard Worker     */
181*4d7e907cSAndroid Build Coastguard Worker    getNodePrefix(
182*4d7e907cSAndroid Build Coastguard Worker        ) generates (
183*4d7e907cSAndroid Build Coastguard Worker            string prefix
184*4d7e907cSAndroid Build Coastguard Worker        );
185*4d7e907cSAndroid Build Coastguard Worker
186*4d7e907cSAndroid Build Coastguard Worker    /**
187*4d7e907cSAndroid Build Coastguard Worker     * List roles of supported nodes.
188*4d7e907cSAndroid Build Coastguard Worker     *
189*4d7e907cSAndroid Build Coastguard Worker     * The name of each node inside `NodeInfo` must start with the prefix
190*4d7e907cSAndroid Build Coastguard Worker     * returned by `getNodePrefix()`.
191*4d7e907cSAndroid Build Coastguard Worker     *
192*4d7e907cSAndroid Build Coastguard Worker     * @return roleList The list of `RoleInfo`s.
193*4d7e907cSAndroid Build Coastguard Worker     *
194*4d7e907cSAndroid Build Coastguard Worker     * @see RoleInfo
195*4d7e907cSAndroid Build Coastguard Worker     */
196*4d7e907cSAndroid Build Coastguard Worker    listRoles(
197*4d7e907cSAndroid Build Coastguard Worker        ) generates (
198*4d7e907cSAndroid Build Coastguard Worker            vec<RoleInfo> roleList
199*4d7e907cSAndroid Build Coastguard Worker        );
200*4d7e907cSAndroid Build Coastguard Worker
201*4d7e907cSAndroid Build Coastguard Worker    /**
202*4d7e907cSAndroid Build Coastguard Worker     * Obtain an `IOmx` instance with a specified name.
203*4d7e907cSAndroid Build Coastguard Worker     *
204*4d7e907cSAndroid Build Coastguard Worker     * @param name The name of the instance.
205*4d7e907cSAndroid Build Coastguard Worker     * @return omx The `IOmx` interface associated with `name`. This must be
206*4d7e907cSAndroid Build Coastguard Worker     * null if the name is not found.
207*4d7e907cSAndroid Build Coastguard Worker     */
208*4d7e907cSAndroid Build Coastguard Worker    getOmx(
209*4d7e907cSAndroid Build Coastguard Worker            string name
210*4d7e907cSAndroid Build Coastguard Worker        ) generates (
211*4d7e907cSAndroid Build Coastguard Worker            IOmx omx
212*4d7e907cSAndroid Build Coastguard Worker        );
213*4d7e907cSAndroid Build Coastguard Worker
214*4d7e907cSAndroid Build Coastguard Worker};
215*4d7e907cSAndroid Build Coastguard Worker
216