From 2a04aefdf03abbdabb035f89c8a1df636c168de0 Mon Sep 17 00:00:00 2001 From: Dave Sparks Date: Thu, 7 May 2009 12:25:25 -0700 Subject: Add new binder methods to camera client to support generic callbacks This is the first step in a multi-step change to move from the old specific callbacks to a generic callback. This will allow future flexibility in the interface without requiring binder rewrites. Bug 1837832 --- libs/ui/ICameraClient.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'libs/ui/ICameraClient.cpp') diff --git a/libs/ui/ICameraClient.cpp b/libs/ui/ICameraClient.cpp index 4bec9d2ae6c3..ae07b67a8ead 100644 --- a/libs/ui/ICameraClient.cpp +++ b/libs/ui/ICameraClient.cpp @@ -32,6 +32,8 @@ enum { ERROR_CALLBACK, AUTOFOCUS_CALLBACK, RECORDING_CALLBACK, + NOTIFY_CALLBACK, + DATA_CALLBACK, }; class BpCameraClient: public BpInterface @@ -110,6 +112,30 @@ public: data.writeInt32(focused); remote()->transact(AUTOFOCUS_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); } + + // generic callback from camera service to app + void notifyCallback(int32_t msgType, int32_t ext1, int32_t ext2) + { + LOGV("notifyCallback"); + Parcel data, reply; + data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); + data.writeInt32(msgType); + data.writeInt32(ext1); + data.writeInt32(ext2); + remote()->transact(NOTIFY_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); + } + + // generic data callback from camera service to app with image data + void dataCallback(int32_t msgType, const sp& imageData) + { + LOGV("dataCallback"); + Parcel data, reply; + data.writeInterfaceToken(ICameraClient::getInterfaceDescriptor()); + data.writeInt32(msgType); + data.writeStrongBinder(imageData->asBinder()); + remote()->transact(DATA_CALLBACK, data, &reply, IBinder::FLAG_ONEWAY); + } + }; IMPLEMENT_META_INTERFACE(CameraClient, "android.hardware.ICameraClient"); @@ -174,6 +200,23 @@ status_t BnCameraClient::onTransact( autoFocusCallback(focused); return NO_ERROR; } break; + case NOTIFY_CALLBACK: { + LOGV("NOTIFY_CALLBACK"); + CHECK_INTERFACE(ICameraClient, data, reply); + int32_t msgType = data.readInt32(); + int32_t ext1 = data.readInt32(); + int32_t ext2 = data.readInt32(); + notifyCallback(msgType, ext1, ext2); + return NO_ERROR; + } break; + case DATA_CALLBACK: { + LOGV("RAW_CALLBACK"); + CHECK_INTERFACE(ICameraClient, data, reply); + int32_t msgType = data.readInt32(); + sp imageData = interface_cast(data.readStrongBinder()); + dataCallback(msgType, imageData); + return NO_ERROR; + } break; default: return BBinder::onTransact(code, data, reply, flags); } -- cgit v1.2.3-59-g8ed1b