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; 401b40f2804a27b695e9e53fb1699b64cb0dd387f9Lajos Molnarclass NativeHandle; 41f4148b55c5d6f68b22462e3880015fefa91ae7c6Andreas Huberclass Surface; 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMX : public IInterface { 4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DECLARE_META_INTERFACE(OMX); 4620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 47609b815a3131d22da38b2f452faa9f89daad4039Andy Hung typedef uint32_t buffer_id; 48609b815a3131d22da38b2f452faa9f89daad4039Andy Hung typedef uint32_t node_id; 4920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 50d459b485c61bd3e7fd81c5cd3af8ada27fc3e8d3Andreas Huber // Given a node_id and the calling process' pid, returns true iff 517eaa9c9385535b651064e02d05a8ffa4b2359281Andreas Huber // the implementation of the OMX interface lives in the same 527eaa9c9385535b651064e02d05a8ffa4b2359281Andreas Huber // process. 53d459b485c61bd3e7fd81c5cd3af8ada27fc3e8d3Andreas Huber virtual bool livesLocally(node_id node, pid_t pid) = 0; 547eaa9c9385535b651064e02d05a8ffa4b2359281Andreas Huber 55134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber struct ComponentInfo { 56134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber String8 mName; 57134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber List<String8> mRoles; 58134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber }; 59134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber virtual status_t listNodes(List<ComponentInfo> *list) = 0; 6020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 61318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t allocateNode( 62318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber const char *name, const sp<IOMXObserver> &observer, 6323858874bbce68fb5ac83250087fa7788c97dd12Marco Nelissen sp<IBinder> *nodeBinder, 64318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber node_id *node) = 0; 6520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 66318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t freeNode(node_id node) = 0; 67318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 68318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t sendCommand( 6920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0; 7020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 71318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t getParameter( 7220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_INDEXTYPE index, 7320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *params, size_t size) = 0; 7420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 75318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t setParameter( 7620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_INDEXTYPE index, 7720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *params, size_t size) = 0; 7820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 79318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t getConfig( 80693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber node_id node, OMX_INDEXTYPE index, 81693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber void *params, size_t size) = 0; 82693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 83318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t setConfig( 84693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber node_id node, OMX_INDEXTYPE index, 85693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber const void *params, size_t size) = 0; 86693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 87b1d666f5cb555d135eb69e005e88a03330bbb54cJamie Gennis virtual status_t getState( 88b1d666f5cb555d135eb69e005e88a03330bbb54cJamie Gennis node_id node, OMX_STATETYPE* state) = 0; 89b1d666f5cb555d135eb69e005e88a03330bbb54cJamie Gennis 90054219874873b41f1c815552987c10465c34ba2bLajos Molnar // This will set *type to previous metadata buffer type on OMX error (not on binder error), and 91054219874873b41f1c815552987c10465c34ba2bLajos Molnar // new metadata buffer type on success. 92e870772a78ffe08b1c14a791e368f1499f1be0f3James Dong virtual status_t storeMetaDataInBuffers( 93054219874873b41f1c815552987c10465c34ba2bLajos Molnar node_id node, OMX_U32 port_index, OMX_BOOL enable, MetadataBufferType *type = NULL) = 0; 94e870772a78ffe08b1c14a791e368f1499f1be0f3James Dong 9556ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar virtual status_t prepareForAdaptivePlayback( 9656ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar node_id node, OMX_U32 portIndex, OMX_BOOL enable, 9756ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar OMX_U32 maxFrameWidth, OMX_U32 maxFrameHeight) = 0; 9856ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar 9915ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar virtual status_t configureVideoTunnelMode( 1005a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad node_id node, OMX_U32 portIndex, OMX_BOOL tunneled, 1015a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad OMX_U32 audioHwSync, native_handle_t **sidebandHandle) = 0; 1025a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad 103a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar virtual status_t enableNativeBuffers( 104a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar node_id node, OMX_U32 port_index, OMX_BOOL graphic, OMX_BOOL enable) = 0; 10583750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis 106e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis virtual status_t getGraphicBufferUsage( 107e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis node_id node, OMX_U32 port_index, OMX_U32* usage) = 0; 108e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis 109cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar // Use |params| as an OMX buffer, but limit the size of the OMX buffer to |allottedSize|. 110318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t useBuffer( 11120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 112cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar buffer_id *buffer, OMX_U32 allottedSize) = 0; 11320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 11483750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis virtual status_t useGraphicBuffer( 11583750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis node_id node, OMX_U32 port_index, 11683750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer) = 0; 11783750eaf5a3f38c243a9e7eb81d4b2421e3a0d88Jamie Gennis 118d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar virtual status_t updateGraphicBufferInMeta( 119d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar node_id node, OMX_U32 port_index, 120d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) = 0; 121d0715867861c216e88a4a7523b6da8a3cb128724Lajos Molnar 1227e0bef8aa6bf9db06079b743794ec2712ad84431Lajos Molnar virtual status_t updateNativeHandleInMeta( 1237e0bef8aa6bf9db06079b743794ec2712ad84431Lajos Molnar node_id node, OMX_U32 port_index, 1247e0bef8aa6bf9db06079b743794ec2712ad84431Lajos Molnar const sp<NativeHandle> &nativeHandle, buffer_id buffer) = 0; 1257e0bef8aa6bf9db06079b743794ec2712ad84431Lajos Molnar 126054219874873b41f1c815552987c10465c34ba2bLajos Molnar // This will set *type to resulting metadata buffer type on OMX error (not on binder error) as 127054219874873b41f1c815552987c10465c34ba2bLajos Molnar // well as on success. 1287cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden virtual status_t createInputSurface( 12957fad3c31f46ec98d15bc253c16f9d269aeb8ea7Lajos Molnar node_id node, OMX_U32 port_index, android_dataspace dataSpace, 130054219874873b41f1c815552987c10465c34ba2bLajos Molnar sp<IGraphicBufferProducer> *bufferProducer, 131054219874873b41f1c815552987c10465c34ba2bLajos Molnar MetadataBufferType *type = NULL) = 0; 1327cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 133d291c222357303b9611cab89d0c3b047584ef377Chong Zhang virtual status_t createPersistentInputSurface( 134d291c222357303b9611cab89d0c3b047584ef377Chong Zhang sp<IGraphicBufferProducer> *bufferProducer, 135d291c222357303b9611cab89d0c3b047584ef377Chong Zhang sp<IGraphicBufferConsumer> *bufferConsumer) = 0; 136d291c222357303b9611cab89d0c3b047584ef377Chong Zhang 137054219874873b41f1c815552987c10465c34ba2bLajos Molnar // This will set *type to resulting metadata buffer type on OMX error (not on binder error) as 138054219874873b41f1c815552987c10465c34ba2bLajos Molnar // well as on success. 1398f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang virtual status_t setInputSurface( 140d291c222357303b9611cab89d0c3b047584ef377Chong Zhang node_id node, OMX_U32 port_index, 141054219874873b41f1c815552987c10465c34ba2bLajos Molnar const sp<IGraphicBufferConsumer> &bufferConsumer, 142054219874873b41f1c815552987c10465c34ba2bLajos Molnar MetadataBufferType *type) = 0; 143d291c222357303b9611cab89d0c3b047584ef377Chong Zhang 1447cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden virtual status_t signalEndOfInputStream(node_id node) = 0; 1457cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 146a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar // Allocate an opaque buffer as a native handle. If component supports returning native 147a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar // handles, those are returned in *native_handle. Otherwise, the allocated buffer is 148a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar // returned in *buffer_data. This clearly only makes sense if the caller lives in the 149a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar // same process as the callee, i.e. is the media_server, as the returned "buffer_data" 150a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar // pointer is just that, a pointer into local address space. 151a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar virtual status_t allocateSecureBuffer( 15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, size_t size, 1531b40f2804a27b695e9e53fb1699b64cb0dd387f9Lajos Molnar buffer_id *buffer, void **buffer_data, sp<NativeHandle> *native_handle) = 0; 15420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 155cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar // Allocate an OMX buffer of size |allotedSize|. Use |params| as the backup buffer, which 156cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar // may be larger. 157318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t allocateBufferWithBackup( 15820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 159cc7cc67349b7a3f498882087aa42ffc05a2daf11Lajos Molnar buffer_id *buffer, OMX_U32 allottedSize) = 0; 16020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 161318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t freeBuffer( 16220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, OMX_U32 port_index, buffer_id buffer) = 0; 16320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16415ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar enum { 16515ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar kFenceTimeoutMs = 1000 16615ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar }; 16715ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Calls OMX_FillBuffer on buffer, and passes |fenceFd| to component if it supports 16815ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // fences. Otherwise, it waits on |fenceFd| before calling OMX_FillBuffer. 16915ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Takes ownership of |fenceFd| even if this call fails. 17015ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar virtual status_t fillBuffer(node_id node, buffer_id buffer, int fenceFd = -1) = 0; 17115ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar 17215ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Calls OMX_EmptyBuffer on buffer (after updating buffer header with |range_offset|, 17315ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // |range_length|, |flags| and |timestamp|). Passes |fenceFd| to component if it 17415ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // supports fences. Otherwise, it waits on |fenceFd| before calling OMX_EmptyBuffer. 17515ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Takes ownership of |fenceFd| even if this call fails. 176318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t emptyBuffer( 17720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber node_id node, 17820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber buffer_id buffer, 17920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_offset, OMX_U32 range_length, 18015ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar OMX_U32 flags, OMX_TICKS timestamp, int fenceFd = -1) = 0; 1818b938cdab5bd3d074d9b41bc2915fcfc11e47f27Andreas Huber 182318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber virtual status_t getExtensionIndex( 183693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber node_id node, 184693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber const char *parameter_name, 185693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber OMX_INDEXTYPE *index) = 0; 186e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber 187e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber enum InternalOptionType { 188e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber INTERNAL_OPTION_SUSPEND, // data is a bool 189a61285dcf1da8a2cf40c499ee3a7b9fc4d74ac58Andreas Huber INTERNAL_OPTION_REPEAT_PREVIOUS_FRAME_DELAY, // data is an int64_t 19094ee4b708acfa941581160b267afb79192b1d816Chong Zhang INTERNAL_OPTION_MAX_TIMESTAMP_GAP, // data is int64_t 19137b2b389139ed638831e49708c947863eef631efRonghua Wu INTERNAL_OPTION_MAX_FPS, // data is float 19272cecca17d735db6532c45f0a7e10c47ee6f065aChong Zhang INTERNAL_OPTION_START_TIME, // data is an int64_t 1932c9c8cba8562cc3a27532e4cd348912cc78d8d98Chong Zhang INTERNAL_OPTION_TIME_LAPSE, // data is an int64_t[2] 194dd81af7ef969981748f35ec839869d34ed0cc768Lajos Molnar INTERNAL_OPTION_COLOR_ASPECTS, // data is ColorAspects 195e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber }; 196e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber virtual status_t setInternalOption( 197e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber node_id node, 198e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber OMX_U32 port_index, 199e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber InternalOptionType type, 200e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber const void *data, 201e40cda70eec141fa05cbcca1de420fdb22b98be6Andreas Huber size_t size) = 0; 20220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 20320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 20420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberstruct omx_message { 20520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber enum { 20620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber EVENT, 20720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber EMPTY_BUFFER_DONE, 20820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber FILL_BUFFER_DONE, 20990fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar FRAME_RENDERED, 21020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } type; 21120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 212693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber IOMX::node_id node; 21315ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar int fenceFd; // used for EMPTY_BUFFER_DONE and FILL_BUFFER_DONE; client must close this 214693d271e62a3726689ff68f4505ba49228eb94b2Andreas Huber 21520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber union { 21620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // if type == EVENT 21720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 21820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_EVENTTYPE event; 21920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 data1; 22020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 data2; 22120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } event_data; 22220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 223e0f0b08aa692d15f3bfa19e10abfc84803c099b4Andreas Huber // if type == EMPTY_BUFFER_DONE 22420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 22520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::buffer_id buffer; 22620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } buffer_data; 22720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 228e0f0b08aa692d15f3bfa19e10abfc84803c099b4Andreas Huber // if type == FILL_BUFFER_DONE 22920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct { 23020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber IOMX::buffer_id buffer; 23120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_offset; 23220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 range_length; 23320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_U32 flags; 23420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber OMX_TICKS timestamp; 23520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } extended_buffer_data; 23620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 23790fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar // if type == FRAME_RENDERED 23890fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar struct { 23990fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar OMX_TICKS timestamp; 24090fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar OMX_S64 nanoTime; 24190fcf68fd29f3cb695bd53a830ad984cb7d430c0Lajos Molnar } render_data; 24220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } u; 24320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 24420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass IOMXObserver : public IInterface { 24620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 24720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber DECLARE_META_INTERFACE(OMXObserver); 24820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24926a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar // Handle (list of) messages. 25026a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar virtual void onMessages(const std::list<omx_message> &messages) = 0; 25120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 25220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber//////////////////////////////////////////////////////////////////////////////// 25420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass BnOMX : public BnInterface<IOMX> { 25620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 25720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t onTransact( 25820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 25920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t flags = 0); 2608dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia 2618dde7269a5356503d2b283234b6cb46d0c3f214eWei Jiaprotected: 2628dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia // check if the codec is secure. 2638dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia virtual bool isSecure(IOMX::node_id node) { 2648dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia return false; 2658dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia } 26620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 26720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 26820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass BnOMXObserver : public BnInterface<IOMXObserver> { 26920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 27020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual status_t onTransact( 27120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t code, const Parcel &data, Parcel *reply, 27220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t flags = 0); 27320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 27420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 275457116d3a01618acf9a875020ca5860551ba03a6James Dongstruct CodecProfileLevel { 276457116d3a01618acf9a875020ca5860551ba03a6James Dong OMX_U32 mProfile; 277457116d3a01618acf9a875020ca5860551ba03a6James Dong OMX_U32 mLevel; 278457116d3a01618acf9a875020ca5860551ba03a6James Dong}; 279457116d3a01618acf9a875020ca5860551ba03a6James Dong 2803e328782f1e1061d08ea0c45b855cc418a2d9ea6Lajos Molnarinline static const char *asString(MetadataBufferType i, const char *def = "??") { 281054219874873b41f1c815552987c10465c34ba2bLajos Molnar using namespace android; 282054219874873b41f1c815552987c10465c34ba2bLajos Molnar switch (i) { 283054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeCameraSource: return "CameraSource"; 284054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeGrallocSource: return "GrallocSource"; 285054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeANWBuffer: return "ANWBuffer"; 2863e328782f1e1061d08ea0c45b855cc418a2d9ea6Lajos Molnar case kMetadataBufferTypeNativeHandleSource: return "NativeHandleSource"; 287054219874873b41f1c815552987c10465c34ba2bLajos Molnar case kMetadataBufferTypeInvalid: return "Invalid"; 288054219874873b41f1c815552987c10465c34ba2bLajos Molnar default: return def; 289054219874873b41f1c815552987c10465c34ba2bLajos Molnar } 290054219874873b41f1c815552987c10465c34ba2bLajos Molnar} 291054219874873b41f1c815552987c10465c34ba2bLajos Molnar 2923e328782f1e1061d08ea0c45b855cc418a2d9ea6Lajos Molnar} // namespace android 2933e328782f1e1061d08ea0c45b855cc418a2d9ea6Lajos Molnar 29420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif // ANDROID_IOMX_H_ 295