Start media.omx HIDL project.

Test: None

Bug: 31399200
Change-Id: I2fb1a6758ccc001c5631be1c642ad537d1ff5a10
This commit is contained in:
Pawin Vongmasa
2016-10-06 19:01:51 -07:00
committed by Iliyan Malchev
parent 4a9f187d9f
commit 6ec37b9e50
10 changed files with 982 additions and 0 deletions

45
media/1.0/Android.bp Normal file
View File

@@ -0,0 +1,45 @@
// This file is autogenerated by hidl-gen. Do not edit manually.
genrule {
name: "android.hardware.media@1.0_genc++",
tools: ["hidl-gen"],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces android.hardware.media@1.0",
srcs: [
"types.hal",
],
out: [
"android/hardware/media/1.0/types.cpp",
],
}
genrule {
name: "android.hardware.media@1.0_genc++_headers",
tools: ["hidl-gen"],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces android.hardware.media@1.0",
srcs: [
"types.hal",
],
out: [
"android/hardware/media/1.0/types.h",
],
}
cc_library_shared {
name: "android.hardware.media@1.0",
generated_sources: ["android.hardware.media@1.0_genc++"],
generated_headers: ["android.hardware.media@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.media@1.0_genc++_headers"],
shared_libs: [
"libhidl",
"libhwbinder",
"libutils",
"libcutils",
"android.hardware.graphics.common@1.0",
],
export_shared_lib_headers: [
"libhidl",
"libhwbinder",
"libutils",
"android.hardware.graphics.common@1.0",
],
}

77
media/1.0/types.hal Normal file
View File

@@ -0,0 +1,77 @@
/*
* 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.media@1.0;
import android.hardware.graphics.common@1.0::PixelFormat;
/**
* Aliases
*/
typedef handle FileDescriptor; // This must have no more than one fd.
typedef FileDescriptor Fence;
typedef int32_t Status; // TODO: convert to an enum
typedef vec<uint8_t> Bytes;
/**
* Ref: frameworks/native/include/ui/GraphicBuffer.h
* Ref: system/core/include/system/window.h
*/
/**
* This struct contains attributes for a gralloc buffer that can be put into a
* union.
*/
struct GraphicBufferAttributes {
uint32_t width;
uint32_t height;
uint32_t stride;
PixelFormat format;
uint32_t usage; // TODO: convert to an enum
uint32_t generationNumber;
};
/**
* A GraphicBuffer is simply GraphicBufferAttributes plus a native handle.
*/
struct GraphicBuffer {
handle nativeHandle;
GraphicBufferAttributes attr;
};
/**
* Ref: frameworks/native/include/binder/IMemory.h
* Ref: frameworks/native/libs/binder/IMemory.cpp
*/
/**
* This struct contains attributes for a shared memory buffer that can be put
* into a union.
*/
struct SharedMemoryAttributes {
uint32_t size;
uint32_t flags; // TODO: convert to an enum
uint32_t offset;
};
/**
* A SharedMemory is simply SharedMemoryAttributes plus a native handle.
*/
struct SharedMemory {
handle nativeHandle;
SharedMemoryAttributes attr;
};

5
media/Android.bp Normal file
View File

@@ -0,0 +1,5 @@
// This is an autogenerated file, do not edit.
subdirs = [
"1.0",
"omx/1.0",
]

87
media/omx/1.0/Android.bp Normal file
View File

