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