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.
455 lines
18 KiB
455 lines
18 KiB
/*
|
|
* 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.graphics.composer@2.2;
|
|
|
|
import android.hardware.graphics.common@1.1::ColorMode;
|
|
import android.hardware.graphics.common@1.1::Dataspace;
|
|
import android.hardware.graphics.common@1.1::PixelFormat;
|
|
import android.hardware.graphics.common@1.1::RenderIntent;
|
|
import @2.1::IComposerClient;
|
|
import @2.1::Display;
|
|
import @2.1::Error;
|
|
import @2.1::IComposerClient;
|
|
|
|
interface IComposerClient extends @2.1::IComposerClient {
|
|
|
|
enum PowerMode : @2.1::IComposerClient.PowerMode {
|
|
/**
|
|
* The display is configured as in ON but may stop applying display
|
|
* updates from the client. This is effectively a hint to the device
|
|
* that drawing to the display has been suspended and that the the
|
|
* device must remain on and continue displaying its current contents
|
|
* indefinitely until the power mode changes.
|
|
*
|
|
* This mode may also be used as a signal to enable hardware-based
|
|
* functionality to take over the display and manage it autonomously
|
|
* to implement a low power always-on display.
|
|
*/
|
|
ON_SUSPEND = 4
|
|
};
|
|
|
|
/**
|
|
* Following enums define keys for metadata defined by SMPTE ST 2086:2014
|
|
* and CTA 861.3.
|
|
*/
|
|
enum PerFrameMetadataKey : int32_t {
|
|
/** SMPTE ST 2084:2014.
|
|
* Coordinates defined in CIE 1931 xy chromaticity space
|
|
*/
|
|
/** SMPTE ST 2084:2014 */
|
|
DISPLAY_RED_PRIMARY_X,
|
|
/** SMPTE ST 2084:2014 */
|
|
DISPLAY_RED_PRIMARY_Y,
|
|
/** SMPTE ST 2084:2014 */
|
|
DISPLAY_GREEN_PRIMARY_X,
|
|
/** SMPTE ST 2084:2014 */
|
|
DISPLAY_GREEN_PRIMARY_Y,
|
|
/** SMPTE ST 2084:2014 */
|
|
DISPLAY_BLUE_PRIMARY_X,
|
|
/** SMPTE ST 2084:2014 */
|
|
DISPLAY_BLUE_PRIMARY_Y,
|
|
/** SMPTE ST 2084:2014 */
|
|
WHITE_POINT_X,
|
|
/** SMPTE ST 2084:2014 */
|
|
WHITE_POINT_Y,
|
|
/** SMPTE ST 2084:2014.
|
|
* Units: nits
|
|
* max as defined by ST 2048: 10,000 nits
|
|
*/
|
|
MAX_LUMINANCE,
|
|
/** SMPTE ST 2084:2014 */
|
|
MIN_LUMINANCE,
|
|
/** CTA 861.3 */
|
|
MAX_CONTENT_LIGHT_LEVEL,
|
|
/** CTA 861.3 */
|
|
MAX_FRAME_AVERAGE_LIGHT_LEVEL,
|
|
};
|
|
|
|
struct PerFrameMetadata {
|
|
PerFrameMetadataKey key;
|
|
float value;
|
|
};
|
|
|
|
struct FloatColor {
|
|
float r;
|
|
float g;
|
|
float b;
|
|
float a;
|
|
};
|
|
|
|
enum Command : @2.1::IComposerClient.Command {
|
|
/**
|
|
* SET_LAYER_PER_FRAME_METADATA has this pseudo prototype
|
|
*
|
|
* setLayerPerFrameMetadata(Display display, Layer layer,
|
|
* vec<PerFrameMetadata> data);
|
|
*
|
|
* Sets the PerFrameMetadata for the display. This metadata must be used
|
|
* by the implementation to better tone map content to that display.
|
|
*
|
|
* This is a method that may be called every frame. Thus it's
|
|
* implemented using buffered transport.
|
|
* SET_LAYER_PER_FRAME_METADATA is the command used by the buffered transport
|
|
* mechanism.
|
|
*/
|
|
SET_LAYER_PER_FRAME_METADATA = 0x303 << @2.1::IComposerClient.Command:OPCODE_SHIFT,
|
|
|
|
/**
|
|
* SET_LAYER_COLOR has this pseudo prototype
|
|
*
|
|
* setLayerColor(FloatColor color);
|
|
*
|
|
* Sets the color of the given layer. If the composition type of the layer
|
|
* is not Composition::SOLID_COLOR, this call must succeed and have no
|
|
* other effect.
|
|
*
|
|
* @param color is the new color using float type.
|
|
*/
|
|
SET_LAYER_FLOAT_COLOR = 0x40c << @2.1::IComposerClient.Command:OPCODE_SHIFT,
|
|
};
|
|
|
|
/**
|
|
* Returns the PerFrameMetadataKeys that are supported by this device.
|
|
*
|
|
* @param display is the display on which to create the layer.
|
|
* @return keys is the vector of PerFrameMetadataKey keys that are
|
|
* supported by this device.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* UNSUPPORTED if not supported on underlying HAL
|
|
*/
|
|
getPerFrameMetadataKeys(Display display)
|
|
generates (Error error,
|
|
vec<PerFrameMetadataKey> keys);
|
|
|
|
/**
|
|
* getReadbackBufferAttributes
|
|
* Returns the format which should be used when allocating a buffer for use by
|
|
* device readback as well as the dataspace in which its contents should be
|
|
* interpreted.
|
|
*
|
|
* The width and height of this buffer must be those of the currently-active
|
|
* display configuration, and the usage flags must consist of the following:
|
|
* BufferUsage::CPU_READ | BufferUsage::GPU_TEXTURE |
|
|
* BufferUsage::COMPOSER_OUTPUT
|
|
*
|
|
* The format and dataspace provided must be sufficient such that if a
|
|
* correctly-configured buffer is passed into setReadbackBuffer, filled by
|
|
* the device, and then displayed by the client as a full-screen buffer, the
|
|
* output of the display remains the same (subject to the note about protected
|
|
* content in the description of setReadbackBuffer).
|
|
*
|
|
* If the active configuration or color mode of this display has changed
|
|
* since a previous call to this function, it must be called again prior to
|
|
* setting a readback buffer such that the returned format and dataspace can
|
|
* be updated accordingly.
|
|
*
|
|
* Parameters:
|
|
* @param display - the display on which to create the layer.
|
|
*
|
|
* @return format - the format the client should use when allocating a device
|
|
* readback buffer
|
|
* @return dataspace - the dataspace to use when interpreting the
|
|
* contents of a device readback buffer
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_DISPLAY when an invalid display handle was passed in.
|
|
* UNSUPPORTED if not supported on underlying HAL
|
|
*
|
|
* See also:
|
|
* setReadbackBuffer
|
|
* getReadbackBufferFence
|
|
*/
|
|
getReadbackBufferAttributes(Display display)
|
|
generates (Error error,
|
|
PixelFormat format,
|
|
Dataspace dataspace);
|
|
|
|
/**
|
|
* getReadbackBufferFence
|
|
* Returns an acquire sync fence file descriptor which must signal when the
|
|
* buffer provided to setReadbackBuffer has been filled by the device and is
|
|
* safe for the client to read.
|
|
*
|
|
* If it is already safe to read from this buffer, -1 may be returned instead.
|
|
* The client takes ownership of this file descriptor and is responsible for
|
|
* closing it when it is no longer needed.
|
|
*
|
|
* This function must be called immediately after the composition cycle being
|
|
* captured into the readback buffer. The complete ordering of a readback buffer
|
|
* capture is as follows:
|
|
*
|
|
* getReadbackBufferAttributes
|
|
* // Readback buffer is allocated
|
|
* // Many frames may pass
|
|
*
|
|
* setReadbackBuffer
|
|
* validateDisplay
|
|
* presentDisplay
|
|
* getReadbackBufferFence
|
|
* // Implicitly wait on the acquire fence before accessing the buffer
|
|
*
|
|
* Parameters:
|
|
* @param display - the display on which to create the layer.
|
|
*
|
|
* @return acquireFence - a sync fence file descriptor as described above; pointer
|
|
* must be non-NULL
|
|
* @return error - is HWC2_ERROR_NONE or one of the following errors:
|
|
* BAD_DISPLAY - an invalid display handle was passed in
|
|
* NO_RESOURCES - the readback operation was successful, but
|
|
* resulted in a different validate result than would
|
|
* have occurred without readback
|
|
* UNSUPPORTED - the readback operation was unsuccessful because of
|
|
* resource constraints, the presence of protected
|
|
* content, or other reasons; -1 must be returned for
|
|
* acquireFence
|
|
*
|
|
* See also:
|
|
* getReadbackBufferAttributes
|
|
* setReadbackBuffer
|
|
*/
|
|
getReadbackBufferFence(Display display)
|
|
generates (Error error,
|
|
handle acquireFence);
|
|
|
|
/**
|
|
* setReadbackBuffer
|
|
* Sets the readback buffer to be filled with the contents of the next
|
|
* composition performed for this display (i.e., the contents present at the
|
|
* time of the next validateDisplay/presentDisplay cycle).
|
|
*
|
|
* This buffer must have been allocated as described in
|
|
* getReadbackBufferAttributes and is in the dataspace provided by the same.
|
|
*
|
|
* If there is hardware protected content on the display at the time of the next
|
|
* composition, the area of the readback buffer covered by such content must be
|
|
* completely black. Any areas of the buffer not covered by such content may
|
|
* optionally be black as well.
|
|
*
|
|
* The release fence file descriptor provided works identically to the one
|
|
* described for setOutputBuffer.
|
|
*
|
|
* This function must not be called between any call to validateDisplay and a
|
|
* subsequent call to presentDisplay.
|
|
*
|
|
* Parameters:
|
|
* @param display - the display on which to create the layer.
|
|
* @param buffer - the new readback buffer
|
|
* @param releaseFence - a sync fence file descriptor as described in setOutputBuffer
|
|
*
|
|
* @return error - is HWC2_ERROR_NONE or one of the following errors:
|
|
* HWC2_ERROR_BAD_DISPLAY - an invalid display handle was passed in
|
|
* HWC2_ERROR_BAD_PARAMETER - the new readback buffer handle was invalid
|
|
*
|
|
* See also:
|
|
* getReadbackBufferAttributes
|
|
* getReadbackBufferFence
|
|
*/
|
|
setReadbackBuffer(Display display, handle buffer, handle releaseFence) generates (Error error);
|
|
|
|
/**
|
|
* createVirtualDisplay_2_2
|
|
* Creates a new virtual display with the given width and height. The
|
|
* format passed into this function is the default format requested by the
|
|
* consumer of the virtual display output buffers.
|
|
*
|
|
* The display must be assumed to be on from the time the first frame is
|
|
* presented until the display is destroyed.
|
|
*
|
|
* @param width is the width in pixels.
|
|
* @param height is the height in pixels.
|
|
* @param formatHint is the default output buffer format selected by
|
|
* the consumer.
|
|
* @param outputBufferSlotCount is the number of output buffer slots to be
|
|
* reserved.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* UNSUPPORTED when the width or height is too large for the
|
|
* device to be able to create a virtual display.
|
|
* NO_RESOURCES when the device is unable to create a new virtual
|
|
* display at this time.
|
|
* @return display is the newly-created virtual display.
|
|
* @return format is the format of the buffer the device will produce.
|
|
*/
|
|
@callflow(next="*")
|
|
createVirtualDisplay_2_2(uint32_t width,
|
|
uint32_t height,
|
|
PixelFormat formatHint,
|
|
uint32_t outputBufferSlotCount)
|
|
generates (Error error,
|
|
Display display,
|
|
PixelFormat format);
|
|
|
|
/**
|
|
* getClientTargetSupport_2_2
|
|
* Returns whether a client target with the given properties can be
|
|
* handled by the device.
|
|
*
|
|
* This function must return true for a client target with width and
|
|
* height equal to the active display configuration dimensions,
|
|
* PixelFormat::RGBA_8888, and Dataspace::UNKNOWN. It is not required to
|
|
* return true for any other configuration.
|
|
*
|
|
* @param display is the display to query.
|
|
* @param width is the client target width in pixels.
|
|
* @param height is the client target height in pixels.
|
|
* @param format is the client target format.
|
|
* @param dataspace is the client target dataspace, as described in
|
|
* setLayerDataspace.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_DISPLAY when an invalid display handle was passed in.
|
|
* UNSUPPORTED when the given configuration is not supported.
|
|
*/
|
|
@callflow(next="*")
|
|
getClientTargetSupport_2_2(Display display,
|
|
uint32_t width,
|
|
uint32_t height,
|
|
PixelFormat format,
|
|
Dataspace dataspace)
|
|
generates (Error error);
|
|
/**
|
|
* setPowerMode_2_2
|
|
* Sets the power mode of the given display. The transition must be
|
|
* complete when this function returns. It is valid to call this function
|
|
* multiple times with the same power mode.
|
|
*
|
|
* All displays must support PowerMode::ON and PowerMode::OFF. Whether a
|
|
* display supports PowerMode::DOZE or PowerMode::DOZE_SUSPEND may be
|
|
* queried using getDozeSupport.
|
|
*
|
|
* @param display is the display to which the power mode is set.
|
|
* @param mode is the new power mode.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_DISPLAY when an invalid display handle was passed in.
|
|
* BAD_PARAMETER when mode was not a valid power mode.
|
|
* UNSUPPORTED when mode is not supported on this display.
|
|
*/
|
|
setPowerMode_2_2(Display display, PowerMode mode) generates (Error error);
|
|
|
|
/**
|
|
* Returns the color modes supported on this display.
|
|
*
|
|
* All devices must support at least ColorMode::NATIVE.
|
|
*
|
|
* @param display is the display to query.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_DISPLAY when an invalid display handle was passed in.
|
|
* @return modes is an array of color modes.
|
|
*/
|
|
getColorModes_2_2(Display display)
|
|
generates (Error error,
|
|
vec<ColorMode> modes);
|
|
|
|
/**
|
|
* Returns the render intents supported by the specified display and color
|
|
* mode.
|
|
*
|
|
* For SDR color modes, RenderIntent::COLORIMETRIC must be supported. For
|
|
* HDR color modes, RenderIntent::TONE_MAP_COLORIMETRIC must be supported.
|
|
*
|
|
* @param display is the display to query.
|
|
* @param mode is the color mode to query.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_DISPLAY when an invalid display handle was passed in.
|
|
* BAD_PARAMETER when an invalid color mode was passed in.
|
|
* @return intents is an array of render intents.
|
|
*/
|
|
getRenderIntents(Display display, ColorMode mode)
|
|
generates (Error error,
|
|
vec<RenderIntent> intents);
|
|
|
|
/**
|
|
* Sets the color mode and render intent of the given display.
|
|
*
|
|
* The color mode and render intent change must take effect on next
|
|
* presentDisplay.
|
|
*
|
|
* All devices must support at least ColorMode::NATIVE and
|
|
* RenderIntent::COLORIMETRIC, and displays are assumed to be in this mode
|
|
* upon hotplug.
|
|
*
|
|
* @param display is the display to which the color mode is set.
|
|
* @param mode is the color mode to set to.
|
|
* @param intent is the render intent to set to.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_DISPLAY when an invalid display handle was passed in.
|
|
* BAD_PARAMETER when mode or intent is invalid
|
|
* UNSUPPORTED when mode or intent is not supported on this
|
|
* display.
|
|
*/
|
|
setColorMode_2_2(Display display, ColorMode mode, RenderIntent intent)
|
|
generates (Error error);
|
|
|
|
/*
|
|
* By default, layer dataspaces are mapped to the current color mode
|
|
* colorimetrically with a few exceptions.
|
|
*
|
|
* When the layer dataspace is a legacy dataspace (see
|
|
* common@1.1::Dataspace) and the display render intent is
|
|
* RenderIntent::ENHANCE, the pixel values can go through an
|
|
* implementation-defined saturation transform before being mapped to the
|
|
* current color mode colorimetrically.
|
|
*
|
|
* Colors that are out of the gamut of the current color mode are
|
|
* hard-clipped.
|
|
*/
|
|
|
|
/**
|
|
* Returns the saturation matrix of the specified legacy dataspace.
|
|
*
|
|
* The saturation matrix can be used to approximate the legacy dataspace
|
|
* saturation transform. It is to be applied on linear pixel values like
|
|
* this:
|
|
*
|
|
* (in GLSL)
|
|
* linearSrgb = saturationMatrix * linearSrgb;
|
|
*
|
|
* @param dataspace must be Dataspace::SRGB_LINEAR.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_PARAMETER when an invalid dataspace was passed in.
|
|
* @return matrix is the 4x4 column-major matrix used to approximate the
|
|
* legacy dataspace saturation operation. The last row must be
|
|
* [0.0, 0.0, 0.0, 1.0].
|
|
*/
|
|
getDataspaceSaturationMatrix(Dataspace dataspace)
|
|
generates (Error error,
|
|
float[4][4] matrix);
|
|
|
|
/**
|
|
* Executes commands from the input command message queue. Return values
|
|
* generated by the input commands are written to the output command
|
|
* message queue in the form of value commands.
|
|
*
|
|
* @param inLength is the length of input commands.
|
|
* @param inHandles is an array of handles referenced by the input
|
|
* commands.
|
|
* @return error is NONE upon success. Otherwise,
|
|
* BAD_PARAMETER when inLength is not equal to the length of
|
|
* commands in the input command message queue.
|
|
* NO_RESOURCES when the output command message queue was not
|
|
* properly drained.
|
|
* @param outQueueChanged indicates whether the output command message
|
|
* queue has changed.
|
|
* @param outLength is the length of output commands.
|
|
* @param outHandles is an array of handles referenced by the output
|
|
* commands.
|
|
*/
|
|
executeCommands_2_2(uint32_t inLength,
|
|
vec<handle> inHandles)
|
|
generates (Error error,
|
|
bool outQueueChanged,
|
|
uint32_t outLength,
|
|
vec<handle> outHandles);
|
|
};
|