@@ -0,0 +1,87 @@
// This file is autogenerated by hidl-gen. Do not edit manually.
genrule {
name: "android.hardware.media.omx@1.0_genc++",
tools: ["hidl-gen"],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces android.hardware.media.omx@1.0",
srcs: [
"types.hal",
"IGraphicBufferSource.hal",
"IOmx.hal",
"IOmxBufferSource.hal",
"IOmxNode.hal",
"IOmxObserver.hal",
],
out: [
"android/hardware/media/omx/1.0/types.cpp",
"android/hardware/media/omx/1.0/GraphicBufferSourceAll.cpp",
"android/hardware/media/omx/1.0/OmxAll.cpp",
"android/hardware/media/omx/1.0/OmxBufferSourceAll.cpp",
"android/hardware/media/omx/1.0/OmxNodeAll.cpp",
"android/hardware/media/omx/1.0/OmxObserverAll.cpp",
],
}
genrule {
name: "android.hardware.media.omx@1.0_genc++_headers",
tools: ["hidl-gen"],
cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces android.hardware.media.omx@1.0",
srcs: [
"types.hal",
"IGraphicBufferSource.hal",
"IOmx.hal",
"IOmxBufferSource.hal",
"IOmxNode.hal",
"IOmxObserver.hal",
],
out: [
"android/hardware/media/omx/1.0/types.h",
"android/hardware/media/omx/1.0/IGraphicBufferSource.h",
"android/hardware/media/omx/1.0/IHwGraphicBufferSource.h",
"android/hardware/media/omx/1.0/BnGraphicBufferSource.h",
"android/hardware/media/omx/1.0/BpGraphicBufferSource.h",
"android/hardware/media/omx/1.0/BsGraphicBufferSource.h",
"android/hardware/media/omx/1.0/IOmx.h",
"android/hardware/media/omx/1.0/IHwOmx.h",
"android/hardware/media/omx/1.0/BnOmx.h",
"android/hardware/media/omx/1.0/BpOmx.h",
"android/hardware/media/omx/1.0/BsOmx.h",
"android/hardware/media/omx/1.0/IOmxBufferSource.h",
"android/hardware/media/omx/1.0/IHwOmxBufferSource.h",
"android/hardware/media/omx/1.0/BnOmxBufferSource.h",
"android/hardware/media/omx/1.0/BpOmxBufferSource.h",
"android/hardware/media/omx/1.0/BsOmxBufferSource.h",
"android/hardware/media/omx/1.0/IOmxNode.h",
"android/hardware/media/omx/1.0/IHwOmxNode.h",
"android/hardware/media/omx/1.0/BnOmxNode.h",
"android/hardware/media/omx/1.0/BpOmxNode.h",
"android/hardware/media/omx/1.0/BsOmxNode.h",
"android/hardware/media/omx/1.0/IOmxObserver.h",
"android/hardware/media/omx/1.0/IHwOmxObserver.h",
"android/hardware/media/omx/1.0/BnOmxObserver.h",
"android/hardware/media/omx/1.0/BpOmxObserver.h",
"android/hardware/media/omx/1.0/BsOmxObserver.h",
],
}
cc_library_shared {
name: "android.hardware.media.omx@1.0",
generated_sources: ["android.hardware.media.omx@1.0_genc++"],
generated_headers: ["android.hardware.media.omx@1.0_genc++_headers"],
export_generated_headers: ["android.hardware.media.omx@1.0_genc++_headers"],
shared_libs: [
"libhidl",
"libhwbinder",
"libutils",
"libcutils",
"android.hardware.graphics.common@1.0",
"android.hardware.media@1.0",
],
export_shared_lib_headers: [
"libhidl",
"libhwbinder",
"libutils",
"android.hardware.graphics.common@1.0",
"android.hardware.media@1.0",
],
}

View File

@@ -0,0 +1,60 @@
/*
* 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.media.omx@1.0;
import android.hardware.graphics.common@1.0::Dataspace;
import android.hardware.media@1.0::types;
import IOmxNode;
/**
* Ref: frameworks/av/media/libmedia/aidl/android/IGraphicBufferSource.aidl
*
* TODO: Add documentations.
*/
interface IGraphicBufferSource {
configure(IOmxNode omxNode, Dataspace dataspace)
generates (Status status);
setSuspend(bool suspend)
generates (Status status);
setRepeatPreviousFrameDelayUs(int64_t repeatAfterUs)
generates (Status status);
setMaxFps(float maxFps)
generates (Status status);
setTimeLapseConfig(int64_t timePerFrameUs, int64_t timePerCaptureUs)
generates (Status status);
setStartTimeUs(int64_t startTimeUs)
generates (Status status);
setColorAspects(uint32_t aspects) // TODO: Maybe break down aspects.
generates (Status status);
setTimeOffsetUs(int64_t timeOffsetUs)
generates (Status status);
signalEndOfInputStream()
generates (Status status);
};

69
media/omx/1.0/IOmx.hal Normal file
View File

