summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-07-02 15:15:44 -0700
committerAndreas Huber <andih@google.com>2010-07-02 15:16:13 -0700
commit058319eb73aa1d5c3b3b4b79316198e7a49484f1 (patch)
treef8bbf233ed74478f9da62ee7a3d7eb5e186b60ee
parent5460d126f024a8d6597ce4eb127b51c101724960 (diff)
downloadframeworks_base-058319eb73aa1d5c3b3b4b79316198e7a49484f1.zip
frameworks_base-058319eb73aa1d5c3b3b4b79316198e7a49484f1.tar.gz
frameworks_base-058319eb73aa1d5c3b3b4b79316198e7a49484f1.tar.bz2
An AHandler can now find its associated ALooper.
Change-Id: Ic7087b8dcbc0d9abda272df0cb01b04b006f82ad
-rw-r--r--include/media/stagefright/foundation/AHandler.h2
-rw-r--r--include/media/stagefright/foundation/ALooperRoster.h2
-rw-r--r--media/libstagefright/foundation/AHandler.cpp33
-rw-r--r--media/libstagefright/foundation/ALooperRoster.cpp12
-rw-r--r--media/libstagefright/foundation/Android.mk1
5 files changed, 50 insertions, 0 deletions
diff --git a/include/media/stagefright/foundation/AHandler.h b/include/media/stagefright/foundation/AHandler.h
index 9fccead..b008b54 100644
--- a/include/media/stagefright/foundation/AHandler.h
+++ b/include/media/stagefright/foundation/AHandler.h
@@ -34,6 +34,8 @@ struct AHandler : public RefBase {
return mID;
}
+ sp<ALooper> looper();
+
protected:
virtual void onMessageReceived(const sp<AMessage> &msg) = 0;
diff --git a/include/media/stagefright/foundation/ALooperRoster.h b/include/media/stagefright/foundation/ALooperRoster.h
index 1c6869c..8f6316e 100644
--- a/include/media/stagefright/foundation/ALooperRoster.h
+++ b/include/media/stagefright/foundation/ALooperRoster.h
@@ -34,6 +34,8 @@ struct ALooperRoster {
void postMessage(const sp<AMessage> &msg, int64_t delayUs = 0);
void deliverMessage(const sp<AMessage> &msg);
+ sp<ALooper> findLooper(ALooper::handler_id handlerID);
+
private:
struct HandlerInfo {
sp<ALooper> mLooper;
diff --git a/media/libstagefright/foundation/AHandler.cpp b/media/libstagefright/foundation/AHandler.cpp
new file mode 100644
index 0000000..bd5f7e94
--- /dev/null
+++ b/media/libstagefright/foundation/AHandler.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//#define LOG_NDEBUG 0
+#define LOG_TAG "AHandler"
+#include <utils/Log.h>
+
+#include <media/stagefright/foundation/AHandler.h>
+
+#include <media/stagefright/foundation/ALooperRoster.h>
+
+namespace android {
+
+sp<ALooper> AHandler::looper() {
+ extern ALooperRoster gLooperRoster;
+
+ return gLooperRoster.findLooper(id());
+}
+
+} // namespace android
diff --git a/media/libstagefright/foundation/ALooperRoster.cpp b/media/libstagefright/foundation/ALooperRoster.cpp
index 5bb1cf9..bb9bc14 100644
--- a/media/libstagefright/foundation/ALooperRoster.cpp
+++ b/media/libstagefright/foundation/ALooperRoster.cpp
@@ -97,4 +97,16 @@ void ALooperRoster::deliverMessage(const sp<AMessage> &msg) {
handler->onMessageReceived(msg);
}
+sp<ALooper> ALooperRoster::findLooper(ALooper::handler_id handlerID) {
+ Mutex::Autolock autoLock(mLock);
+
+ ssize_t index = mHandlers.indexOfKey(handlerID);
+
+ if (index < 0) {
+ return NULL;
+ }
+
+ return mHandlers.valueAt(index).mLooper;
+}
+
} // namespace android
diff --git a/media/libstagefright/foundation/Android.mk b/media/libstagefright/foundation/Android.mk
index 73047e7..35eea7e 100644
--- a/media/libstagefright/foundation/Android.mk
+++ b/media/libstagefright/foundation/Android.mk
@@ -5,6 +5,7 @@ LOCAL_SRC_FILES:= \
AAtomizer.cpp \
ABuffer.cpp \
ADebug.cpp \
+ AHandler.cpp \
ALooper.cpp \
ALooperRoster.cpp \
AMessage.cpp \