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> ¶ms, 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> ¶ms, 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