IOMX.h revision 20111aa043c5f404472bc63b90bc5aad906b1101
120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Copyright (C) 2009 The Android Open Source Project 320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * you may not use this file except in compliance with the License. 620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * You may obtain a copy of the License at 720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Unless required by applicable law or agreed to in writing, software 1120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * See the License for the specific language governing permissions and 1420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * limitations under the License. 1520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#ifndef ANDROID_IOMX_H_ 1820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define ANDROID_IOMX_H_ 2020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <binder/IInterface.h> 2220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/List.h> 2320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/String8.h> 2420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <OMX_Core.h> 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define IOMX_USES_SOCKETS 0 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android { 3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IMemory; 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMXObserver; 3320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMX : public IInterface { 3520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 3620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DECLARE_META_INTERFACE(OMX); 3720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typedef void *buffer_id; 3920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typedef void *node_id; 4020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#if IOMX_USES_SOCKETS 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // If successful, returns a socket descriptor used for further 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // communication. Caller assumes ownership of "*sd". 4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t connect(int *sd) = 0; 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif 4620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t list_nodes(List<String8> *list) = 0; 4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t allocate_node(const char *name, node_id *node) = 0; 5020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t free_node(node_id node) = 0; 5120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 5220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t send_command( 5320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0; 5420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 5520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t get_parameter( 5620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_INDEXTYPE index, 5720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *params, size_t size) = 0; 5820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 5920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t set_parameter( 6020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_INDEXTYPE index, 6120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *params, size_t size) = 0; 6220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t use_buffer( 6420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 6520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber buffer_id *buffer) = 0; 6620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t allocate_buffer( 6820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, size_t size, 6920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber buffer_id *buffer) = 0; 7020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 7120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t allocate_buffer_with_backup( 7220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 7320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber buffer_id *buffer) = 0; 7420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 7520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t free_buffer( 7620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, buffer_id buffer) = 0; 7720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 7820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#if !IOMX_USES_SOCKETS 7920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t observe_node( 8020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, const sp<IOMXObserver> &observer) = 0; 8120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 8220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual void fill_buffer(node_id node, buffer_id buffer) = 0; 8320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 8420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual void empty_buffer( 8520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, 8620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber buffer_id buffer, 8720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_offset, OMX_U32 range_length, 8820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 flags, OMX_TICKS timestamp) = 0; 8920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif 9020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 9120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstruct omx_message { 9320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber enum { 9420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber EVENT, 9520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber EMPTY_BUFFER_DONE, 9620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber FILL_BUFFER_DONE, 9720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#if IOMX_USES_SOCKETS 9920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber EMPTY_BUFFER, 10020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber FILL_BUFFER, 10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber SEND_COMMAND, 10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DISCONNECT, 10320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DISCONNECTED, 10420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif 10520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // reserved for OMXDecoder use. 10720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber START, 10820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber INITIAL_FILL_BUFFER, 10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 11020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // reserved for OMXObserver use. 11120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber QUIT_OBSERVER, 11220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } type; 11320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 11420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber union { 11520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // if type == EVENT 11620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 11720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::node_id node; 11820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_EVENTTYPE event; 11920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 data1; 12020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 data2; 12120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } event_data; 12220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 12320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // if type == EMPTY_BUFFER_DONE || type == FILL_BUFFER 12420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // || type == INITIAL_FILL_BUFFER 12520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 12620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::node_id node; 12720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::buffer_id buffer; 12820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } buffer_data; 12920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 13020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // if type == EMPTY_BUFFER || type == FILL_BUFFER_DONE 13120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 13220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::node_id node; 13320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::buffer_id buffer; 13420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_offset; 13520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_length; 13620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 flags; 13720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_TICKS timestamp; 13820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_PTR platform_private; // ignored if type == EMPTY_BUFFER 13920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } extended_buffer_data; 14020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // if type == SEND_COMMAND 14220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 14320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::node_id node; 14420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_COMMANDTYPE cmd; 14520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_S32 param; 14620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } send_command_data; 14720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } u; 14920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 15020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMXObserver : public IInterface { 15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 15320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DECLARE_META_INTERFACE(OMXObserver); 15420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual void on_message(const omx_message &msg) = 0; 15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber//////////////////////////////////////////////////////////////////////////////// 15920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass BnOMX : public BnInterface<IOMX> { 16120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 16220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t onTransact( 16320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 16420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t flags = 0); 16520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 16620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass BnOMXObserver : public BnInterface<IOMXObserver> { 16820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 16920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t onTransact( 17020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 17120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t flags = 0); 17220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 17320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 17420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} // namespace android 17520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 17620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif // ANDROID_IOMX_H_ 177