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