From 14acc736e336cbd6026df781d4f411e908831815 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Mon, 6 Dec 2010 10:36:06 -0800 Subject: API Support for both synchronous and queued commands, optionally associated metadata. Change-Id: Idb90d64cb638942210c5822b3cba2f05b087d601 --- media/libmedia/IStreamSource.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) (limited to 'media/libmedia/IStreamSource.cpp') diff --git a/media/libmedia/IStreamSource.cpp b/media/libmedia/IStreamSource.cpp index 89f2b44..5069002 100644 --- a/media/libmedia/IStreamSource.cpp +++ b/media/libmedia/IStreamSource.cpp @@ -19,6 +19,7 @@ #include #include +#include #include #include @@ -33,7 +34,7 @@ enum { // IStreamListener QUEUE_BUFFER, - QUEUE_COMMAND, + ISSUE_COMMAND, }; struct BpStreamSource : public BpInterface { @@ -125,12 +126,21 @@ struct BpStreamListener : public BpInterface { remote()->transact(QUEUE_BUFFER, data, &reply, IBinder::FLAG_ONEWAY); } - virtual void queueCommand(Command cmd) { + virtual void issueCommand( + Command cmd, bool synchronous, const sp &msg) { Parcel data, reply; data.writeInterfaceToken(IStreamListener::getInterfaceDescriptor()); data.writeInt32(static_cast(cmd)); + data.writeInt32(static_cast(synchronous)); - remote()->transact(QUEUE_COMMAND, data, &reply, IBinder::FLAG_ONEWAY); + if (msg != NULL) { + data.writeInt32(1); + msg->writeToParcel(&data); + } else { + data.writeInt32(0); + } + + remote()->transact(ISSUE_COMMAND, data, &reply, IBinder::FLAG_ONEWAY); } }; @@ -149,12 +159,20 @@ status_t BnStreamListener::onTransact( break; } - case QUEUE_COMMAND: + case ISSUE_COMMAND: { CHECK_INTERFACE(IStreamListener, data, reply); Command cmd = static_cast(data.readInt32()); - queueCommand(cmd); + bool synchronous = static_cast(data.readInt32()); + + sp msg; + + if (data.readInt32()) { + msg = AMessage::FromParcel(data); + } + + issueCommand(cmd, synchronous, msg); break; } -- cgit v1.1