1134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber/* 2134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * Copyright (C) 2009 The Android Open Source Project 3134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * 4134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * you may not use this file except in compliance with the License. 6134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * You may obtain a copy of the License at 7134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * 8134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * 10134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * Unless required by applicable law or agreed to in writing, software 11134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * See the License for the specific language governing permissions and 14134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber * limitations under the License. 15134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber */ 16134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 17134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#ifndef OMX_HARNESS_H_ 18134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 19134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#define OMX_HARNESS_H_ 20134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 21134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#include <media/IOMX.h> 22134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#include <utils/List.h> 23134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#include <utils/Vector.h> 24134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#include <utils/threads.h> 25134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 26134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#include <OMX_Component.h> 27134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 28134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Hubernamespace android { 29134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 30134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huberclass MemoryDealer; 31134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 32134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huberstruct Harness : public BnOMXObserver { 33134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber enum BufferFlags { 34134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber kBufferBusy = 1 35134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber }; 36134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber struct Buffer { 37134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber IOMX::buffer_id mID; 38134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber sp<IMemory> mMemory; 39134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber uint32_t mFlags; 40134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber }; 41134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 42134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Harness(); 43134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 44134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t initCheck() const; 45134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 46134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t dequeueMessageForNode( 47134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber IOMX::node_id node, omx_message *msg, int64_t timeoutUs = -1); 48134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 49134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t dequeueMessageForNodeIgnoringBuffers( 50134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber IOMX::node_id node, 51134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *inputBuffers, 52134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *outputBuffers, 53134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber omx_message *msg, int64_t timeoutUs = -1); 54134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 55134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t getPortDefinition( 56134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber IOMX::node_id node, OMX_U32 portIndex, 57134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber OMX_PARAM_PORTDEFINITIONTYPE *def); 58134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 59134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t allocatePortBuffers( 60134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const sp<MemoryDealer> &dealer, 61134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber IOMX::node_id node, OMX_U32 portIndex, 62134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *buffers); 63134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 64134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t setRole(IOMX::node_id node, const char *role); 65134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 66134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t testStateTransitions( 67134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const char *componentName, const char *componentRole); 68134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 69134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t testSeek( 70134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const char *componentName, const char *componentRole); 71134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 72134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t test( 73134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const char *componentName, const char *componentRole); 74134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 75134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t testAll(); 76134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 77134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber virtual void onMessage(const omx_message &msg); 78134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 79134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huberprotected: 80134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber virtual ~Harness(); 81134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 82134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huberprivate: 83134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber friend struct NodeReaper; 84134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 85134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Mutex mLock; 86134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 87134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t mInitCheck; 88134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber sp<IOMX> mOMX; 89134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber List<omx_message> mMessageQueue; 90134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Condition mMessageAddedCondition; 91134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 92134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t initOMX(); 93134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 94134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber bool handleBufferMessage( 95134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const omx_message &msg, 96134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *inputBuffers, 97134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *outputBuffers); 98134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 99134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Harness(const Harness &); 100134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Harness &operator=(const Harness &); 101134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber}; 102134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 103134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber} // namespace android 104134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 105134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#endif // OMX_HARNESS_H_ 106