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> 227cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden#include <gui/IGraphicBufferProducer.h> 23d291c222357303b9611cab89d0c3b047584ef377Chong Zhang#include <gui/IGraphicBufferConsumer.h> 2483750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis#include <ui/GraphicBuffer.h> 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/List.h> 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/String8.h> 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2826a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar#include <list> 2926a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar 30054219874873b41f1c815552987c10465c34ba2bLajos Molnar#include <media/hardware/MetadataBufferType.h> 31054219874873b41f1c815552987c10465c34ba2bLajos Molnar 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <OMX_Core.h> 338b938cdab5bd3d074d9b41bc2915fcfc11e47f27Andreas Huber#include <OMX_Video.h> 3420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3520111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android { 3620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IMemory; 3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMXObserver; 398b938cdab5bd3d074d9b41bc2915fcfc11e47f27Andreas Huberclass IOMXRenderer; 40f4148b55c5d6f68b22462e3880015fefa91ae7c6Andreas Huberclass Surface; 4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMX : public IInterface { 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DECLARE_META_INTERFACE(OMX); 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 46609b815a3131d22da38b2f452faa9f89daad4039Andy Hung typedef uint32_t buffer_id; 47609b815a3131d22da38b2f452faa9f89daad4039Andy Hung typedef uint32_t node_id; 4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 49d459b485c61bd3e7fd81c5cd3af8ada27fc3e8d3Andreas Huber // Given a node_id and the calling process' pid, returns true iff 507eaa9c9385535b651064e02d05a8ffa4b2359281Andreas Huber // the implementation of the OMX interface lives in the same 517eaa9c9385535b651064e02d05a8ffa4b2359281Andreas Huber // process. 52d459b485c61bd3e7fd81c5cd3af8ada27fc3e8d3Andreas Huber virtual bool livesLocally(node_id node, pid_t pid) = 0; 537eaa9c9385535b651064e02d05a8ffa4b2359281Andreas Huber 54134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber struct ComponentInfo { 55134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber String8 mName; 56134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber List<String8> mRoles; 57134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber }; 58134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber virtual status_t listNodes(List<ComponentInfo> *list) = 0; 5920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 60318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t allocateNode( 61318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber const char *name, const sp<IOMXObserver> &observer, 62318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber node_id *node) = 0; 6320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 64318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t freeNode(node_id node) = 0; 65318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 66318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t sendCommand( 6720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0; 6820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 69318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t getParameter( 7020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_INDEXTYPE index, 7120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *params, size_t size) = 0; 7220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 73318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t setParameter( 7420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_INDEXTYPE index, 7520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *params, size_t size) = 0; 7620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 77318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t getConfig( 78693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber node_id node, OMX_INDEXTYPE index, 79693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber void *params, size_t size) = 0; 80693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 81318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t setConfig( 82693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber node_id node, OMX_INDEXTYPE index, 83693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber const void *params, size_t size) = 0; 84693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 85b1d666f5cb555d135eb69e005e88a03330bbb54cJamie Gennis virtual status_t getState( 86b1d666f5cb555d135eb69e005e88a03330bbb54cJamie Gennis node_id node, OMX_STATETYPE* state) = 0; 87b1d666f5cb555d135eb69e005e88a03330bbb54cJamie Gennis 88054219874873b41f1c815552987c10465c34ba2bLajos Molnar // This will set *type to previous metadata buffer type on OMX error (not on binder error), and 89054219874873b41f1c815552987c10465c34ba2bLajos Molnar // new metadata buffer type on success. 90e870772a78ffe08b1c14a791e368f1499f1be0f3James Dong virtual status_t storeMetaDataInBuffers( 91054219874873b41f1c815552987c10465c34ba2bLajos Molnar node_id node, OMX_U32 port_index, OMX_BOOL enable, MetadataBufferType *type = NULL) = 0; 92e870772a78ffe08b1c14a791e368f1499f1be0f3James Dong 9356ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar virtual status_t prepareForAdaptivePlayback( 9456ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar node_id node, OMX_U32 portIndex, OMX_BOOL enable, 9556ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar OMX_U32 maxFrameWidth, OMX_U32 maxFrameHeight) = 0; 9656ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar 9715ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar virtual status_t configureVideoTunnelMode( 985a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad node_id node, OMX_U32 portIndex, OMX_BOOL tunneled, 995a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad OMX_U32 audioHwSync, native_handle_t **sidebandHandle) = 0; 1005a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad 10183750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis virtual status_t enableGraphicBuffers( 10283750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis node_id node, OMX_U32 port_index, OMX_BOOL enable) = 0; 10383750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis 104e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis virtual status_t getGraphicBufferUsage( 105e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis node_id node, OMX_U32 port_index, OMX_U32* usage) = 0; 106e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis 107cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar // Use |params| as an OMX buffer, but limit the size of the OMX buffer to |allottedSize|. 108318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t useBuffer( 10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 110cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar buffer_id *buffer, OMX_U32 allottedSize) = 0; 11120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 11283750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis virtual status_t useGraphicBuffer( 11383750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis node_id node, OMX_U32 port_index, 11483750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer) = 0; 11583750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis 116d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar virtual status_t updateGraphicBufferInMeta( 117d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar node_id node, OMX_U32 port_index, 118d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) = 0; 119d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar 120054219874873b41f1c815552987c10465c34ba2bLajos Molnar // This will set *type to resulting metadata buffer type on OMX error (not on binder error) as 121054219874873b41f1c815552987c10465c34ba2bLajos Molnar // well as on success. 1227cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden virtual status_t createInputSurface( 1237cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden node_id node, OMX_U32 port_index, 124054219874873b41f1c815552987c10465c34ba2bLajos Molnar sp<IGraphicBufferProducer> *bufferProducer, 125054219874873b41f1c815552987c10465c34ba2bLajos Molnar MetadataBufferType *type = NULL) = 0; 1267cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 127d291c222357303b9611cab89d0c3b047584ef377Chong Zhang virtual status_t createPersistentInputSurface( 128d291c222357303b9611cab89d0c3b047584ef377Chong Zhang sp<IGraphicBufferProducer> *bufferProducer, 129d291c222357303b9611cab89d0c3b047584ef377Chong Zhang sp<IGraphicBufferConsumer> *bufferConsumer) = 0; 130d291c222357303b9611cab89d0c3b047584ef377Chong Zhang 131054219874873b41f1c815552987c10465c34ba2bLajos Molnar // This will set *type to resulting metadata buffer type on OMX error (not on binder error) as 132054219874873b41f1c815552987c10465c34ba2bLajos Molnar // well as on success. 1338f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang virtual status_t setInputSurface( 134d291c222357303b9611cab89d0c3b047584ef377Chong Zhang node_id node, OMX_U32 port_index, 135054219874873b41f1c815552987c10465c34ba2bLajos Molnar const sp<IGraphicBufferConsumer> &bufferConsumer, 136054219874873b41f1c815552987c10465c34ba2bLajos Molnar MetadataBufferType *type) = 0; 137d291c222357303b9611cab89d0c3b047584ef377Chong Zhang 1387cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden virtual status_t signalEndOfInputStream(node_id node) = 0; 1397cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 140570a3cb7582daa030cb38eedc5eb6a06f86ecc7fAndreas Huber // This API clearly only makes sense if the caller lives in the 141570a3cb7582daa030cb38eedc5eb6a06f86ecc7fAndreas Huber // same process as the callee, i.e. is the media_server, as the 142570a3cb7582daa030cb38eedc5eb6a06f86ecc7fAndreas Huber // returned "buffer_data" pointer is just that, a pointer into local 143570a3cb7582daa030cb38eedc5eb6a06f86ecc7fAndreas Huber // address space. 144318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t allocateBuffer( 14520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, size_t size, 146570a3cb7582daa030cb38eedc5eb6a06f86ecc7fAndreas Huber buffer_id *buffer, void **buffer_data) = 0; 14720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 148cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar // Allocate an OMX buffer of size |allotedSize|. Use |params| as the backup buffer, which 149cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar // may be larger. 150318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t allocateBufferWithBackup( 15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 152cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar buffer_id *buffer, OMX_U32 allottedSize) = 0; 15320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 154318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t freeBuffer( 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, buffer_id buffer) = 0; 15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15715ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar enum { 15815ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar kFenceTimeoutMs = 1000 15915ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar }; 16015ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Calls OMX_FillBuffer on buffer, and passes |fenceFd| to component if it supports 16115ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // fences. Otherwise, it waits on |fenceFd| before calling OMX_FillBuffer. 16215ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Takes ownership of |fenceFd| even if this call fails. 16315ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar virtual status_t fillBuffer(node_id node, buffer_id buffer, int fenceFd = -1) = 0; 16415ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar 16515ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Calls OMX_EmptyBuffer on buffer (after updating buffer header with |range_offset|, 16615ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // |range_length|, |flags| and |timestamp|). Passes |fenceFd| to component if it 16715ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // supports fences. Otherwise, it waits on |fenceFd| before calling OMX_EmptyBuffer. 16815ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Takes ownership of |fenceFd| even if this call fails. 169318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t emptyBuffer( 17020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, 17120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber buffer_id buffer, 17220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_offset, OMX_U32 range_length, 17315ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar OMX_U32 flags, OMX_TICKS timestamp, int fenceFd = -1) = 0; 1748b938cdab5bd3d074d9b41bc2915fcfc11e47f27Andreas Huber 175318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t getExtensionIndex( 176693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber node_id node, 177693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber const char *parameter_name, 178693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber OMX_INDEXTYPE *index) = 0; 179e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber 180e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber enum InternalOptionType { 181e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber INTERNAL_OPTION_SUSPEND, // data is a bool 182a61285dcf1da8a2cf40c499ee3a7b9fc4d74ac58Andreas Huber INTERNAL_OPTION_REPEAT_PREVIOUS_FRAME_DELAY, // data is an int64_t 18394ee4b708acfa941581160b267afb79192b1d816Chong Zhang INTERNAL_OPTION_MAX_TIMESTAMP_GAP, // data is int64_t 18437b2b389139ed638831e49708c947863eef631efRonghua Wu INTERNAL_OPTION_MAX_FPS, // data is float 18572cecca17d735db6532c45f0a7e10c47ee6f065aChong Zhang INTERNAL_OPTION_START_TIME, // data is an int64_t 1862c9c8cba8562cc3a27532e4cd348912cc78d8d98Chong Zhang INTERNAL_OPTION_TIME_LAPSE, // data is an int64_t[2] 187e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber }; 188e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber virtual status_t setInternalOption( 189e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber node_id node, 190e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber OMX_U32 port_index, 191e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber InternalOptionType type, 192e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber const void *data, 193e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber size_t size) = 0; 19420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 19520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 19620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstruct omx_message { 19720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber enum { 19820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber EVENT, 19920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber EMPTY_BUFFER_DONE, 20020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber FILL_BUFFER_DONE, 20190fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar FRAME_RENDERED, 20220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } type; 20320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 204693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber IOMX::node_id node; 20515ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar int fenceFd; // used for EMPTY_BUFFER_DONE and FILL_BUFFER_DONE; client must close this 206693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 20720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber union { 20820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // if type == EVENT 20920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 21020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_EVENTTYPE event; 21120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 data1; 21220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 data2; 21320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } event_data; 21420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 215e0f0b08aa692d15f3bfa19e10abfc84803c099b4Andreas Huber // if type == EMPTY_BUFFER_DONE 21620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 21720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::buffer_id buffer; 21820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } buffer_data; 21920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 220e0f0b08aa692d15f3bfa19e10abfc84803c099b4Andreas Huber // if type == FILL_BUFFER_DONE 22120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 22220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::buffer_id buffer; 22320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_offset; 22420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_length; 22520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 flags; 22620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_TICKS timestamp; 22720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } extended_buffer_data; 22820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 22990fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar // if type == FRAME_RENDERED 23090fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar struct { 23190fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar OMX_TICKS timestamp; 23290fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar OMX_S64 nanoTime; 23390fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar } render_data; 23420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } u; 23520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 23620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 23720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMXObserver : public IInterface { 23820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 23920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DECLARE_META_INTERFACE(OMXObserver); 24020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24126a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar // Handle (list of) messages. 24226a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar virtual void onMessages(const std::list<omx_message> &messages) = 0; 24320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 24420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber//////////////////////////////////////////////////////////////////////////////// 24620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass BnOMX : public BnInterface<IOMX> { 24820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 24920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t onTransact( 25020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 25120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t flags = 0); 25220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 25320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass BnOMXObserver : public BnInterface<IOMXObserver> { 25520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 25620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t onTransact( 25720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 25820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t flags = 0); 25920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 26020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 261457116d3a01618acf9a875020ca5860551ba03a6James Dongstruct CodecProfileLevel { 262457116d3a01618acf9a875020ca5860551ba03a6James Dong OMX_U32 mProfile; 263457116d3a01618acf9a875020ca5860551ba03a6James Dong OMX_U32 mLevel; 264457116d3a01618acf9a875020ca5860551ba03a6James Dong}; 265457116d3a01618acf9a875020ca5860551ba03a6James Dong 26620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} // namespace android 26720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 268054219874873b41f1c815552987c10465c34ba2bLajos Molnarinline static const char *asString(android::MetadataBufferType i, const char *def = "??") { 269054219874873b41f1c815552987c10465c34ba2bLajos Molnar using namespace android; 270054219874873b41f1c815552987c10465c34ba2bLajos Molnar switch (i) { 271054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeCameraSource: return "CameraSource"; 272054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeGrallocSource: return "GrallocSource"; 273054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeANWBuffer: return "ANWBuffer"; 274054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeInvalid: return "Invalid"; 275054219874873b41f1c815552987c10465c34ba2bLajos Molnar default: return def; 276054219874873b41f1c815552987c10465c34ba2bLajos Molnar } 277054219874873b41f1c815552987c10465c34ba2bLajos Molnar} 278054219874873b41f1c815552987c10465c34ba2bLajos Molnar 27920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif // ANDROID_IOMX_H_ 280