You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
10 KiB
232 lines
10 KiB
/* |
|
* Copyright (C) 2016 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.graphics.mapper@2.0; |
|
|
|
import android.hardware.graphics.common@1.0; |
|
|
|
interface IMapper { |
|
struct BufferDescriptorInfo { |
|
/** |
|
* The width specifies how many columns of pixels must be in the |
|
* allocated buffer, but does not necessarily represent the offset in |
|
* columns between the same column in adjacent rows. The rows may be |
|
* padded. |
|
*/ |
|
uint32_t width; |
|
|
|
/** |
|
* The height specifies how many rows of pixels must be in the |
|
* allocated buffer. |
|
*/ |
|
uint32_t height; |
|
|
|
/** |
|
* The number of image layers that must be in the allocated buffer. |
|
*/ |
|
uint32_t layerCount; |
|
|
|
/** Buffer pixel format. */ |
|
PixelFormat format; |
|
|
|
/** |
|
* Buffer usage mask; valid flags can be found in the definition of |
|
* BufferUsage. |
|
*/ |
|
bitfield<BufferUsage> usage; |
|
}; |
|
|
|
struct Rect { |
|
int32_t left; |
|
int32_t top; |
|
int32_t width; |
|
int32_t height; |
|
}; |
|
|
|
/** |
|
* Creates a buffer descriptor. The descriptor can be used with IAllocator |
|
* to allocate buffers. |
|
* |
|
* Since the buffer descriptor fully describes a buffer, any device |
|
* dependent or device independent checks must be performed here whenever |
|
* possible. Specifically, when layered buffers are not supported, this |
|
* function must return UNSUPPORTED if layerCount is great than 1. |
|
* |
|
* @param descriptorInfo specifies the attributes of the descriptor. |
|
* @return error is NONE upon success. Otherwise, |
|
* BAD_VALUE when any of the specified attributes is |
|
* invalid or conflicting. |
|
* NO_RESOURCES when the creation cannot be fullfilled at |
|
* this time. |
|
* UNSUPPORTED when any of the specified attributes is |
|
* not supported. |
|
* @return descriptor is the newly created buffer descriptor. |
|
*/ |
|
@entry |
|
@callflow(next="*") |
|
createDescriptor(BufferDescriptorInfo descriptorInfo) |
|
generates (Error error, |
|
BufferDescriptor descriptor); |
|
|
|
/** |
|
* Imports a raw buffer handle to create an imported buffer handle for use |
|
* with the rest of the mapper or with other in-process libraries. |
|
* |
|
* A buffer handle is considered raw when it is cloned (e.g., with |
|
* native_handle_clone) from another buffer handle locally, or when it is |
|
* received from another HAL server/client or another process. A raw |
|
* buffer handle must not be used to access the underlying graphics |
|
* buffer. It must be imported to create an imported handle first. |
|
* |
|
* This function must at least validate the raw handle before creating the |
|
* imported handle. It must also support importing the same raw handle |
|
* multiple times to create multiple imported handles. The imported handle |
|
* must be considered valid everywhere in the process, including in |
|
* another instance of the mapper. |
|
* |
|
* Because of passthrough HALs, a raw buffer handle received from a HAL |
|
* may actually have been imported in the process. importBuffer must treat |
|
* such a handle as if it is raw and must not return BAD_BUFFER. The |
|
* returned handle is independent from the input handle as usual, and |
|
* freeBuffer must be called on it when it is no longer needed. |
|
* |
|
* @param rawHandle is the raw buffer handle to import. |
|
* @return error is NONE upon success. Otherwise, |
|
* BAD_BUFFER when the raw handle is invalid. |
|
* NO_RESOURCES when the raw handle cannot be imported at |
|
* this time. |
|
* @return buffer is the imported buffer handle and has the type |
|
* buffer_handle_t. |
|
*/ |
|
@entry |
|
@callflow(next="*") |
|
importBuffer(handle rawHandle) generates (Error error, pointer buffer); |
|
|
|
/** |
|
* Frees a buffer handle. Buffer handles returned by importBuffer must be |
|
* freed with this function when no longer needed. |
|
* |
|
* This function must free up all resources allocated by importBuffer for |
|
* the imported handle. For example, if the imported handle was created |
|
* with native_handle_create, this function must call native_handle_close |
|
* and native_handle_delete. |
|
* |
|
* @return error is NONE upon success. Otherwise, |
|
* BAD_BUFFER when the buffer is invalid. |
|
*/ |
|
@exit |
|
@callflow(next="*") |
|
freeBuffer(pointer buffer) generates (Error error); |
|
|
|
/** |
|
* Locks the given buffer for the specified CPU usage. |
|
* |
|
* Locking the same buffer simultaneously from multiple threads is |
|
* permitted, but if any of the threads attempt to lock the buffer for |
|
* writing, the behavior is undefined, except that it must not cause |
|
* process termination or block the client indefinitely. Leaving the |
|
* buffer content in an indeterminate state or returning an error are both |
|
* acceptable. |
|
* |
|
* The client must not modify the content of the buffer outside of |
|
* accessRegion, and the device need not guarantee that content outside of |
|
* accessRegion is valid for reading. The result of reading or writing |
|
* outside of accessRegion is undefined, except that it must not cause |
|
* process termination. |
|
* |
|
* data will be filled with a pointer to the locked buffer memory. This |
|
* address will represent the top-left corner of the entire buffer, even |
|
* if accessRegion does not begin at the top-left corner. |
|
* |
|
* @param buffer is the buffer to lock. |
|
* @param cpuUsage specifies one or more CPU usage flags to request. |
|
* @param accessRegion is the portion of the buffer that the client |
|
* intends to access. |
|
* @param acquireFence, when non-empty, is a handle containing a file |
|
* descriptor referring to a sync fence object, which will be |
|
* signaled when it is safe for the mapper to lock the buffer. If |
|
* it is already safe to lock, acquireFence is empty. |
|
* @return error is NONE upon success. Otherwise, |
|
* BAD_BUFFER when the buffer is invalid or is |
|
* incompatible with this function. |
|
* BAD_VALUE when cpuUsage is 0, contains non-CPU usage |
|
* flags, or is incompatible with the buffer. |
|
* NO_RESOURCES when the buffer cannot be locked at this |
|
* time, but locking may succeed at a future |
|
* time. |
|
* @return data is a CPU-accessible pointer to the buffer data. |
|
*/ |
|
@callflow(next="unlock") |
|
lock(pointer buffer, |
|
bitfield<BufferUsage> cpuUsage, |
|
Rect accessRegion, |
|
handle acquireFence) |
|
generates (Error error, |
|
pointer data); |
|
|
|
/** |
|
* This is largely the same as lock(), except that instead of returning a |
|
* pointer directly to the buffer data, it returns an YCbCrLayout struct |
|
* describing how to access the data planes. |
|
* |
|
* This function must work on buffers with PixelFormat::YCbCr_*_888 if |
|
* supported by the device, as well as with any other formats requested by |
|
* multimedia codecs when they are configured with a |
|
* flexible-YUV-compatible color format. |
|
* |
|
* @param buffer is the buffer to lock. |
|
* @param cpuUsage specifies one or more CPU usage flags to request. |
|
* @param accessRegion is the portion of the buffer that the client |
|
* intends to access. |
|
* @param acquireFence, when non-empty, is a handle containing a file |
|
* descriptor referring to a sync fence object, which will be |
|
* signaled when it is safe for the mapper to lock the buffer. If |
|
* it is already safe to lock, acquireFence is empty. |
|
* @return error is NONE upon success. Otherwise, |
|
* BAD_BUFFER when the buffer is invalid or is |
|
* incompatible with this function. |
|
* BAD_VALUE when cpuUsage is 0, contains non-CPU usage |
|
* flags, or is incompatible with the buffer. |
|
* NO_RESOURCES when the buffer cannot be locked at this |
|
* time, but locking may succeed at a future |
|
* time. |
|
* @return layout is the data layout of the buffer. |
|
*/ |
|
@callflow(next="unlock") |
|
lockYCbCr(pointer buffer, |
|
bitfield<BufferUsage> cpuUsage, |
|
Rect accessRegion, |
|
handle acquireFence) |
|
generates (Error error, |
|
YCbCrLayout layout); |
|
|
|
/** |
|
* Unlocks a buffer to indicate all CPU accesses to the buffer have |
|
* completed. |
|
* |
|
* @param buffer is the buffer to unlock. |
|
* @return error is NONE upon success. Otherwise, |
|
* BAD_BUFFER when the buffer is invalid or not locked. |
|
* @return releaseFence, when non-empty, is a handle containing a file |
|
* descriptor referring to a sync fence object. The sync fence |
|
* object will be signaled when the mapper has completed any |
|
* pending work. |
|
*/ |
|
@callflow(next="*") |
|
unlock(pointer buffer) |
|
generates (Error error, |
|
handle releaseFence); |
|
};
|
|
|