172961230a5890071bcca436eb5630172ce84ec41Andreas Huber/* 272961230a5890071bcca436eb5630172ce84ec41Andreas Huber * Copyright (C) 2010 The Android Open Source Project 372961230a5890071bcca436eb5630172ce84ec41Andreas Huber * 472961230a5890071bcca436eb5630172ce84ec41Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 572961230a5890071bcca436eb5630172ce84ec41Andreas Huber * you may not use this file except in compliance with the License. 672961230a5890071bcca436eb5630172ce84ec41Andreas Huber * You may obtain a copy of the License at 772961230a5890071bcca436eb5630172ce84ec41Andreas Huber * 872961230a5890071bcca436eb5630172ce84ec41Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 972961230a5890071bcca436eb5630172ce84ec41Andreas Huber * 1072961230a5890071bcca436eb5630172ce84ec41Andreas Huber * Unless required by applicable law or agreed to in writing, software 1172961230a5890071bcca436eb5630172ce84ec41Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1272961230a5890071bcca436eb5630172ce84ec41Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372961230a5890071bcca436eb5630172ce84ec41Andreas Huber * See the License for the specific language governing permissions and 1472961230a5890071bcca436eb5630172ce84ec41Andreas Huber * limitations under the License. 1572961230a5890071bcca436eb5630172ce84ec41Andreas Huber */ 1672961230a5890071bcca436eb5630172ce84ec41Andreas Huber 1772961230a5890071bcca436eb5630172ce84ec41Andreas Huber#ifndef A_LOOPER_H_ 1872961230a5890071bcca436eb5630172ce84ec41Andreas Huber 1972961230a5890071bcca436eb5630172ce84ec41Andreas Huber#define A_LOOPER_H_ 2072961230a5890071bcca436eb5630172ce84ec41Andreas Huber 2172961230a5890071bcca436eb5630172ce84ec41Andreas Huber#include <media/stagefright/foundation/ABase.h> 22a814c1fdc2acf0ed2ee3b175110f6039be7c4873Andreas Huber#include <media/stagefright/foundation/AString.h> 2372961230a5890071bcca436eb5630172ce84ec41Andreas Huber#include <utils/Errors.h> 2472961230a5890071bcca436eb5630172ce84ec41Andreas Huber#include <utils/KeyedVector.h> 2572961230a5890071bcca436eb5630172ce84ec41Andreas Huber#include <utils/List.h> 2672961230a5890071bcca436eb5630172ce84ec41Andreas Huber#include <utils/RefBase.h> 2772961230a5890071bcca436eb5630172ce84ec41Andreas Huber#include <utils/threads.h> 2872961230a5890071bcca436eb5630172ce84ec41Andreas Huber 2972961230a5890071bcca436eb5630172ce84ec41Andreas Hubernamespace android { 3072961230a5890071bcca436eb5630172ce84ec41Andreas Huber 3172961230a5890071bcca436eb5630172ce84ec41Andreas Huberstruct AHandler; 3272961230a5890071bcca436eb5630172ce84ec41Andreas Huberstruct AMessage; 3372961230a5890071bcca436eb5630172ce84ec41Andreas Huber 3472961230a5890071bcca436eb5630172ce84ec41Andreas Huberstruct ALooper : public RefBase { 3572961230a5890071bcca436eb5630172ce84ec41Andreas Huber typedef int32_t event_id; 3672961230a5890071bcca436eb5630172ce84ec41Andreas Huber typedef int32_t handler_id; 3772961230a5890071bcca436eb5630172ce84ec41Andreas Huber 3872961230a5890071bcca436eb5630172ce84ec41Andreas Huber ALooper(); 3972961230a5890071bcca436eb5630172ce84ec41Andreas Huber 40a814c1fdc2acf0ed2ee3b175110f6039be7c4873Andreas Huber // Takes effect in a subsequent call to start(). 41a814c1fdc2acf0ed2ee3b175110f6039be7c4873Andreas Huber void setName(const char *name); 42a814c1fdc2acf0ed2ee3b175110f6039be7c4873Andreas Huber 4372961230a5890071bcca436eb5630172ce84ec41Andreas Huber handler_id registerHandler(const sp<AHandler> &handler); 4472961230a5890071bcca436eb5630172ce84ec41Andreas Huber void unregisterHandler(handler_id handlerID); 4572961230a5890071bcca436eb5630172ce84ec41Andreas Huber 4642d7f83904b8a91ce33e87a44de109572679ac1fAndreas Huber status_t start( 4742d7f83904b8a91ce33e87a44de109572679ac1fAndreas Huber bool runOnCallingThread = false, 48348a8eab84f4bba76c04ca83b2f5418467aa1a48Andreas Huber bool canCallJava = false, 49348a8eab84f4bba76c04ca83b2f5418467aa1a48Andreas Huber int32_t priority = PRIORITY_DEFAULT 50348a8eab84f4bba76c04ca83b2f5418467aa1a48Andreas Huber ); 5142d7f83904b8a91ce33e87a44de109572679ac1fAndreas Huber 5272961230a5890071bcca436eb5630172ce84ec41Andreas Huber status_t stop(); 5372961230a5890071bcca436eb5630172ce84ec41Andreas Huber 5472961230a5890071bcca436eb5630172ce84ec41Andreas Huber static int64_t GetNowUs(); 5572961230a5890071bcca436eb5630172ce84ec41Andreas Huber 5672961230a5890071bcca436eb5630172ce84ec41Andreas Huberprotected: 5772961230a5890071bcca436eb5630172ce84ec41Andreas Huber virtual ~ALooper(); 5872961230a5890071bcca436eb5630172ce84ec41Andreas Huber 5972961230a5890071bcca436eb5630172ce84ec41Andreas Huberprivate: 6072961230a5890071bcca436eb5630172ce84ec41Andreas Huber friend struct ALooperRoster; 6172961230a5890071bcca436eb5630172ce84ec41Andreas Huber 6272961230a5890071bcca436eb5630172ce84ec41Andreas Huber struct Event { 6372961230a5890071bcca436eb5630172ce84ec41Andreas Huber int64_t mWhenUs; 6472961230a5890071bcca436eb5630172ce84ec41Andreas Huber sp<AMessage> mMessage; 6572961230a5890071bcca436eb5630172ce84ec41Andreas Huber }; 6672961230a5890071bcca436eb5630172ce84ec41Andreas Huber 6772961230a5890071bcca436eb5630172ce84ec41Andreas Huber Mutex mLock; 6872961230a5890071bcca436eb5630172ce84ec41Andreas Huber Condition mQueueChangedCondition; 6972961230a5890071bcca436eb5630172ce84ec41Andreas Huber 70a814c1fdc2acf0ed2ee3b175110f6039be7c4873Andreas Huber AString mName; 71a814c1fdc2acf0ed2ee3b175110f6039be7c4873Andreas Huber 7272961230a5890071bcca436eb5630172ce84ec41Andreas Huber List<Event> mEventQueue; 7372961230a5890071bcca436eb5630172ce84ec41Andreas Huber 7472961230a5890071bcca436eb5630172ce84ec41Andreas Huber struct LooperThread; 7572961230a5890071bcca436eb5630172ce84ec41Andreas Huber sp<LooperThread> mThread; 7672961230a5890071bcca436eb5630172ce84ec41Andreas Huber bool mRunningLocally; 7772961230a5890071bcca436eb5630172ce84ec41Andreas Huber 7872961230a5890071bcca436eb5630172ce84ec41Andreas Huber void post(const sp<AMessage> &msg, int64_t delayUs); 7972961230a5890071bcca436eb5630172ce84ec41Andreas Huber bool loop(); 8072961230a5890071bcca436eb5630172ce84ec41Andreas Huber 8172961230a5890071bcca436eb5630172ce84ec41Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(ALooper); 8272961230a5890071bcca436eb5630172ce84ec41Andreas Huber}; 8372961230a5890071bcca436eb5630172ce84ec41Andreas Huber 8472961230a5890071bcca436eb5630172ce84ec41Andreas Huber} // namespace android 8572961230a5890071bcca436eb5630172ce84ec41Andreas Huber 8672961230a5890071bcca436eb5630172ce84ec41Andreas Huber#endif // A_LOOPER_H_ 87