@@ -0,0 +1,69 @@
/*
* 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.media.omx@1.0;
import android.hardware.media@1.0::types;
import IOmxNode;
import IOmxObserver;
/**
* Ref: frameworks/av/include/media/IOMX.h: IOMX
*
* IOmx is the main entry point for communicating with OMX components.
*/
interface IOmx {
/**
* Information for an IOmxNode component.
*/
struct ComponentInfo {
string mName; //< Name of the component.
vec<string> mRoles; //< Roles of the component.
};
/**
* List available components.
*
* @param[out] status will be the status of the call.
* @param[out] nodeList will be a list of ComponentInfo.
*/
listNodes(
) generates (
Status status,
vec<ComponentInfo> nodeList
);
/**
* Allocate an IOmxNode instance with the specified component name.
*
* @param[in] name is the name of the component to create.
* @param[in] observer is an observer object that will receive messages from
* the created instance.
* @param[out] status will be the status of the call.
* @param[out] omxNode will be the allocated instance of IOmxNode.
*/
allocateNode(
string name,
IOmxObserver observer
) generates (
Status status,
IOmxNode omxNode
);
};

View File

@@ -0,0 +1,68 @@
/*
* 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.media.omx@1.0;
import android.hardware.media@1.0::types;
/**
* Ref: frameworks/av/media/libmedia/aidl/android/IOMXBufferSource.aidl
*
* IOmxBufferSource is an interface for a listener for certain events from an
* IOmxNode instance. Use IOmxNode::setInputSurface() to attach an
* IOmxBufferSource instance to an IOmxNode instance.
*
* @see OMX_STATETYPE in the OpenMax IL standard.
*/
interface IOmxBufferSource {
/**
* onOmxExecuting() is invoked when the node state changes to
* OMX_StateExecuting state.
*/
oneway onOmxExecuting();
/**
* onOmxIdle() is invoked when the node transitions from OMX_StateExecuting
* to OMX_StateIdle.
*/
oneway onOmxIdle();
/**
* onOmxLoaded() is invoked when the node transitions from OMX_StateIdle or
* OMX_StateExecuting to OMX_StateLoaded.
*/
oneway onOmxLoaded();
/**
* onInputBufferAdded() is invoked after a new input buffer is added to the
* node. This may happen within IOmxNode::allocateSecureBuffer() or
* IOmxNode::useBuffer().
*
* @param[in] buffer is the id of the added buffer.
*/
oneway onInputBufferAdded(BufferId buffer);
/**
* onInputBufferEmptied() is invoked after an input buffer is emptied. This
* may happen within IOmxNode::emptyBuffer().
*
* @param[in] buffer is the id of the emptied buffer.
* @param[in] fence is the fence associated with the buffer.
*/
oneway onInputBufferEmptied(BufferId buffer, Fence fence);
};

358
media/omx/1.0/IOmxNode.hal Normal file
View File

