| /* |
| * 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; |
| }; |
| |