summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2011-08-26 13:47:26 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-08-26 13:47:26 -0700
commitd2824a9a392e02a09929a34f0a3dad41ac1faacf (patch)
treeded4154b1d5b77344a9be3ed6b31433f12d71b06 /include
parent0b293e76c8fe4e973ccd8a872bc5320ba28d49cc (diff)
parent5df775d2f509c76e76a46615fca83dba95299f6e (diff)
downloadframeworks_av-d2824a9a392e02a09929a34f0a3dad41ac1faacf.zip
frameworks_av-d2824a9a392e02a09929a34f0a3dad41ac1faacf.tar.gz
frameworks_av-d2824a9a392e02a09929a34f0a3dad41ac1faacf.tar.bz2
Merge "Support for posting messages and synchronously waiting for a response."
Diffstat (limited to 'include')
-rw-r--r--include/media/stagefright/foundation/ALooperRoster.h13
-rw-r--r--include/media/stagefright/foundation/AMessage.h11
2 files changed, 23 insertions, 1 deletions
diff --git a/include/media/stagefright/foundation/ALooperRoster.h b/include/media/stagefright/foundation/ALooperRoster.h
index c1bd4ed..2e5fd73 100644
--- a/include/media/stagefright/foundation/ALooperRoster.h
+++ b/include/media/stagefright/foundation/ALooperRoster.h
@@ -31,9 +31,14 @@ struct ALooperRoster {
void unregisterHandler(ALooper::handler_id handlerID);
- void postMessage(const sp<AMessage> &msg, int64_t delayUs = 0);
+ status_t postMessage(const sp<AMessage> &msg, int64_t delayUs = 0);
void deliverMessage(const sp<AMessage> &msg);
+ status_t postAndAwaitResponse(
+ const sp<AMessage> &msg, sp<AMessage> *response);
+
+ void postReply(uint32_t replyID, const sp<AMessage> &reply);
+
sp<ALooper> findLooper(ALooper::handler_id handlerID);
private:
@@ -45,6 +50,12 @@ private:
Mutex mLock;
KeyedVector<ALooper::handler_id, HandlerInfo> mHandlers;
ALooper::handler_id mNextHandlerID;
+ uint32_t mNextReplyID;
+ Condition mRepliesCondition;
+
+ KeyedVector<uint32_t, sp<AMessage> > mReplies;
+
+ status_t postMessage_l(const sp<AMessage> &msg, int64_t delayUs);
DISALLOW_EVIL_CONSTRUCTORS(ALooperRoster);
};
diff --git a/include/media/stagefright/foundation/AMessage.h b/include/media/stagefright/foundation/AMessage.h
index 72dc730..7ec54aa 100644
--- a/include/media/stagefright/foundation/AMessage.h
+++ b/include/media/stagefright/foundation/AMessage.h
@@ -72,6 +72,17 @@ struct AMessage : public RefBase {
void post(int64_t delayUs = 0);
+ // Posts the message to its target and waits for a response (or error)
+ // before returning.
+ status_t postAndAwaitResponse(sp<AMessage> *response);
+
+ // If this returns true, the sender of this message is synchronously
+ // awaiting a response, the "replyID" can be used to send the response
+ // via "postReply" below.
+ bool senderAwaitsResponse(uint32_t *replyID) const;
+
+ void postReply(uint32_t replyID);
+
// Performs a deep-copy of "this", contained messages are in turn "dup'ed".
// Warning: RefBase items, i.e. "objects" are _not_ copied but only have
// their refcount incremented.