@@ -0,0 +1,358 @@
/*
* 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.media.omx@1.0;
import IOmxBufferSource;
import android.hardware.media@1.0::types;
/**
* Ref: frameworks/av/include/media/IOMX.h: IOMXNode
* Ref: https://www.khronos.org/registry/omxil/specs/OpenMAX_IL_1_1_2_Specification.pdf
*/
/**
* IOmxNode is an interface for communicating with an OMX component (called
* "node" here) that has been previously obtained by calling
* IOmx::allocateNode().
*/
interface IOmxNode {
/**
* Free the node.
*
* @param[out] status will be the status of the call.
*/
freeNode(
) generates (
Status status
);
/**
* Invoke a command on the node.
*
* @param[in] cmd indicates the type of the command.
* @param[in] info holds information about the command.
* @param[out] status will be the status of the call.
*
* @see OMX_SendCommand() in the OpenMax IL standard.
*/
sendCommand(
uint32_t cmd,
Bytes info // TODO: describe structure better or point at standard
) generates (
Status status
);
/**
* Retrieve a parameter setting from the node.
*
* @param[in] index indicates the type of the parameter to retrieve.
* @param[in] inParams holds some information about the retrieval.
* @param[out] status will be the status of the call.
* @param[out] outParams will be the current parameter setting.
*
* @see OMX_GetParameter() in the OpenMax IL standard.
*/
getParameter(
uint32_t index,
Bytes inParams // TODO: describe structure better or point at standard
) generates (
Status status,
Bytes outParams // TODO: describe structure better or point at standard
);
/**
* Change a parameter setting of the node.
*
* @param[in] index indicates the type of the parameter to change.
* @param[in] params holds the new parameter setting.
* @param[out] status will be the status of the call.
*
* @see OMX_SetParameter() in the OpenMax IL standard.
*/
setParameter(
uint32_t index,
Bytes params // TODO: describe structure better or point at standard
) generates (
Status status
);
/**
* Retrieve a configuration from the node.
*
* @param[in] index indicates the type of the configuration to retrieve.
* @param[in] inConfig holds some information about the retrieval.
* @param[out] status will be the status of the call.
* @param[out] outConfig will be the current configuration.
*
* @see OMX_GetConfig() in the OpenMax IL standard.
*/
getConfig(
uint32_t index,
Bytes inConfig // TODO: describe structure better or point at standard
) generates (
Status status,
Bytes outConfig // TODO: describe structure better or point at standard
);
/**
* Change a configuration of the node.
*
* @param[in] index indicates the type of the configuration to change.
* @param[in] config holds the new configuration.
* @param[out] status will be the status of the call.
*
* @see OMX_SetConfig() in the OpenMax IL standard.
*/
setConfig(
uint32_t index,
Bytes config // TODO: describe structure better or point at standard
) generates (
Status status
);
/**
* Set the mode of a port on the node.
*
* @param[in] portIndex is the index of the port.
* @param[in] mode is the target mode on the specified port.
*/
setPortMode(
uint32_t portIndex,
PortMode mode
) generates (
Status status
);
/**
* Prepare a port for adaptive playback. This is based on the extension
* "OMX.google.android.index.prepareForAdaptivePlayback".
*
* @param[in] portIndex is the index of the port.
* @param[in] enable indicates whether adaptive playback is enabled or not.
* @param[in] maxFrameWidth specifies the maximum frame width.
* @param[in] maxFrameHeight specifies the maximum frame height.
* @param[out] status status will be the status of the call.
*/
prepareForAdaptivePlayback(
uint32_t portIndex,
bool enable,
uint32_t maxFrameWidth,
uint32_t maxFrameHeight
) generates (
Status status
);
/**
* Configure a port for a tunneled playback mode. This is based on the
* extension "OMX.google.android.index.configureVideoTunnelMode".
*
* @param[in] portIndex is the index of the port.
* @param[in] tunneled indicates whether the tunneled mode is used or not.
* @param[in] audioHwSync is the HW SYNC ID of the audio HAL output stream
* to sync the video with.
* @param[out] status will be the status of the call.
* @param[out] sidebandHandle will contain the codec-allocated sideband
* window handle.
*/
configureVideoTunnelMode(
uint32_t portIndex,
bool tunneled,
uint32_t audioHwSync
) generates (
Status status,
handle sidebandHandle
);
/**
* Retrieve the buffer usage on a port. This is based on the extension
* "OMX.google.android.index.getAndroidNativeBufferUsage".
*
* @param[in] portIndex is the index of the port.
* @param[out] status will be the status of the call.
* @param[out] usage will be the usage.
*/
getGraphicBufferUsage(
uint32_t portIndex
) generates (
Status status,
uint32_t usage // TODO: Ask graphics team to define an enum.
);
/**
* Set up a listener to events related to the input surface.
*
* @param[in] bufferSource is the listener object that implements
* IOmxBufferSource.
* @param[out] status will be the status of the call.
*
* @see IOmxBufferSource.
*/
setInputSurface(
IOmxBufferSource bufferSource
) generates (
Status status
);
/**
* Allocate an opaque buffer on a port as a native handle.
*
* @param[in] portIndex is the index of the port.
* @param[in] size is the desired size of the buffer.
* @param[out] status will be the status of the call.
* @param[out] buffer will be the id of the allocated buffer, which will be
* needed in some other buffer-related function calls.
* @param[out] nativeHandle will be the native handle of the allocated
* buffer.
*
* @see OMX_AllocateBuffer() in the OpenMax IL standard.
*/
allocateSecureBuffer(
uint32_t portIndex,
uint64_t size
) generates (
Status status,
BufferId buffer,
handle nativeHandle
);
/**
* Assign a buffer to a port.
*
* @param[in] portIndex is the index of the port.
* @param[in] omxBuffer is the buffer to be assigned to the port.
* @param[out] status will be the status of the call.
* @param[out] buffer will be the id of the assigned buffer, which will be
* needed in some other buffer-related function calls.
*
* @see OMX_UseBuffer() in the OpenMax IL standard.
*/
useBuffer(
uint32_t portIndex,
CodecBuffer omxBuffer
) generates (
Status status,
BufferId buffer
);
/**
* Free a buffer previously assigned to a port by allocateSecureBuffer() or
* useBuffer().
*
* @param[in] portIndex is the index of the port.
* @param[in] buffer is the id of the buffer to be freed.
* @param[out] status will be the status of the call.
*
* @see OMX_FreeBuffer() in the OpenMax IL standard.
*/
freeBuffer(
uint32_t portIndex,
BufferId buffer
) generates (
Status status
);
/**
* Pass \p fence to the node if it supports fences. Otherwise, it waits on
* \p fence before calling OMX_FillThisBuffer(). The node will take
* ownership of the fence even if this call fails.
*
* If the port is in metadata mode, the buffer will be updated to point to
* the new buffer passed in via \p omxBuffer before OMX_FillThisBuffer() is
* called. Otherwise, \p omxBuffer is not used.
*
* @param[in] buffer is the id of the buffer to fill.
* @param[in] omxBuffer points to the new buffer in metadata mode.
* @param[in] fence is the fence to wait for (if not null).
* @param[out] status is the status of the call.
*
* @see OMX_FillThisBuffer() in the OpenMax IL standard.
*/
fillBuffer(
BufferId buffer,
CodecBuffer omxBuffer,
Fence fence
) generates (
Status status
);
/**
* Pass \p fence to the node if it supports fences. Otherwise, wait on
* \p fence before calling OMX_EmptyThisBuffer(). The node will take
* ownership of the fence even if this call fails.
*
* If the port is in metadata mode, the buffer will be updated to point to
* the new buffer passed in via \p omxBuffer before OMX_EmptyThisBuffer() is
* called. Otherwise, \p omxBuffer is not used.
*
* @param[in] buffer is the id of the buffer to fill.
* @param[in] omxBuffer points to the new buffer in metadata mode.
* @param[in] flags is put into the header information that is passed to
* OMX_EmptyBuffer().
* @param[in] timestampUs is put into the header information that is passed
* to OMX_EmptyBuffer().
* @param[in] fence is the fence to wait for (if not null).
* @param[out] status is the status of the call.
*
* @see OMX_EmptyThisBuffer() in the OpenMax IL standard.
*/
emptyBuffer(
BufferId buffer,
CodecBuffer omxBuffer,
uint32_t flags, // TODO: describe structure better or point at standard
uint64_t timestampUs,
Fence fence
) generates (
Status status
);
/**
* Request the node to translate an extension string to an index.
*
* @param[in] parameterName is the requested extension string.
* @param[out] status is the status of the call.
* @param[out] index is the translated index.
*
* @see OMX_GetExtensionIndex() in the OpenMax IL standard.
*/
getExtensionIndex(
string parameterName
) generates (
Status status,
uint32_t index
);
/**
* Add an OMX message on the node's message queue. The instance of
* IOmxObserver that was obtained during the creation of the node will
* receive the message in batches by the callback
* IOmxObserver::onMessages().
*
* @param[in] msg is the message to send.
* @param[out] status is the status of the call.
*
* @see IOmxObserver::onMessages().
*/
dispatchMessage(
Message msg
) generates (
Status status
);
};

