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]::IGraphicBufferProducer; 20*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::IGraphicBufferProducer; 21*4d7e907cSAndroid Build Coastguard Workerimport [email protected]::IGraphicBufferSource; 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard Workerimport IConfigurable; 24*4d7e907cSAndroid Build Coastguard Workerimport IComponentInterface; 25*4d7e907cSAndroid Build Coastguard Workerimport IComponentListener; 26*4d7e907cSAndroid Build Coastguard Workerimport IInputSink; 27*4d7e907cSAndroid Build Coastguard Workerimport IInputSurface; 28*4d7e907cSAndroid Build Coastguard Workerimport IInputSurfaceConnection; 29*4d7e907cSAndroid Build Coastguard Worker 30*4d7e907cSAndroid Build Coastguard Worker/** 31*4d7e907cSAndroid Build Coastguard Worker * Interface for a Codec2 component corresponding to API level 1.0 or below. 32*4d7e907cSAndroid Build Coastguard Worker * Components have two states: stopped and running. The running state has three 33*4d7e907cSAndroid Build Coastguard Worker * sub-states: executing, tripped and error. 34*4d7e907cSAndroid Build Coastguard Worker * 35*4d7e907cSAndroid Build Coastguard Worker * All methods in `IComponent` must not block. If a method call cannot be 36*4d7e907cSAndroid Build Coastguard Worker * completed in a timely manner, it must return `TIMED_OUT` in the return 37*4d7e907cSAndroid Build Coastguard Worker * status. 38*4d7e907cSAndroid Build Coastguard Worker */ 39*4d7e907cSAndroid Build Coastguard Workerinterface IComponent { 40*4d7e907cSAndroid Build Coastguard Worker 41*4d7e907cSAndroid Build Coastguard Worker // METHODS AVAILABLE WHEN RUNNING 42*4d7e907cSAndroid Build Coastguard Worker // ========================================================================= 43*4d7e907cSAndroid Build Coastguard Worker 44*4d7e907cSAndroid Build Coastguard Worker /** 45*4d7e907cSAndroid Build Coastguard Worker * Queues up work for the component. 46*4d7e907cSAndroid Build Coastguard Worker * 47*4d7e907cSAndroid Build Coastguard Worker * This method must be supported in running (including tripped) states. 48*4d7e907cSAndroid Build Coastguard Worker * 49*4d7e907cSAndroid Build Coastguard Worker * It is acceptable for this method to return `OK` and return an error value 50*4d7e907cSAndroid Build Coastguard Worker * using the IComponentListener::onWorkDone() callback. 51*4d7e907cSAndroid Build Coastguard Worker * 52*4d7e907cSAndroid Build Coastguard Worker * @param workBundle `WorkBundle` object containing a list of `Work` objects 53*4d7e907cSAndroid Build Coastguard Worker * to queue to the component. 54*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 55*4d7e907cSAndroid Build Coastguard Worker * - `OK` - Works in @p workBundle were successfully queued. 56*4d7e907cSAndroid Build Coastguard Worker * - `BAD_INDEX` - Some component id in some `Worklet` is not valid. 57*4d7e907cSAndroid Build Coastguard Worker * - `CANNOT_DO` - The components are not tunneled but some `Work` object 58*4d7e907cSAndroid Build Coastguard Worker * contains tunneling information. 59*4d7e907cSAndroid Build Coastguard Worker * - `NO_MEMORY` - Not enough memory to queue @p workBundle. 60*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 61*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 62*4d7e907cSAndroid Build Coastguard Worker */ 63*4d7e907cSAndroid Build Coastguard Worker queue(WorkBundle workBundle) generates (Status status); 64*4d7e907cSAndroid Build Coastguard Worker 65*4d7e907cSAndroid Build Coastguard Worker /** 66*4d7e907cSAndroid Build Coastguard Worker * Discards and abandons any pending `Work` items for the component. 67*4d7e907cSAndroid Build Coastguard Worker * 68*4d7e907cSAndroid Build Coastguard Worker * This method must be supported in running (including tripped) states. 69*4d7e907cSAndroid Build Coastguard Worker * 70*4d7e907cSAndroid Build Coastguard Worker * `Work` that could be immediately abandoned/discarded must be returned in 71*4d7e907cSAndroid Build Coastguard Worker * @p flushedWorkBundle. The order in which queued `Work` items are 72*4d7e907cSAndroid Build Coastguard Worker * discarded can be arbitrary. 73*4d7e907cSAndroid Build Coastguard Worker * 74*4d7e907cSAndroid Build Coastguard Worker * `Work` that could not be abandoned or discarded immediately must be 75*4d7e907cSAndroid Build Coastguard Worker * marked to be discarded at the earliest opportunity, and must be returned 76*4d7e907cSAndroid Build Coastguard Worker * via IComponentListener::onWorkDone(). This must be completed within 77*4d7e907cSAndroid Build Coastguard Worker * 500ms. 78*4d7e907cSAndroid Build Coastguard Worker * 79*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 80*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The component has been successfully flushed. 81*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 82*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 83*4d7e907cSAndroid Build Coastguard Worker * @return flushedWorkBundle `WorkBundle` object containing flushed `Work` 84*4d7e907cSAndroid Build Coastguard Worker * items. 85*4d7e907cSAndroid Build Coastguard Worker */ 86*4d7e907cSAndroid Build Coastguard Worker flush( 87*4d7e907cSAndroid Build Coastguard Worker ) generates ( 88*4d7e907cSAndroid Build Coastguard Worker Status status, 89*4d7e907cSAndroid Build Coastguard Worker WorkBundle flushedWorkBundle 90*4d7e907cSAndroid Build Coastguard Worker ); 91*4d7e907cSAndroid Build Coastguard Worker 92*4d7e907cSAndroid Build Coastguard Worker /** 93*4d7e907cSAndroid Build Coastguard Worker * Drains the component, and optionally downstream components. This is a 94*4d7e907cSAndroid Build Coastguard Worker * signalling method; as such it does not wait for any work completion. 95*4d7e907cSAndroid Build Coastguard Worker * 96*4d7e907cSAndroid Build Coastguard Worker * The last `Work` item is marked as "drain-till-here", so the component is 97*4d7e907cSAndroid Build Coastguard Worker * notified not to wait for further `Work` before it processes what is 98*4d7e907cSAndroid Build Coastguard Worker * already queued. This method can also be used to set the end-of-stream 99*4d7e907cSAndroid Build Coastguard Worker * flag after `Work` has been queued. Client can continue to queue further 100*4d7e907cSAndroid Build Coastguard Worker * `Work` immediately after this method returns. 101*4d7e907cSAndroid Build Coastguard Worker * 102*4d7e907cSAndroid Build Coastguard Worker * This method must be supported in running (including tripped) states. 103*4d7e907cSAndroid Build Coastguard Worker * 104*4d7e907cSAndroid Build Coastguard Worker * `Work` that is completed must be returned via 105*4d7e907cSAndroid Build Coastguard Worker * IComponentListener::onWorkDone(). 106*4d7e907cSAndroid Build Coastguard Worker * 107*4d7e907cSAndroid Build Coastguard Worker * @param withEos Whether to drain the component with marking end-of-stream. 108*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 109*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The drain request has been successfully recorded. 110*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 111*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 112*4d7e907cSAndroid Build Coastguard Worker */ 113*4d7e907cSAndroid Build Coastguard Worker drain(bool withEos) generates (Status status); 114*4d7e907cSAndroid Build Coastguard Worker 115*4d7e907cSAndroid Build Coastguard Worker /** 116*4d7e907cSAndroid Build Coastguard Worker * Starts using a surface for output. 117*4d7e907cSAndroid Build Coastguard Worker * 118*4d7e907cSAndroid Build Coastguard Worker * This method must not block. 119*4d7e907cSAndroid Build Coastguard Worker * 120*4d7e907cSAndroid Build Coastguard Worker * @param blockPoolId Id of the `C2BlockPool` to be associated with the 121*4d7e907cSAndroid Build Coastguard Worker * output surface. 122*4d7e907cSAndroid Build Coastguard Worker * @param surface Output surface. 123*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 124*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The operation completed successfully. 125*4d7e907cSAndroid Build Coastguard Worker * - `CANNOT_DO` - The component does not support an output surface. 126*4d7e907cSAndroid Build Coastguard Worker * - `REFUSED` - The output surface cannot be accessed. 127*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 128*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 129*4d7e907cSAndroid Build Coastguard Worker */ 130*4d7e907cSAndroid Build Coastguard Worker setOutputSurface( 131*4d7e907cSAndroid Build Coastguard Worker uint64_t blockPoolId, 132*4d7e907cSAndroid Build Coastguard Worker @2.0::IGraphicBufferProducer surface 133*4d7e907cSAndroid Build Coastguard Worker ) generates ( 134*4d7e907cSAndroid Build Coastguard Worker Status status 135*4d7e907cSAndroid Build Coastguard Worker ); 136*4d7e907cSAndroid Build Coastguard Worker 137*4d7e907cSAndroid Build Coastguard Worker /** 138*4d7e907cSAndroid Build Coastguard Worker * Starts using an input surface. 139*4d7e907cSAndroid Build Coastguard Worker * 140*4d7e907cSAndroid Build Coastguard Worker * The component must be in running state. 141*4d7e907cSAndroid Build Coastguard Worker * 142*4d7e907cSAndroid Build Coastguard Worker * @param inputSurface Input surface to connect to. 143*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 144*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The operation completed successfully. 145*4d7e907cSAndroid Build Coastguard Worker * - `CANNOT_DO` - The component does not support an input surface. 146*4d7e907cSAndroid Build Coastguard Worker * - `BAD_STATE` - The component is not in running state. 147*4d7e907cSAndroid Build Coastguard Worker * - `DUPLICATE` - The component is already connected to an input surface. 148*4d7e907cSAndroid Build Coastguard Worker * - `REFUSED` - The input surface is already in use. 149*4d7e907cSAndroid Build Coastguard Worker * - `NO_MEMORY` - Not enough memory to start the component. 150*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 151*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 152*4d7e907cSAndroid Build Coastguard Worker * @return connection `IInputSurfaceConnection` object, which can be used to 153*4d7e907cSAndroid Build Coastguard Worker * query and configure properties of the connection. This cannot be 154*4d7e907cSAndroid Build Coastguard Worker * null. 155*4d7e907cSAndroid Build Coastguard Worker */ 156*4d7e907cSAndroid Build Coastguard Worker connectToInputSurface( 157*4d7e907cSAndroid Build Coastguard Worker IInputSurface inputSurface 158*4d7e907cSAndroid Build Coastguard Worker ) generates ( 159*4d7e907cSAndroid Build Coastguard Worker Status status, 160*4d7e907cSAndroid Build Coastguard Worker IInputSurfaceConnection connection 161*4d7e907cSAndroid Build Coastguard Worker ); 162*4d7e907cSAndroid Build Coastguard Worker 163*4d7e907cSAndroid Build Coastguard Worker /** 164*4d7e907cSAndroid Build Coastguard Worker * Starts using an OMX input surface. 165*4d7e907cSAndroid Build Coastguard Worker * 166*4d7e907cSAndroid Build Coastguard Worker * The component must be in running state. 167*4d7e907cSAndroid Build Coastguard Worker * 168*4d7e907cSAndroid Build Coastguard Worker * This method is similar to connectToInputSurface(), but it takes an OMX 169*4d7e907cSAndroid Build Coastguard Worker * input surface (as a pair of `IGraphicBufferProducer` and 170*4d7e907cSAndroid Build Coastguard Worker * `IGraphicBufferSource`) instead of Codec2's own `IInputSurface`. 171*4d7e907cSAndroid Build Coastguard Worker * 172*4d7e907cSAndroid Build Coastguard Worker * @param producer Producer component of an OMX input surface. 173*4d7e907cSAndroid Build Coastguard Worker * @param source Source component of an OMX input surface. 174*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 175*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The operation completed successfully. 176*4d7e907cSAndroid Build Coastguard Worker * - `CANNOT_DO` - The component does not support an OMX input surface. 177*4d7e907cSAndroid Build Coastguard Worker * - `BAD_STATE` - The component is not in running state. 178*4d7e907cSAndroid Build Coastguard Worker * - `DUPLICATE` - The component is already connected to an input surface. 179*4d7e907cSAndroid Build Coastguard Worker * - `REFUSED` - The input surface is already in use. 180*4d7e907cSAndroid Build Coastguard Worker * - `NO_MEMORY` - Not enough memory to start the component. 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 connection `IInputSurfaceConnection` object, which can be used to 184*4d7e907cSAndroid Build Coastguard Worker * query and configure properties of the connection. This cannot be 185*4d7e907cSAndroid Build Coastguard Worker * null. 186*4d7e907cSAndroid Build Coastguard Worker */ 187*4d7e907cSAndroid Build Coastguard Worker connectToOmxInputSurface( 188*4d7e907cSAndroid Build Coastguard Worker @1.0::IGraphicBufferProducer producer, 189*4d7e907cSAndroid Build Coastguard Worker IGraphicBufferSource source 190*4d7e907cSAndroid Build Coastguard Worker ) generates ( 191*4d7e907cSAndroid Build Coastguard Worker Status status, 192*4d7e907cSAndroid Build Coastguard Worker IInputSurfaceConnection connection 193*4d7e907cSAndroid Build Coastguard Worker ); 194*4d7e907cSAndroid Build Coastguard Worker 195*4d7e907cSAndroid Build Coastguard Worker /** 196*4d7e907cSAndroid Build Coastguard Worker * Stops using an input surface. 197*4d7e907cSAndroid Build Coastguard Worker * 198*4d7e907cSAndroid Build Coastguard Worker * The component must be in running state. 199*4d7e907cSAndroid Build Coastguard Worker * 200*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 201*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The operation completed successfully. 202*4d7e907cSAndroid Build Coastguard Worker * - `CANNOT_DO` - The component does not support an input surface. 203*4d7e907cSAndroid Build Coastguard Worker * - `BAD_STATE` - The component is not in running state. 204*4d7e907cSAndroid Build Coastguard Worker * - `NOT_FOUND` - The component is not connected to an input surface. 205*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 206*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 207*4d7e907cSAndroid Build Coastguard Worker */ 208*4d7e907cSAndroid Build Coastguard Worker disconnectFromInputSurface() generates (Status Status); 209*4d7e907cSAndroid Build Coastguard Worker 210*4d7e907cSAndroid Build Coastguard Worker /** 211*4d7e907cSAndroid Build Coastguard Worker * Creates a local `C2BlockPool` backed by the given allocator and returns 212*4d7e907cSAndroid Build Coastguard Worker * its id. 213*4d7e907cSAndroid Build Coastguard Worker * 214*4d7e907cSAndroid Build Coastguard Worker * The returned @p blockPoolId is the only way the client can refer to a 215*4d7e907cSAndroid Build Coastguard Worker * `C2BlockPool` object in the component. The id can be passed to 216*4d7e907cSAndroid Build Coastguard Worker * setOutputSurface() or used in some C2Param objects later. 217*4d7e907cSAndroid Build Coastguard Worker * 218*4d7e907cSAndroid Build Coastguard Worker * The created `C2BlockPool` object can be destroyed by calling 219*4d7e907cSAndroid Build Coastguard Worker * destroyBlockPool(), reset() or release(). reset() and release() must 220*4d7e907cSAndroid Build Coastguard Worker * destroy all `C2BlockPool` objects that have been created. 221*4d7e907cSAndroid Build Coastguard Worker * 222*4d7e907cSAndroid Build Coastguard Worker * @param allocatorId Id of a `C2Allocator`. 223*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 224*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The operation completed successfully. 225*4d7e907cSAndroid Build Coastguard Worker * - `NO_MEMORY` - Not enough memory to create the pool. 226*4d7e907cSAndroid Build Coastguard Worker * - `BAD_VALUE` - @p allocatorId is not recognized. 227*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 228*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 229*4d7e907cSAndroid Build Coastguard Worker * @return blockPoolId Id of the created C2BlockPool object. This may be 230*4d7e907cSAndroid Build Coastguard Worker * used in setOutputSurface() if the allocator 231*4d7e907cSAndroid Build Coastguard Worker * @return configurable Configuration interface for the created pool. This 232*4d7e907cSAndroid Build Coastguard Worker * must not be null. 233*4d7e907cSAndroid Build Coastguard Worker */ 234*4d7e907cSAndroid Build Coastguard Worker createBlockPool(uint32_t allocatorId) generates ( 235*4d7e907cSAndroid Build Coastguard Worker Status status, 236*4d7e907cSAndroid Build Coastguard Worker uint64_t blockPoolId, 237*4d7e907cSAndroid Build Coastguard Worker IConfigurable configurable 238*4d7e907cSAndroid Build Coastguard Worker ); 239*4d7e907cSAndroid Build Coastguard Worker 240*4d7e907cSAndroid Build Coastguard Worker /** 241*4d7e907cSAndroid Build Coastguard Worker * Destroys a local block pool previously created by createBlockPool(). 242*4d7e907cSAndroid Build Coastguard Worker * 243*4d7e907cSAndroid Build Coastguard Worker * @param blockPoolId Id of a `C2BlockPool` that was previously returned by 244*4d7e907cSAndroid Build Coastguard Worker * createBlockPool(). 245*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 246*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The operation completed successfully. 247*4d7e907cSAndroid Build Coastguard Worker * - `NOT_FOUND` - The supplied blockPoolId is not valid. 248*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 249*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 250*4d7e907cSAndroid Build Coastguard Worker */ 251*4d7e907cSAndroid Build Coastguard Worker destroyBlockPool(uint64_t blockPoolId) generates (Status status); 252*4d7e907cSAndroid Build Coastguard Worker 253*4d7e907cSAndroid Build Coastguard Worker // STATE CHANGE METHODS 254*4d7e907cSAndroid Build Coastguard Worker // ========================================================================= 255*4d7e907cSAndroid Build Coastguard Worker 256*4d7e907cSAndroid Build Coastguard Worker /** 257*4d7e907cSAndroid Build Coastguard Worker * Starts the component. 258*4d7e907cSAndroid Build Coastguard Worker * 259*4d7e907cSAndroid Build Coastguard Worker * This method must be supported in stopped state as well as tripped state. 260*4d7e907cSAndroid Build Coastguard Worker * 261*4d7e907cSAndroid Build Coastguard Worker * If the return value is `OK`, the component must be in the running state. 262*4d7e907cSAndroid Build Coastguard Worker * If the return value is `BAD_STATE` or `DUPLICATE`, no state change is 263*4d7e907cSAndroid Build Coastguard Worker * expected as a response to this call. Otherwise, the component must be in 264*4d7e907cSAndroid Build Coastguard Worker * the stopped state. 265*4d7e907cSAndroid Build Coastguard Worker * 266*4d7e907cSAndroid Build Coastguard Worker * If a component is in the tripped state and start() is called while the 267*4d7e907cSAndroid Build Coastguard Worker * component configuration still results in a trip, start() must succeed and 268*4d7e907cSAndroid Build Coastguard Worker * a new onTripped() callback must be used to communicate the configuration 269*4d7e907cSAndroid Build Coastguard Worker * conflict that results in the new trip. 270*4d7e907cSAndroid Build Coastguard Worker * 271*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 272*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The component has started successfully. 273*4d7e907cSAndroid Build Coastguard Worker * - `BAD_STATE` - Component is not in stopped or tripped state. 274*4d7e907cSAndroid Build Coastguard Worker * - `DUPLICATE` - When called during another start call from another 275*4d7e907cSAndroid Build Coastguard Worker * thread. 276*4d7e907cSAndroid Build Coastguard Worker * - `NO_MEMORY` - Not enough memory to start the component. 277*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 278*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 279*4d7e907cSAndroid Build Coastguard Worker */ 280*4d7e907cSAndroid Build Coastguard Worker start() generates (Status status); 281*4d7e907cSAndroid Build Coastguard Worker 282*4d7e907cSAndroid Build Coastguard Worker /** 283*4d7e907cSAndroid Build Coastguard Worker * Stops the component. 284*4d7e907cSAndroid Build Coastguard Worker * 285*4d7e907cSAndroid Build Coastguard Worker * This method must be supported in running (including tripped) state. 286*4d7e907cSAndroid Build Coastguard Worker * 287*4d7e907cSAndroid Build Coastguard Worker * This method must return withing 500ms. 288*4d7e907cSAndroid Build Coastguard Worker * 289*4d7e907cSAndroid Build Coastguard Worker * Upon this call, all pending `Work` must be abandoned. 290*4d7e907cSAndroid Build Coastguard Worker * 291*4d7e907cSAndroid Build Coastguard Worker * If the return value is `BAD_STATE` or `DUPLICATE`, no state change is 292*4d7e907cSAndroid Build Coastguard Worker * expected as a response to this call. For all other return values, the 293*4d7e907cSAndroid Build Coastguard Worker * component must be in the stopped state. 294*4d7e907cSAndroid Build Coastguard Worker * 295*4d7e907cSAndroid Build Coastguard Worker * This does not alter any settings and tunings that may have resulted in a 296*4d7e907cSAndroid Build Coastguard Worker * tripped state. 297*4d7e907cSAndroid Build Coastguard Worker * 298*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 299*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The component has stopped successfully. 300*4d7e907cSAndroid Build Coastguard Worker * - `BAD_STATE` - Component is not in running state. 301*4d7e907cSAndroid Build Coastguard Worker * - `DUPLICATE` - When called during another stop call from another 302*4d7e907cSAndroid Build Coastguard Worker * thread. 303*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 304*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 305*4d7e907cSAndroid Build Coastguard Worker */ 306*4d7e907cSAndroid Build Coastguard Worker stop() generates (Status status); 307*4d7e907cSAndroid Build Coastguard Worker 308*4d7e907cSAndroid Build Coastguard Worker /** 309*4d7e907cSAndroid Build Coastguard Worker * Resets the component. 310*4d7e907cSAndroid Build Coastguard Worker * 311*4d7e907cSAndroid Build Coastguard Worker * This method must be supported in all (including tripped) states other 312*4d7e907cSAndroid Build Coastguard Worker * than released. 313*4d7e907cSAndroid Build Coastguard Worker * 314*4d7e907cSAndroid Build Coastguard Worker * This method must be supported during any other blocking call. 315*4d7e907cSAndroid Build Coastguard Worker * 316*4d7e907cSAndroid Build Coastguard Worker * This method must return withing 500ms. 317*4d7e907cSAndroid Build Coastguard Worker * 318*4d7e907cSAndroid Build Coastguard Worker * When this call returns, if @p status is `OK`, all `Work` items must 319*4d7e907cSAndroid Build Coastguard Worker * have been abandoned, and all resources (including `C2BlockPool` objects 320*4d7e907cSAndroid Build Coastguard Worker * previously created by createBlockPool()) must have been released. 321*4d7e907cSAndroid Build Coastguard Worker * 322*4d7e907cSAndroid Build Coastguard Worker * If the return value is `BAD_STATE` or `DUPLICATE`, no state change is 323*4d7e907cSAndroid Build Coastguard Worker * expected as a response to this call. For all other return values, the 324*4d7e907cSAndroid Build Coastguard Worker * component must be in the stopped state. 325*4d7e907cSAndroid Build Coastguard Worker * 326*4d7e907cSAndroid Build Coastguard Worker * This brings settings back to their default, "guaranteeing" no tripped 327*4d7e907cSAndroid Build Coastguard Worker * state. 328*4d7e907cSAndroid Build Coastguard Worker * 329*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 330*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The component has been reset. 331*4d7e907cSAndroid Build Coastguard Worker * - `BAD_STATE` - Component is in released state. 332*4d7e907cSAndroid Build Coastguard Worker * - `DUPLICATE` - When called during another reset call from another 333*4d7e907cSAndroid Build Coastguard Worker * thread. 334*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 335*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 336*4d7e907cSAndroid Build Coastguard Worker */ 337*4d7e907cSAndroid Build Coastguard Worker reset() generates (Status status); 338*4d7e907cSAndroid Build Coastguard Worker 339*4d7e907cSAndroid Build Coastguard Worker /** 340*4d7e907cSAndroid Build Coastguard Worker * Releases the component. 341*4d7e907cSAndroid Build Coastguard Worker * 342*4d7e907cSAndroid Build Coastguard Worker * This method must be supported in stopped state. 343*4d7e907cSAndroid Build Coastguard Worker * 344*4d7e907cSAndroid Build Coastguard Worker * This method destroys the component. Upon return, if @p status is `OK` or 345*4d7e907cSAndroid Build Coastguard Worker * `DUPLICATE`, all resources must have been released. 346*4d7e907cSAndroid Build Coastguard Worker * 347*4d7e907cSAndroid Build Coastguard Worker * @return status Status of the call, which may be 348*4d7e907cSAndroid Build Coastguard Worker * - `OK` - The component has been released. 349*4d7e907cSAndroid Build Coastguard Worker * - `BAD_STATE` - The component is running. 350*4d7e907cSAndroid Build Coastguard Worker * - `DUPLICATE` - The component is already released. 351*4d7e907cSAndroid Build Coastguard Worker * - `TIMED_OUT` - The operation cannot be finished in a timely manner. 352*4d7e907cSAndroid Build Coastguard Worker * - `CORRUPTED` - Some unknown error occurred. 353*4d7e907cSAndroid Build Coastguard Worker */ 354*4d7e907cSAndroid Build Coastguard Worker release() generates (Status status); 355*4d7e907cSAndroid Build Coastguard Worker 356*4d7e907cSAndroid Build Coastguard Worker /** 357*4d7e907cSAndroid Build Coastguard Worker * Returns the @ref IComponentInterface instance associated to this 358*4d7e907cSAndroid Build Coastguard Worker * component. 359*4d7e907cSAndroid Build Coastguard Worker * 360*4d7e907cSAndroid Build Coastguard Worker * An @ref IConfigurable instance for the component can be obtained by calling 361*4d7e907cSAndroid Build Coastguard Worker * IComponentInterface::getConfigurable() on the returned @p intf. 362*4d7e907cSAndroid Build Coastguard Worker * 363*4d7e907cSAndroid Build Coastguard Worker * @return intf `IComponentInterface` instance. This must not be null. 364*4d7e907cSAndroid Build Coastguard Worker */ 365*4d7e907cSAndroid Build Coastguard Worker getInterface() generates (IComponentInterface intf); 366*4d7e907cSAndroid Build Coastguard Worker 367*4d7e907cSAndroid Build Coastguard Worker /** 368*4d7e907cSAndroid Build Coastguard Worker * Returns an @ref IInputSink instance that has the component as the 369*4d7e907cSAndroid Build Coastguard Worker * underlying implementation. 370*4d7e907cSAndroid Build Coastguard Worker * 371*4d7e907cSAndroid Build Coastguard Worker * @return sink `IInputSink` instance. 372*4d7e907cSAndroid Build Coastguard Worker */ 373*4d7e907cSAndroid Build Coastguard Worker asInputSink() generates (IInputSink sink); 374*4d7e907cSAndroid Build Coastguard Worker}; 375*4d7e907cSAndroid Build Coastguard Worker 376