IOMX.h revision 2ea14e231945afb6581fa8f54015b33bc74a19e5
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 452ea14e231945afb6581fa8f54015b33bc74a19e5Andreas Huber struct ComponentInfo { 462ea14e231945afb6581fa8f54015b33bc74a19e5Andreas Huber String8 mName; 472ea14e231945afb6581fa8f54015b33bc74a19e5Andreas Huber List<String8> mRoles; 482ea14e231945afb6581fa8f54015b33bc74a19e5Andreas Huber }; 492ea14e231945afb6581fa8f54015b33bc74a19e5Andreas Huber virtual status_t listNodes(List<ComponentInfo> *list) = 0; 50e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 51784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t allocateNode( 52784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber const char *name, const sp<IOMXObserver> &observer, 53784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber node_id *node) = 0; 54e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 55784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t freeNode(node_id node) = 0; 56784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber 57784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t sendCommand( 58e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0; 59e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 60784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t getParameter( 61e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_INDEXTYPE index, 62e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber void *params, size_t size) = 0; 63e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 64784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t setParameter( 65e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_INDEXTYPE index, 66e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber const void *params, size_t size) = 0; 67e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 68784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t getConfig( 69be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber node_id node, OMX_INDEXTYPE index, 70be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber void *params, size_t size) = 0; 71be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 72784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t setConfig( 73be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber node_id node, OMX_INDEXTYPE index, 74be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber const void *params, size_t size) = 0; 75be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 76784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t useBuffer( 77e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 78e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id *buffer) = 0; 79e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 80784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t allocateBuffer( 81e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, size_t size, 82e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id *buffer) = 0; 83e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 84784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t allocateBufferWithBackup( 85e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 86e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id *buffer) = 0; 87e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 88784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t freeBuffer( 89e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, OMX_U32 port_index, buffer_id buffer) = 0; 90e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 91784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t fillBuffer(node_id node, buffer_id buffer) = 0; 92e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 93784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t emptyBuffer( 94e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber node_id node, 95e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber buffer_id buffer, 96e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 range_offset, OMX_U32 range_length, 97e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 flags, OMX_TICKS timestamp) = 0; 981de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 99784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual status_t getExtensionIndex( 100be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber node_id node, 101be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber const char *parameter_name, 102be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber OMX_INDEXTYPE *index) = 0; 103be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 1041de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber virtual sp<IOMXRenderer> createRenderer( 1051de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber const sp<ISurface> &surface, 1061de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber const char *componentName, 1071de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber OMX_COLOR_FORMATTYPE colorFormat, 1081de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber size_t encodedWidth, size_t encodedHeight, 1091de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber size_t displayWidth, size_t displayHeight) = 0; 110ccf8b94169197875af6c89172015b9644919b064Andreas Huber 1119f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber // Note: These methods are _not_ virtual, it exists as a wrapper around 112ccf8b94169197875af6c89172015b9644919b064Andreas Huber // the virtual "createRenderer" method above facilitating extraction 1139f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber // of the ISurface from a regular Surface or a java Surface object. 114ccf8b94169197875af6c89172015b9644919b064Andreas Huber sp<IOMXRenderer> createRenderer( 115ccf8b94169197875af6c89172015b9644919b064Andreas Huber const sp<Surface> &surface, 116ccf8b94169197875af6c89172015b9644919b064Andreas Huber const char *componentName, 117ccf8b94169197875af6c89172015b9644919b064Andreas Huber OMX_COLOR_FORMATTYPE colorFormat, 118ccf8b94169197875af6c89172015b9644919b064Andreas Huber size_t encodedWidth, size_t encodedHeight, 119ccf8b94169197875af6c89172015b9644919b064Andreas Huber size_t displayWidth, size_t displayHeight); 1209f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber 1219f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber sp<IOMXRenderer> createRendererFromJavaSurface( 1229f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber JNIEnv *env, jobject javaSurface, 1239f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber const char *componentName, 1249f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber OMX_COLOR_FORMATTYPE colorFormat, 1259f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber size_t encodedWidth, size_t encodedHeight, 1269f9afef3d5da3be6812192e60797b1c035445c3cAndreas Huber size_t displayWidth, size_t displayHeight); 127e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 128e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 129e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberstruct omx_message { 130e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber enum { 131e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber EVENT, 132e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber EMPTY_BUFFER_DONE, 133e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber FILL_BUFFER_DONE, 134e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 135e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } type; 136e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 137be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber IOMX::node_id node; 138be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber 139e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber union { 140e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber // if type == EVENT 141e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber struct { 142e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_EVENTTYPE event; 143e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 data1; 144e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 data2; 145e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } event_data; 146e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 147329577aa6d422d1dbb33f4771fc5e2949b4ad312Andreas Huber // if type == EMPTY_BUFFER_DONE 148e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber struct { 149e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber IOMX::buffer_id buffer; 150e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } buffer_data; 151e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 152329577aa6d422d1dbb33f4771fc5e2949b4ad312Andreas Huber // if type == FILL_BUFFER_DONE 153e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber struct { 154e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber IOMX::buffer_id buffer; 155e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 range_offset; 156e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 range_length; 157e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_U32 flags; 158e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber OMX_TICKS timestamp; 159329577aa6d422d1dbb33f4771fc5e2949b4ad312Andreas Huber OMX_PTR platform_private; 160e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } extended_buffer_data; 161e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 162e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber } u; 163e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 164e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 165e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass IOMXObserver : public IInterface { 166e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 167e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber DECLARE_META_INTERFACE(OMXObserver); 168e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 169784202ea115603004b067aacf6a57bf5d2a7d53bAndreas Huber virtual void onMessage(const omx_message &msg) = 0; 170e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 171e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 1721de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberclass IOMXRenderer : public IInterface { 1731de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberpublic: 1741de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber DECLARE_META_INTERFACE(OMXRenderer); 1751de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 1761de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber virtual void render(IOMX::buffer_id buffer) = 0; 1771de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber}; 1781de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 179e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber//////////////////////////////////////////////////////////////////////////////// 180e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 181e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass BnOMX : public BnInterface<IOMX> { 182e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 183e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber virtual status_t onTransact( 184e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 185e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t flags = 0); 186e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 187e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 188e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass BnOMXObserver : public BnInterface<IOMXObserver> { 189e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 190e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber virtual status_t onTransact( 191e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 192e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber uint32_t flags = 0); 193e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 194e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 1951de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberclass BnOMXRenderer : public BnInterface<IOMXRenderer> { 1961de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huberpublic: 1971de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber virtual status_t onTransact( 1981de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber uint32_t code, const Parcel &data, Parcel *reply, 1991de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber uint32_t flags = 0); 2001de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber}; 2011de13168a9d9f55464dc98748ea28ef785f1048eAndreas Huber 202e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} // namespace android 203e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 204e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif // ANDROID_IOMX_H_ 205