View File

@@ -0,0 +1,35 @@
/*
* 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.media.omx@1.0;
/**
* Ref: frameworks/av/include/media/IOMX.h: IOMXObserver
*/
/**
* IOmxObserver is a listener interface for OMX messages sent from an IOmxNode
* stance.
*/
interface IOmxObserver {
/**
* Invoked to process messages from an IOmxNode instance. Note that messages
* come in batches.
*/
oneway onMessages(vec<Message> messages);
};

178
media/omx/1.0/types.hal Normal file
View File

@@ -0,0 +1,178 @@
/*
* 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.media.omx@1.0;
import android.hardware.media@1.0::types;
// Aliases
typedef uint32_t BufferId;
/**
* 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 {
INVALID = 0,
PRESET,
SHARED_MEM,
ANW_BUFFER,
NATIVE_HANDLE
};
struct PresetAttributes {
uint32_t rangeLength;
};
union Attributes {
// if bufferType == PRESET
PresetAttributes preset;
// if bufferType == SHARED_MEM
SharedMemoryAttributes sharedMem;
// if bufferType == ANW_BUFFER
GraphicBufferAttributes anwBuffer;
// if bufferType == NATIVE_HANDLE
// No additional attributes.
};
/**
* Type of the buffer.
*/
Type type;
/**
* Attributes that can be put into a union.
*/
Attributes attr;
/**
* \p nativeHandle is used only for types SHARED_MEM, ANW_BUFFER and
* NATIVE_HANDLE.
*
* (A native handle cannot be put into a union as HIDL currently does not
* support discriminated unions.)
*/
handle nativeHandle;
};
/**
* Ref: frameworks/av/include/media/IOMX.h
*
* Enumeration of port modes.
*/
enum PortMode {
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
};