IOMX.h revision 784202ea115603004b067aacf6a57bf5d2a7d53b
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> 261de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber#include <OMX_Video.h> 27e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 289f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber#include "jni.h" 299f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber 30e46b7be812d68e49710b34048662cbf18e2a6550Andreas Hubernamespace android { 31e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 32e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IMemory; 33e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IOMXObserver; 341de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberclass IOMXRenderer; 351de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberclass ISurface; 36ccf8b94169197875af6c89172015b9644919b064Andreas Huberclass Surface; 37e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 38e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IOMX : public IInterface { 39e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 40e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber DECLARE_META_INTERFACE(OMX); 41e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 42e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber typedef void *buffer_id; 43e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber typedef void *node_id; 44e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 45784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t listNodes(List<String8> *list) = 0; 46e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 47784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t allocateNode( 48784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber const char *name, const sp<IOMXObserver> &observer, 49784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber node_id *node) = 0; 50e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 51784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t freeNode(node_id node) = 0; 52784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber 53784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t sendCommand( 54e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0; 55e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 56784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t getParameter( 57e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_INDEXTYPE index, 58e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber void *params, size_t size) = 0; 59e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 60784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t setParameter( 61e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_INDEXTYPE index, 62e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber const void *params, size_t size) = 0; 63e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 64784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t getConfig( 65be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber node_id node, OMX_INDEXTYPE index, 66be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber void *params, size_t size) = 0; 67be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 68784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t setConfig( 69be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber node_id node, OMX_INDEXTYPE index, 70be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber const void *params, size_t size) = 0; 71be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 72784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t useBuffer( 73e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 74e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id *buffer) = 0; 75e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 76784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t allocateBuffer( 77e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, size_t size, 78e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id *buffer) = 0; 79e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 80784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t allocateBufferWithBackup( 81e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 82e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id *buffer) = 0; 83e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 84784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t freeBuffer( 85e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, buffer_id buffer) = 0; 86e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 87784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t fillBuffer(node_id node, buffer_id buffer) = 0; 88e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 89784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t emptyBuffer( 90e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, 91e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id buffer, 92e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 range_offset, OMX_U32 range_length, 93e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 flags, OMX_TICKS timestamp) = 0; 941de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 95784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t getExtensionIndex( 96be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber node_id node, 97be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber const char *parameter_name, 98be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber OMX_INDEXTYPE *index) = 0; 99be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 1001de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber virtual sp<IOMXRenderer> createRenderer( 1011de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber const sp<ISurface> &surface, 1021de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber const char *componentName, 1031de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber OMX_COLOR_FORMATTYPE colorFormat, 1041de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber size_t encodedWidth, size_t encodedHeight, 1051de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber size_t displayWidth, size_t displayHeight) = 0; 106ccf8b94169197875af6c89172015b9644919b064Andreas Huber 1079f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber // Note: These methods are _not_ virtual, it exists as a wrapper around 108ccf8b94169197875af6c89172015b9644919b064Andreas Huber // the virtual "createRenderer" method above facilitating extraction 1099f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber // of the ISurface from a regular Surface or a java Surface object. 110ccf8b94169197875af6c89172015b9644919b064Andreas Huber sp<IOMXRenderer> createRenderer( 111ccf8b94169197875af6c89172015b9644919b064Andreas Huber const sp<Surface> &surface, 112ccf8b94169197875af6c89172015b9644919b064Andreas Huber const char *componentName, 113ccf8b94169197875af6c89172015b9644919b064Andreas Huber OMX_COLOR_FORMATTYPE colorFormat, 114ccf8b94169197875af6c89172015b9644919b064Andreas Huber size_t encodedWidth, size_t encodedHeight, 115ccf8b94169197875af6c89172015b9644919b064Andreas Huber size_t displayWidth, size_t displayHeight); 1169f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber 1179f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber sp<IOMXRenderer> createRendererFromJavaSurface( 1189f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber JNIEnv *env, jobject javaSurface, 1199f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber const char *componentName, 1209f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber OMX_COLOR_FORMATTYPE colorFormat, 1219f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber size_t encodedWidth, size_t encodedHeight, 1229f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber size_t displayWidth, size_t displayHeight); 123e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 124e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 125e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberstruct omx_message { 126e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber enum { 127e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber EVENT, 128e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber EMPTY_BUFFER_DONE, 129e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber FILL_BUFFER_DONE, 130e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 131e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } type; 132e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 133be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber IOMX::node_id node; 134be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 135e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber union { 136e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber // if type == EVENT 137e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber struct { 138e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_EVENTTYPE event; 139e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 data1; 140e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 data2; 141e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } event_data; 142e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 143329577aa6d422d1dbb33f4771fc5e2949b4ad312Andreas Huber // if type == EMPTY_BUFFER_DONE 144e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber struct { 145e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber IOMX::buffer_id buffer; 146e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } buffer_data; 147e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 148329577aa6d422d1dbb33f4771fc5e2949b4ad312Andreas Huber // if type == FILL_BUFFER_DONE 149e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber struct { 150e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber IOMX::buffer_id buffer; 151e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 range_offset; 152e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 range_length; 153e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 flags; 154e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_TICKS timestamp; 155329577aa6d422d1dbb33f4771fc5e2949b4ad312Andreas Huber OMX_PTR platform_private; 156e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } extended_buffer_data; 157e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 158e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } u; 159e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 160e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 161e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IOMXObserver : public IInterface { 162e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 163e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber DECLARE_META_INTERFACE(OMXObserver); 164e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 165784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual void onMessage(const omx_message &msg) = 0; 166e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 167e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 1681de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberclass IOMXRenderer : public IInterface { 1691de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberpublic: 1701de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber DECLARE_META_INTERFACE(OMXRenderer); 1711de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 1721de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber virtual void render(IOMX::buffer_id buffer) = 0; 1731de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber}; 1741de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 175e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber//////////////////////////////////////////////////////////////////////////////// 176e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 177e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass BnOMX : public BnInterface<IOMX> { 178e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 179e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber virtual status_t onTransact( 180e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 181e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t flags = 0); 182e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 183e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 184e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass BnOMXObserver : public BnInterface<IOMXObserver> { 185e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 186e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber virtual status_t onTransact( 187e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 188e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t flags = 0); 189e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 190e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 1911de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberclass BnOMXRenderer : public BnInterface<IOMXRenderer> { 1921de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberpublic: 1931de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber virtual status_t onTransact( 1941de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber uint32_t code, const Parcel &data, Parcel *reply, 1951de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber uint32_t flags = 0); 1961de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber}; 1971de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 198e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} // namespace android 199e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 200e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif // ANDROID_IOMX_H_ 201