summaryrefslogblamecommitdiffstats
blob: 5945b4474d74949c8b337570700df5b343b19a3c (plain) (tree)















































                                                                                       
                                                       





                                                         
                         













































































































































































































































































































                                                                                   
/*
 * 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] param is a parameter for the command.
     * @param[out] status will be the status of the call.
     *
     * @see OMX_SendCommand() in the OpenMax IL standard.
     */
    sendCommand(
            uint32_t cmd,
            int32_t param
        ) 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
        );

};