diff --git a/media/1.0/Android.bp b/media/1.0/Android.bp new file mode 100644 index 0000000000..c8bdd828ff --- /dev/null +++ b/media/1.0/Android.bp @@ -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", + ], +} diff --git a/media/1.0/types.hal b/media/1.0/types.hal new file mode 100644 index 0000000000..25931f8c0c --- /dev/null +++ b/media/1.0/types.hal @@ -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 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; +}; + diff --git a/media/Android.bp b/media/Android.bp new file mode 100644 index 0000000000..f2abc678ad --- /dev/null +++ b/media/Android.bp @@ -0,0 +1,5 @@ +// This is an autogenerated file, do not edit. +subdirs = [ + "1.0", + "omx/1.0", +] diff --git a/media/omx/1.0/Android.bp b/media/omx/1.0/Android.bp new file mode 100644 index 0000000000..95d88a6289 --- /dev/null +++ b/media/omx/1.0/Android.bp @@ -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", + ], +} diff --git a/media/omx/1.0/IGraphicBufferSource.hal b/media/omx/1.0/IGraphicBufferSource.hal new file mode 100644 index 0000000000..bee57ac0ea --- /dev/null +++ b/media/omx/1.0/IGraphicBufferSource.hal @@ -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); + +}; + diff --git a/media/omx/1.0/IOmx.hal b/media/omx/1.0/IOmx.hal new file mode 100644 index 0000000000..e9f0b763df --- /dev/null +++ b/media/omx/1.0/IOmx.hal @@ -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 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 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 + ); + +}; + diff --git a/media/omx/1.0/IOmxBufferSource.hal b/media/omx/1.0/IOmxBufferSource.hal new file mode 100644 index 0000000000..94c43fcfab --- /dev/null +++ b/media/omx/1.0/IOmxBufferSource.hal @@ -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); +}; + diff --git a/media/omx/1.0/IOmxNode.hal b/media/omx/1.0/IOmxNode.hal new file mode 100644 index 0000000000..9483be443e --- /dev/null +++ b/media/omx/1.0/IOmxNode.hal @@ -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 + ); + +}; + diff --git a/media/omx/1.0/IOmxObserver.hal b/media/omx/1.0/IOmxObserver.hal new file mode 100644 index 0000000000..c26a937feb --- /dev/null +++ b/media/omx/1.0/IOmxObserver.hal @@ -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 messages); +}; + diff --git a/media/omx/1.0/types.hal b/media/omx/1.0/types.hal new file mode 100644 index 0000000000..c0350de10d --- /dev/null +++ b/media/omx/1.0/types.hal @@ -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 +}; +