blob: 76a60072b6f7951828fc18b42be148e68b17e8ae [file] [log] [blame]
/*
* Copyright (C) 2017 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.omx@1.0;
import android.hardware.media@1.0::types;
// Aliases
typedef uint32_t BufferId;
/**
* Ref: system/core/include/utils/Errors.h
* Ref: bionic/libc/kernel/uapi/asm-generic/errno-base.h
* Ref: bionic/libc/kernel/uapi/asm-generic/errno.h
* Ref: frameworks/av/include/media/stagefright/MediaError.h
* Ref: frameworks/av/media/libstagefright/omx/OMXUtils.cpp: StatusFromOMXError
*/
enum Status : int32_t {
OK = 0,
NO_ERROR = 0,
NAME_NOT_FOUND = -2,
WOULD_BLOCK = -11,
NO_MEMORY = -12,
ALREADY_EXISTS = -17,
NO_INIT = -19,
BAD_VALUE = -22,
DEAD_OBJECT = -32,
INVALID_OPERATION = -38,
TIMED_OUT = -110,
ERROR_UNSUPPORTED = -1010,
UNKNOWN_ERROR = -2147483648,
BUFFER_NEEDS_REALLOCATION = 0x1,
RELEASE_ALL_BUFFERS = 0x2,
};
/**
* Ref: frameworks/av/include/media/IOMX.h: omx_message
*
* Data structure for an OMX message. This is essentially a union of different
* message types.
*/
struct Message {
/**
* There are four main types of messages.
*/
enum Type : uint32_t {
EVENT,
EMPTY_BUFFER_DONE,
FILL_BUFFER_DONE,
FRAME_RENDERED,
};
/**
* @see OMX_EVENTTYPE in the OpenMax IL standard.
*/
struct EventData {
uint32_t event; // TODO: if there are common core events, convert to an enum or point to std
uint32_t data1;
uint32_t data2;
uint32_t data3;
uint32_t data4;
};
struct BufferData {
BufferId buffer;
};
struct ExtendedBufferData {
BufferId buffer;
uint32_t rangeOffset;
uint32_t rangeLength;
uint32_t flags; // TODO: if common flags exist, define an enum of point to std
uint64_t timestampUs;
};
struct RenderData {
uint64_t timestampUs;
int64_t systemTimeNs;
};
union Data {
// if type == EVENT
EventData eventData;
// if type == EMPTY_BUFFER_DONE
BufferData bufferData;
// if type == FILL_BUFFER_DONE
ExtendedBufferData extendedBufferData;
// if type == FRAME_RENDERED
RenderData renderData;
};
/**
* The type of the message.
*/
Type type;
/**
* The fence associated with the message.
*/
Fence fence;
/**
* The union of data, discriminated by type.
*/
Data data;
};
/**
* Ref: frameworks/native/include/ui/GraphicBuffer.h
* Ref: system/core/include/system/window.h
* Ref: frameworks/native/include/binder/IMemory.h
* Ref: frameworks/native/libs/binder/IMemory.cpp
* Ref: frameworks/av/include/media/OMXBuffer.h
*
* Data structure for buffer information. This is essentially a union of
* different buffer types.
*/
struct CodecBuffer {
/**
* There are four main types of buffers.
*/
enum Type : int32_t {
INVALID = 0,
PRESET,
SHARED_MEM,
ANW_BUFFER,
NATIVE_HANDLE,
};
struct PresetAttributes {
uint32_t rangeOffset;
uint32_t rangeLength;
};
union Attributes {
// if bufferType == PRESET
PresetAttributes preset;
// if bufferType == SHARED_MEM
// No additional attributes.
// if bufferType == ANW_BUFFER
AnwBufferAttributes anwBuffer;
// if bufferType == NATIVE_HANDLE
// No additional attributes.
};
/**
* Type of the buffer.
*/
Type type;
/**
* Attributes that can be put into a union.
*/
Attributes attr;
/**
* Used only for types ANW_BUFFER and NATIVE_HANDLE.
*
* (A native handle cannot be put into a union as HIDL currently does not
* support discriminated unions.)
*/
handle nativeHandle;
/**
* Used only for type SHARED_MEM.
*/
memory sharedMemory;
};
/**
* Ref: frameworks/av/include/media/IOMX.h
*
* Enumeration of port modes.
*/
enum PortMode : int32_t {
PRESET_START = 0,
PRESET_BYTE_BUFFER,
PRESET_ANW_BUFFER,
PRESET_SECURE_BUFFER,
PRESET_END,
DYNAMIC_START = 100,
DYNAMIC_ANW_BUFFER,
DYNAMIC_NATIVE_HANDLE,
DYNAMIC_END
};
/**
* Ref: frameworks/native/include/media/hardware/VideoAPI.h
*
* Framework defined color aspects. These are based mainly on ISO 23001-8 spec. As this standard
* continues to evolve, new values may be defined in the future. Use OTHER for these future values
* as well as for values not listed here, as those are not supported by the framework.
*/
struct ColorAspects {
enum Range : uint32_t {
UNSPECIFIED, // Unspecified
FULL, // Full range
LIMITED, // Limited range (if defined), or not full range
OTHER = 0xff, // Not one of the above values
};
// Color primaries
enum Primaries : uint32_t {
UNSPECIFIED, // Unspecified
BT709_5, // Rec.ITU-R BT.709-5 or equivalent
BT470_6M, // Rec.ITU-R BT.470-6 System M or equivalent
BT601_6_625, // Rec.ITU-R BT.601-6 625 or equivalent
BT601_6_525, // Rec.ITU-R BT.601-6 525 or equivalent
GENERIC_FILM, // Generic Film
BT2020, // Rec.ITU-R BT.2020 or equivalent
OTHER = 0xff, // Not one of the above values
};
// Transfer characteristics
enum Transfer : uint32_t {
UNSPECIFIED, // Unspecified
LINEAR, // Linear transfer characteristics
SRGB, // sRGB or equivalent
SMPTE170M, // SMPTE 170M or equivalent (e.g. BT.601/709/2020)
GAMMA22, // Assumed display gamma 2.2
GAMMA28, // Assumed display gamma 2.8
ST2084, // SMPTE ST 2084 for 10/12/14/16 bit systems
HLG, // ARIB STD-B67 hybrid-log-gamma
// values unlikely to be required by Android follow here
SMPTE240M = 0x40, // SMPTE 240M
XVYCC, // IEC 61966-2-4
BT1361, // Rec.ITU-R BT.1361 extended gamut
ST428, // SMPTE ST 428-1
OTHER = 0xff, // Not one of the above values
};
// YUV <-> RGB conversion
enum MatrixCoeffs : uint32_t {
UNSPECIFIED, // Unspecified
BT709_5, // Rec.ITU-R BT.709-5 or equivalent
BT470_6M, // KR=0.30, KB=0.11 or equivalent
BT601_6, // Rec.ITU-R BT.601-6 625 or equivalent
SMPTE240M, // SMPTE 240M or equivalent
BT2020, // Rec.ITU-R BT.2020 non-constant luminance
BT2020CONSTANT, // Rec.ITU-R BT.2020 constant luminance
OTHER = 0xff, // Not one of the above values
};
Range range;
Primaries primaries;
Transfer transfer;
MatrixCoeffs matrixCoeffs;
};