/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.hardware.media.bufferpool@1.0; enum ResultStatus : int32_t { OK = 0, NO_MEMORY = 1, ALREADY_EXISTS = 2, NOT_FOUND = 3, CRITICAL_ERROR = 4, }; /** * Generic buffer for fast recycling for media/stagefright. * * During media pipeline buffer references are created, shared and * destroyed frequently. The underlying buffers are allocated on demand * by a buffer pool, and are recycled to the buffer pool when they are * no longer referenced by the clients. * * E.g. ion or gralloc buffer */ struct Buffer { uint32_t id; handle buffer; }; /** * Buffer ownership status for the specified client. * Buffer transfer status for the specified buffer transafer transaction. * BufferStatus is posted along with BufferStatusMessage from a client to * the buffer pool for synchronization after status change. */ enum BufferStatus : int32_t { /** No longer used by the specified client. */ NOT_USED = 0, /** Buffer is acquired by the specified client. */ USED = 1, /** Buffer is sent by the specified client. */ TRANSFER_TO = 2, /** Buffer transfer is acked by the receiver client. */ TRANSFER_FROM = 3, /** Buffer transfer is timed out by receiver client. */ TRANSFER_TIMEOUT = 4, /** Buffer transfer is not acked by the receiver. */ TRANSFER_LOST = 5, /** Buffer fetch request from the client. */ TRANSFER_FETCH = 6, /** Buffer transaction succeeded. */ TRANSFER_OK = 7, /** Buffer transaction failure. */ TRANSFER_ERROR = 8, }; /** * Buffer ownership status change message. This message is * sent via fmq to the buffer pool from client processes. */ struct BufferStatusMessage { /** * Transaction Id = (SenderId : sender local transaction Id) * Transaction Id is created from sender and posted via fmq within * TRANSFER_TO message. */ uint64_t transactionId; uint32_t bufferId; BufferStatus newStatus; /** Used by the buffer pool. not by client. */ int64_t connectionId; /** Valid only when TRANSFER_TO is posted. */ int64_t targetConnectionId; /** * Used by the buffer pool, not by client. * Monotonic timestamp in Us since fixed point in time as decided * by the sender of the message */ int64_t timestampUs; };