IOMX.h revision d459b485c61bd3e7fd81c5cd3af8ada27fc3e8d3
1db0e15ae3e2b5e180541eec35e2bce54359ca7d8Zhongxing Xu/* 261f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * Copyright (C) 2009 The Android Open Source Project 361f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * 461f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * Licensed under the Apache License, Version 2.0 (the "License"); 561f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * you may not use this file except in compliance with the License. 661f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * You may obtain a copy of the License at 761f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * 861f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * http://www.apache.org/licenses/LICENSE-2.0 961f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * 1061f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * Unless required by applicable law or agreed to in writing, software 114adc81e540b874bafa15715fd2c5cb662463debdTed Kremenek * distributed under the License is distributed on an "AS IS" BASIS, 1261f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * See the License for the specific language governing permissions and 1461f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek * limitations under the License. 155a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis */ 165a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 1761f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek#ifndef ANDROID_IOMX_H_ 18d2f642b56e87493edfc3b0dab359b5e32d5f8a5eTed Kremenek 199b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#define ANDROID_IOMX_H_ 201b431023814196f87515a540ebcb9e9f1a9176a1Ted Kremenek 211b431023814196f87515a540ebcb9e9f1a9176a1Ted Kremenek#include <binder/IInterface.h> 221b431023814196f87515a540ebcb9e9f1a9176a1Ted Kremenek#include <ui/GraphicBuffer.h> 23f377fc85488f4799ced714ac60e65a0e3f8f69cbTed Kremenek#include <utils/List.h> 24e207558e9dbed963eebf5cf31fdb02616f1545a3Ted Kremenek#include <utils/String8.h> 25e207558e9dbed963eebf5cf31fdb02616f1545a3Ted Kremenek 2661f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek#include <OMX_Core.h> 271eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#include <OMX_Video.h> 285a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 295a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis#include "jni.h" 305a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 315a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidisnamespace android { 325a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis 339ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenekclass IMemory; 345a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidisclass IOMXObserver; 3561f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenekclass IOMXRenderer; 3661f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenekclass Surface; 3761f3e058056ab519d249aa67e3d52b0ead57c63eTed Kremenek 385e2d2c2ee3cf410643e0f9a5701708e51409d973Benjamin Kramerclass IOMX : public IInterface { 395e2d2c2ee3cf410643e0f9a5701708e51409d973Benjamin Kramerpublic: 4050a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek DECLARE_META_INTERFACE(OMX); 418966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek 42d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis typedef void *buffer_id; 434adc81e540b874bafa15715fd2c5cb662463debdTed Kremenek typedef void *node_id; 44cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // Given a node_id and the calling process' pid, returns true iff 46cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek // the implementation of the OMX interface lives in the same 47cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek // process. 48cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek virtual bool livesLocally(node_id node, pid_t pid) = 0; 498966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek 501b431023814196f87515a540ebcb9e9f1a9176a1Ted Kremenek struct ComponentInfo { 518966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek String8 mName; 528966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek List<String8> mRoles; 539c378f705405d37f49795d5e915989de774fe11fTed Kremenek }; 549c378f705405d37f49795d5e915989de774fe11fTed Kremenek virtual status_t listNodes(List<ComponentInfo> *list) = 0; 559c378f705405d37f49795d5e915989de774fe11fTed Kremenek 561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual status_t allocateNode( 578966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek const char *name, const sp<IOMXObserver> &observer, 581b431023814196f87515a540ebcb9e9f1a9176a1Ted Kremenek node_id *node) = 0; 598966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek 601eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual status_t freeNode(node_id node) = 0; 61cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 628966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek virtual status_t sendCommand( 637a9bb52171f962d51ab13c1e012d2236feb9558dTed Kremenek node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) = 0; 64cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 65d49967f8764135ae65658e354b6d38e3637c9de3Ted Kremenek virtual status_t getParameter( 66cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek node_id node, OMX_INDEXTYPE index, 67212f6d3b5fb3fa55ba1e40671cfc336430abc8ddTom Care void *params, size_t size) = 0; 68640ccf071076e684713cc3c3276bb51982bff607Argyrios Kyrtzidis 691eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual status_t setParameter( 70cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek node_id node, OMX_INDEXTYPE index, 71cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek const void *params, size_t size) = 0; 72cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 73cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek virtual status_t getConfig( 74cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek node_id node, OMX_INDEXTYPE index, 75404fc3ad6bd844bf8ce70cbf9974ab297704a122Argyrios Kyrtzidis void *params, size_t size) = 0; 76cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 771a0c8b9183fde84982aea9190a55fde1541c432dTed Kremenek virtual status_t setConfig( 78072192bcbb05a0fee7ec3061750b27e8d2004952Ted Kremenek node_id node, OMX_INDEXTYPE index, 791eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const void *params, size_t size) = 0; 8050a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek 81fe9e543a2a363df7fcaa899367d3b2580b63b27cTed Kremenek virtual status_t getState( 82fe9e543a2a363df7fcaa899367d3b2580b63b27cTed Kremenek node_id node, OMX_STATETYPE* state) = 0; 83fe9e543a2a363df7fcaa899367d3b2580b63b27cTed Kremenek 84c5619d901a68dc27a9e310a6a831f03efebcd950Zhongxing Xu virtual status_t storeMetaDataInBuffers( 859c378f705405d37f49795d5e915989de774fe11fTed Kremenek node_id node, OMX_U32 port_index, OMX_BOOL enable) = 0; 86fe9e543a2a363df7fcaa899367d3b2580b63b27cTed Kremenek 871eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual status_t enableGraphicBuffers( 88686775deca8b8685eb90801495880e3abdd844c2Chris Lattner node_id node, OMX_U32 port_index, OMX_BOOL enable) = 0; 89212f6d3b5fb3fa55ba1e40671cfc336430abc8ddTom Care 901eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual status_t getGraphicBufferUsage( 91686775deca8b8685eb90801495880e3abdd844c2Chris Lattner node_id node, OMX_U32 port_index, OMX_U32* usage) = 0; 92212f6d3b5fb3fa55ba1e40671cfc336430abc8ddTom Care 93212f6d3b5fb3fa55ba1e40671cfc336430abc8ddTom Care virtual status_t useBuffer( 94212f6d3b5fb3fa55ba1e40671cfc336430abc8ddTom Care node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 95d49967f8764135ae65658e354b6d38e3637c9de3Ted Kremenek buffer_id *buffer) = 0; 9650a6d0ce344c02782e0207574005c3b2aaa5077cTed Kremenek 971eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual status_t useGraphicBuffer( 988966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek node_id node, OMX_U32 port_index, 99cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer) = 0; 100cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 101cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek // This API clearly only makes sense if the caller lives in the 1021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // same process as the callee, i.e. is the media_server, as the 103cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek // returned "buffer_data" pointer is just that, a pointer into local 1049c378f705405d37f49795d5e915989de774fe11fTed Kremenek // address space. 1051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump virtual status_t allocateBuffer( 106cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek node_id node, OMX_U32 port_index, size_t size, 107cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek buffer_id *buffer, void **buffer_data) = 0; 1088966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek 1098966bc1c8ce271c09936c0eaf6c841aef4a0af1bTed Kremenek virtual status_t allocateBufferWithBackup( 1109c378f705405d37f49795d5e915989de774fe11fTed Kremenek node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 1111eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump buffer_id *buffer) = 0; 112686775deca8b8685eb90801495880e3abdd844c2Chris Lattner 113d49967f8764135ae65658e354b6d38e3637c9de3Ted Kremenek virtual status_t freeBuffer( 114686775deca8b8685eb90801495880e3abdd844c2Chris Lattner node_id node, OMX_U32 port_index, buffer_id buffer) = 0; 115d49967f8764135ae65658e354b6d38e3637c9de3Ted Kremenek 116d49967f8764135ae65658e354b6d38e3637c9de3Ted Kremenek virtual status_t fillBuffer(node_id node, buffer_id buffer) = 0; 1171eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 118cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek virtual status_t emptyBuffer( 119072192bcbb05a0fee7ec3061750b27e8d2004952Ted Kremenek node_id node, 120cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek buffer_id buffer, 121072192bcbb05a0fee7ec3061750b27e8d2004952Ted Kremenek OMX_U32 range_offset, OMX_U32 range_length, 1221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump OMX_U32 flags, OMX_TICKS timestamp) = 0; 123cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 1249c378f705405d37f49795d5e915989de774fe11fTed Kremenek virtual status_t getExtensionIndex( 1259c378f705405d37f49795d5e915989de774fe11fTed Kremenek node_id node, 1261eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump const char *parameter_name, 127cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_INDEXTYPE *index) = 0; 128cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek}; 129fc8f0e14ad142ed811e90fbd9a30e419e301c717Chris Lattner 130cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenekstruct omx_message { 131cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek enum { 1321eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump EVENT, 133640ccf071076e684713cc3c3276bb51982bff607Argyrios Kyrtzidis EMPTY_BUFFER_DONE, 134640ccf071076e684713cc3c3276bb51982bff607Argyrios Kyrtzidis FILL_BUFFER_DONE, 135cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 136640ccf071076e684713cc3c3276bb51982bff607Argyrios Kyrtzidis } type; 137cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 1389c378f705405d37f49795d5e915989de774fe11fTed Kremenek IOMX::node_id node; 1399c378f705405d37f49795d5e915989de774fe11fTed Kremenek 1409c378f705405d37f49795d5e915989de774fe11fTed Kremenek union { 1411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // if type == EVENT 1429c378f705405d37f49795d5e915989de774fe11fTed Kremenek struct { 1439c378f705405d37f49795d5e915989de774fe11fTed Kremenek OMX_EVENTTYPE event; 1446837faa083bebad39aa342f84c2b450fb6410eafTed Kremenek OMX_U32 data1; 145cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_U32 data2; 146cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek } event_data; 147cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 148cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek // if type == EMPTY_BUFFER_DONE 1491eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump struct { 150cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek IOMX::buffer_id buffer; 151cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek } buffer_data; 152cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 1531eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump // if type == FILL_BUFFER_DONE 154cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek struct { 155cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek IOMX::buffer_id buffer; 156cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_U32 range_offset; 157cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_U32 range_length; 158cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_U32 flags; 159cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_TICKS timestamp; 160cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_PTR platform_private; 161cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_PTR data_ptr; 162cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek } extended_buffer_data; 163cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 164cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek } u; 165cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek}; 166cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 167cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenekclass IOMXObserver : public IInterface { 168cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenekpublic: 1699c378f705405d37f49795d5e915989de774fe11fTed Kremenek DECLARE_META_INTERFACE(OMXObserver); 1709c378f705405d37f49795d5e915989de774fe11fTed Kremenek 1719c378f705405d37f49795d5e915989de774fe11fTed Kremenek virtual void onMessage(const omx_message &msg) = 0; 172cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek}; 173cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 174cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek//////////////////////////////////////////////////////////////////////////////// 1751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1763aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenekclass BnOMX : public BnInterface<IOMX> { 1773aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenekpublic: 1783aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenek virtual status_t onTransact( 1793aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenek uint32_t code, const Parcel &data, Parcel *reply, 1809c378f705405d37f49795d5e915989de774fe11fTed Kremenek uint32_t flags = 0); 1819c378f705405d37f49795d5e915989de774fe11fTed Kremenek}; 1829c378f705405d37f49795d5e915989de774fe11fTed Kremenek 1833aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenekclass BnOMXObserver : public BnInterface<IOMXObserver> { 1843aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenekpublic: 1853aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenek virtual status_t onTransact( 1861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump uint32_t code, const Parcel &data, Parcel *reply, 187cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek uint32_t flags = 0); 188cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek}; 1891eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 1903aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenekstruct CodecProfileLevel { 1913aa1ab27c14d16c853ccb61f17a4a75d8e366806Ted Kremenek OMX_U32 mProfile; 192cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek OMX_U32 mLevel; 1931eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump}; 1941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump 195cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek} // namespace android 196cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek 197cf118d41f7930a18dce97416ef7834a62642f587Ted Kremenek#endif // ANDROID_IOMX_H_ 1981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump