mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 22:04:26 +00:00
Merge "Start media.omx HIDL project."
This commit is contained in:
committed by
Android (Google) Code Review
commit
0878bb2c79
45
media/1.0/Android.bp
Normal file
45
media/1.0/Android.bp
Normal 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
77
media/1.0/types.hal
Normal 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
5
media/Android.bp
Normal 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
87
media/omx/1.0/Android.bp
Normal 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",
|
||||
],
|
||||
}
|
||||
60
media/omx/1.0/IGraphicBufferSource.hal
Normal file
60
media/omx/1.0/IGraphicBufferSource.hal
Normal 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
69
media/omx/1.0/IOmx.hal
Normal 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
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
68
media/omx/1.0/IOmxBufferSource.hal
Normal file
68
media/omx/1.0/IOmxBufferSource.hal
Normal 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
358
media/omx/1.0/IOmxNode.hal
Normal 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
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
35
media/omx/1.0/IOmxObserver.hal
Normal file
35
media/omx/1.0/IOmxObserver.hal
Normal 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
178
media/omx/1.0/types.hal
Normal 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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user