blob: d8ab59774fc46fde8011560cbb3ce59da9ab5262 [file] [log] [blame]
/*
* 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;
};