1f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa/*
2f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * Copyright 2016, The Android Open Source Project
3f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa *
4f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * Licensed under the Apache License, Version 2.0 (the "License");
5f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * you may not use this file except in compliance with the License.
6f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * You may obtain a copy of the License at
7f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa *
8f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa *      http://www.apache.org/licenses/LICENSE-2.0
9f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa *
10f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * Unless required by applicable law or agreed to in writing, software
11f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * distributed under the License is distributed on an "AS IS" BASIS,
12f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * See the License for the specific language governing permissions and
14f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa * limitations under the License.
15f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa */
16f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa
17517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#ifndef ANDROID_HARDWARE_MEDIA_OMX_V1_0_WOMXNODE_H
18517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#define ANDROID_HARDWARE_MEDIA_OMX_V1_0_WOMXNODE_H
19517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
20517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <hidl/MQDescriptor.h>
21517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <hidl/Status.h>
22517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
23517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#include <utils/Errors.h>
24517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
2504563aafa0debc95d50951ca944abf37ef2777cePawin Vongmasa#include "../../include/OMXNodeInstance.h"
260d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa
270d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa#include <android/hardware/media/omx/1.0/IOmxNode.h>
280d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa#include <android/hardware/media/omx/1.0/IOmxObserver.h>
290d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa
30517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace android {
31517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace hardware {
32517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace media {
33517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace omx {
34517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace V1_0 {
35517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasanamespace implementation {
36517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
37517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::media::omx::V1_0::CodecBuffer;
38517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::media::omx::V1_0::IOmxBufferSource;
39517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::media::omx::V1_0::IOmxNode;
40517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::media::omx::V1_0::IOmxObserver;
41517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::media::omx::V1_0::Message;
42517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::media::omx::V1_0::PortMode;
43517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::media::omx::V1_0::Status;
44517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hidl::base::V1_0::IBase;
45517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::hidl_array;
46517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::hidl_memory;
47517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::hidl_string;
48517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::hidl_vec;
49517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::Return;
50517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::hardware::Void;
51517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasausing ::android::sp;
52517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
53517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa/**
54517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa * Wrapper classes for conversion
55517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa * ==============================
56517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa *
57517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa * Naming convention:
58517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa * - LW = Legacy Wrapper --- It wraps a Treble object inside a legacy object.
59517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa * - TW = Treble Wrapper --- It wraps a legacy object inside a Treble object.
60517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa */
61517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
628ff40189817e95c7a56e347398d20e60d7534ee6Pawin Vongmasastruct LWOmxNode : public BnOMXNode {
63517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    sp<IOmxNode> mBase;
64517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    LWOmxNode(sp<IOmxNode> const& base);
65517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t freeNode() override;
66517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t sendCommand(
67517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_COMMANDTYPE cmd, OMX_S32 param) override;
68517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t getParameter(
69517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_INDEXTYPE index, void *params, size_t size) override;
70517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t setParameter(
71517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_INDEXTYPE index, const void *params, size_t size) override;
72517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t getConfig(
73517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_INDEXTYPE index, void *params, size_t size) override;
74517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t setConfig(
75517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_INDEXTYPE index, const void *params, size_t size) override;
76517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t setPortMode(
77517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 port_index, IOMX::PortMode mode) override;
78517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t prepareForAdaptivePlayback(
79517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 portIndex, OMX_BOOL enable,
80517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 maxFrameWidth, OMX_U32 maxFrameHeight) override;
81517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t configureVideoTunnelMode(
82517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 portIndex, OMX_BOOL tunneled,
83517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 audioHwSync, native_handle_t **sidebandHandle) override;
84517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t getGraphicBufferUsage(
85517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 port_index, OMX_U32* usage) override;
86517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t setInputSurface(
87517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            const sp<IOMXBufferSource> &bufferSource) override;
88517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t allocateSecureBuffer(
89517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 port_index, size_t size, buffer_id *buffer,
90517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            void **buffer_data, sp<NativeHandle> *native_handle) override;
91517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t useBuffer(
92517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 port_index, const OMXBuffer &omxBuf,
93517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            buffer_id *buffer) override;
94517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t freeBuffer(
95517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 port_index, buffer_id buffer) override;
96517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t fillBuffer(
97517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            buffer_id buffer, const OMXBuffer &omxBuf,
98517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            int fenceFd = -1) override;
99517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t emptyBuffer(
100517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            buffer_id buffer, const OMXBuffer &omxBuf,
101517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_U32 flags, OMX_TICKS timestamp, int fenceFd = -1) override;
102517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t getExtensionIndex(
103517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            const char *parameter_name,
104517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            OMX_INDEXTYPE *index) override;
105517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    status_t dispatchMessage(const omx_message &msg) override;
106517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa};
107517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
108517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasastruct TWOmxNode : public IOmxNode {
109517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    sp<IOMXNode> mBase;
110517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    TWOmxNode(sp<IOMXNode> const& base);
111517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
112517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> freeNode() override;
113517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> sendCommand(uint32_t cmd, int32_t param) override;
114517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<void> getParameter(
115517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t index, hidl_vec<uint8_t> const& inParams,
116517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            getParameter_cb _hidl_cb) override;
117517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> setParameter(
118517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t index, hidl_vec<uint8_t> const& params) override;
119517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<void> getConfig(
120517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t index, hidl_vec<uint8_t> const& inConfig,
121517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            getConfig_cb _hidl_cb) override;
122517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> setConfig(
123517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t index, hidl_vec<uint8_t> const& config) override;
124517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> setPortMode(uint32_t portIndex, PortMode mode) override;
125517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> prepareForAdaptivePlayback(
126517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t portIndex, bool enable,
127517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t maxFrameWidth, uint32_t maxFrameHeight) override;
128517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<void> configureVideoTunnelMode(
129517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t portIndex, bool tunneled, uint32_t audioHwSync,
130517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            configureVideoTunnelMode_cb _hidl_cb) override;
131517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<void> getGraphicBufferUsage(
132517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t portIndex,
133517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            getGraphicBufferUsage_cb _hidl_cb) override;
134517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> setInputSurface(
135517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            sp<IOmxBufferSource> const& bufferSource) override;
136517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<void> allocateSecureBuffer(
137517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t portIndex, uint64_t size,
138517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            allocateSecureBuffer_cb _hidl_cb) override;
139517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<void> useBuffer(
140517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t portIndex, CodecBuffer const& codecBuffer,
141517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            useBuffer_cb _hidl_cb) override;
142517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> freeBuffer(uint32_t portIndex, uint32_t buffer) override;
143517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> fillBuffer(
144517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t buffer, CodecBuffer const& codecBuffer,
145517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            const hidl_handle& fence) override;
146517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> emptyBuffer(
147517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t buffer, CodecBuffer const& codecBuffer,
148517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            uint32_t flags, uint64_t timestampUs,
149517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            hidl_handle const& fence) override;
150517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<void> getExtensionIndex(
151517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            hidl_string const& parameterName,
152517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa            getExtensionIndex_cb _hidl_cb) override;
153517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa    Return<Status> dispatchMessage(Message const& msg) override;
154517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa};
155517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
156517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace implementation
157517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace V1_0
158517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace omx
159517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace media
160517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace hardware
161517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa}  // namespace android
162517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa
163517b0e090680e378f056677201426ed9dc325c65Pawin Vongmasa#endif  // ANDROID_HARDWARE_MEDIA_OMX_V1_0_WOMXNODE_H
164