IOMX.h revision e46b7be812d68e49710b34048662cbf18e2a6550
1e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber/*
2e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Copyright (C) 2009 The Android Open Source Project
3e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
4e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * you may not use this file except in compliance with the License.
6e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * You may obtain a copy of the License at
7e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
8e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber *
10e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Unless required by applicable law or agreed to in writing, software
11e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * See the License for the specific language governing permissions and
14e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * limitations under the License.
15e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber */
16e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
17e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#ifndef ANDROID_IOMX_H_
18e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
19e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#define ANDROID_IOMX_H_
20e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
21e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <binder/IInterface.h>
22e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <utils/List.h>
23e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <utils/String8.h>
24e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
25e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <OMX_Core.h>
26e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
27e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#define IOMX_USES_SOCKETS       0
28e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
29e46b7be812d68e49710b34048662cbf18e2a6550Andreas Hubernamespace android {
30e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
31e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IMemory;
32e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IOMXObserver;
33e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
34e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IOMX : public IInterface {
35e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic:
36e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    DECLARE_META_INTERFACE(OMX);
37e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
38e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    typedef void *buffer_id;
39e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    typedef void *node_id;
40e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
41e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#if IOMX_USES_SOCKETS
42e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    // If successful, returns a socket descriptor used for further
43e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    // communication. Caller assumes ownership of "*sd".
44e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t connect(int *sd) = 0;
45e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif
46e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
47e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t list_nodes(List<String8> *list) = 0;
48e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
49e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t allocate_node(const char *name, node_id *node) = 0;
50e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t free_node(node_id node) = 0;
51e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
52e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t send_command(
53e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0;
54e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
55e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t get_parameter(
56e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, OMX_INDEXTYPE index,
57e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            void *params, size_t size) = 0;
58e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
59e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t set_parameter(
60e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, OMX_INDEXTYPE index,
61e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            const void *params, size_t size) = 0;
62e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
63e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t use_buffer(
64e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, OMX_U32 port_index, const sp<IMemory> &params,
65e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            buffer_id *buffer) = 0;
66e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
67e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t allocate_buffer(
68e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, OMX_U32 port_index, size_t size,
69e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            buffer_id *buffer) = 0;
70e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
71e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t allocate_buffer_with_backup(
72e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, OMX_U32 port_index, const sp<IMemory> &params,
73e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            buffer_id *buffer) = 0;
74e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
75e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t free_buffer(
76e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, OMX_U32 port_index, buffer_id buffer) = 0;
77e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
78e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#if !IOMX_USES_SOCKETS
79e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t observe_node(
80e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node, const sp<IOMXObserver> &observer) = 0;
81e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
82e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual void fill_buffer(node_id node, buffer_id buffer) = 0;
83e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
84e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual void empty_buffer(
85e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            node_id node,
86e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            buffer_id buffer,
87e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_U32 range_offset, OMX_U32 range_length,
88e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_U32 flags, OMX_TICKS timestamp) = 0;
89e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif
90e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber};
91e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
92e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberstruct omx_message {
93e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    enum {
94e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        EVENT,
95e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        EMPTY_BUFFER_DONE,
96e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        FILL_BUFFER_DONE,
97e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
98e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#if IOMX_USES_SOCKETS
99e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        EMPTY_BUFFER,
100e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        FILL_BUFFER,
101e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        SEND_COMMAND,
102e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        DISCONNECT,
103e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        DISCONNECTED,
104e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif
105e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
106e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        // reserved for OMXDecoder use.
107e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        START,
108e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        INITIAL_FILL_BUFFER,
109e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
110e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        // reserved for OMXObserver use.
111e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        QUIT_OBSERVER,
112e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    } type;
113e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
114e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    union {
115e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        // if type == EVENT
116e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        struct {
117e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            IOMX::node_id node;
118e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_EVENTTYPE event;
119e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_U32 data1;
120e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_U32 data2;
121e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        } event_data;
122e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
123e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        // if type == EMPTY_BUFFER_DONE || type == FILL_BUFFER
124e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        //    || type == INITIAL_FILL_BUFFER
125e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        struct {
126e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            IOMX::node_id node;
127e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            IOMX::buffer_id buffer;
128e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        } buffer_data;
129e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
130e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        // if type == EMPTY_BUFFER || type == FILL_BUFFER_DONE
131e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        struct {
132e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            IOMX::node_id node;
133e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            IOMX::buffer_id buffer;
134e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_U32 range_offset;
135e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_U32 range_length;
136e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_U32 flags;
137e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_TICKS timestamp;
138e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_PTR platform_private;  // ignored if type == EMPTY_BUFFER
139e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        } extended_buffer_data;
140e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
141e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        // if type == SEND_COMMAND
142e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        struct {
143e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            IOMX::node_id node;
144e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_COMMANDTYPE cmd;
145e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            OMX_S32 param;
146e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber        } send_command_data;
147e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
148e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    } u;
149e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber};
150e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
151e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IOMXObserver : public IInterface {
152e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic:
153e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    DECLARE_META_INTERFACE(OMXObserver);
154e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
155e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual void on_message(const omx_message &msg) = 0;
156e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber};
157e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
158e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber////////////////////////////////////////////////////////////////////////////////
159e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
160e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass BnOMX : public BnInterface<IOMX> {
161e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic:
162e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t onTransact(
163e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            uint32_t code, const Parcel &data, Parcel *reply,
164e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            uint32_t flags = 0);
165e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber};
166e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
167e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass BnOMXObserver : public BnInterface<IOMXObserver> {
168e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic:
169e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber    virtual status_t onTransact(
170e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            uint32_t code, const Parcel &data, Parcel *reply,
171e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber            uint32_t flags = 0);
172e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber};
173e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
174e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}  // namespace android
175e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber
176e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif  // ANDROID_IOMX_H_
177