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 269c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa#include <binder/MemoryDealer.h> 2713a926879249276771b0097538459c7550e2f5ceSteven Moreland#include <android/hidl/allocator/1.0/IAllocator.h> 289c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa#include <android/hidl/memory/1.0/IMemory.h> 29134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#include <OMX_Component.h> 30134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 31134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Hubernamespace android { 32134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 33134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huberclass MemoryDealer; 34134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 35d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhangstruct Harness : public RefBase { 369c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa typedef hidl::memory::V1_0::IMemory TMemory; 379c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa typedef hardware::hidl_memory hidl_memory; 38134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber enum BufferFlags { 39134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber kBufferBusy = 1 40134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber }; 41134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber struct Buffer { 42134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber IOMX::buffer_id mID; 43134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber sp<IMemory> mMemory; 449c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa hidl_memory mHidlMemory; 45134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber uint32_t mFlags; 46134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber }; 47134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 48134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Harness(); 49134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 50134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t initCheck() const; 51134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 52d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang status_t dequeueMessageForNode(omx_message *msg, int64_t timeoutUs = -1); 53134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 54134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t dequeueMessageForNodeIgnoringBuffers( 55134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *inputBuffers, 56134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *outputBuffers, 57134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber omx_message *msg, int64_t timeoutUs = -1); 58134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 59134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t getPortDefinition( 60d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang OMX_U32 portIndex, OMX_PARAM_PORTDEFINITIONTYPE *def); 61134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 62134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t allocatePortBuffers( 63d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang OMX_U32 portIndex, Vector<Buffer> *buffers); 64134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 65d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang status_t setRole(const char *role); 66134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 67134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t testStateTransitions( 68134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const char *componentName, const char *componentRole); 69134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 70134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t testSeek( 71134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const char *componentName, const char *componentRole); 72134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 73134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t test( 74134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const char *componentName, const char *componentRole); 75134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 76134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t testAll(); 77134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 78134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huberprotected: 79134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber virtual ~Harness(); 80134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 81134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huberprivate: 820d3a5edf232916e81adbc46fc0f4a1753166b066Pawin Vongmasa typedef hidl::allocator::V1_0::IAllocator IAllocator; 839c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa 84134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber friend struct NodeReaper; 85d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang struct CodecObserver; 86134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 87134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Mutex mLock; 88134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 89134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t mInitCheck; 90134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber sp<IOMX> mOMX; 91d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang sp<IOMXNode> mOMXNode; 92134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber List<omx_message> mMessageQueue; 93134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Condition mMessageAddedCondition; 94d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang int32_t mLastMsgGeneration; 95d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang int32_t mCurGeneration; 969c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa bool mUseTreble; 979c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa sp<MemoryDealer> mDealer; 989c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa sp<IAllocator> mAllocator; 99134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 100134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber status_t initOMX(); 101134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 102134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber bool handleBufferMessage( 103134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber const omx_message &msg, 104134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *inputBuffers, 105134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Vector<Buffer> *outputBuffers); 106134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 107d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang void handleMessages(int32_t gen, const std::list<omx_message> &messages); 108d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang 109134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Harness(const Harness &); 110134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber Harness &operator=(const Harness &); 111134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber}; 112134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 113134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber} // namespace android 114134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber 115134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber#endif // OMX_HARNESS_H_ 116