diff options
4 files changed, 21 insertions, 30 deletions
diff --git a/camera/photography/ICameraDeviceUser.cpp b/camera/photography/ICameraDeviceUser.cpp index 0515bd7..325f94d 100644 --- a/camera/photography/ICameraDeviceUser.cpp +++ b/camera/photography/ICameraDeviceUser.cpp @@ -151,21 +151,22 @@ public: } - virtual status_t getCameraInfo(int cameraId, camera_metadata** info) + virtual status_t getCameraInfo(CameraMetadata* info) { Parcel data, reply; data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor()); - data.writeInt32(cameraId); remote()->transact(GET_CAMERA_INFO, data, &reply); - reply.readExceptionCode(); status_t result = reply.readInt32(); + CameraMetadata out; if (reply.readInt32() != 0) { - CameraMetadata::readFromParcel(reply, /*out*/info); - } else if (info) { - *info = NULL; + out.readFromParcel(&reply); + } + + if (info != NULL) { + info->swap(out); } return result; @@ -273,6 +274,7 @@ status_t BnCameraDeviceUser::onTransact( reply->writeNoException(); reply->writeInt32(ret); + // out-variables are after exception and return value reply->writeInt32(1); // to mark presence of metadata object request.writeToParcel(const_cast<Parcel*>(reply)); @@ -281,19 +283,16 @@ status_t BnCameraDeviceUser::onTransact( case GET_CAMERA_INFO: { CHECK_INTERFACE(ICameraDeviceUser, data, reply); - int cameraId = data.readInt32(); - - camera_metadata_t* info = NULL; + CameraMetadata info; status_t ret; - ret = getCameraInfo(cameraId, &info); - - reply->writeInt32(1); // to mark presence of metadata object - CameraMetadata::writeToParcel(*reply, info); + ret = getCameraInfo(&info); reply->writeNoException(); reply->writeInt32(ret); - free_camera_metadata(info); + // out-variables are after exception and return value + reply->writeInt32(1); // to mark presence of metadata object + info.writeToParcel(reply); return NO_ERROR; } break; diff --git a/include/camera/photography/ICameraDeviceUser.h b/include/camera/photography/ICameraDeviceUser.h index 1b8d666..3ea49f4 100644 --- a/include/camera/photography/ICameraDeviceUser.h +++ b/include/camera/photography/ICameraDeviceUser.h @@ -58,9 +58,8 @@ public: /*out*/ CameraMetadata* request) = 0; // Get static camera metadata - virtual status_t getCameraInfo(int cameraId, - /*out*/ - camera_metadata** info) = 0; + virtual status_t getCameraInfo(/*out*/ + CameraMetadata* info) = 0; }; diff --git a/services/camera/libcameraservice/photography/CameraDeviceClient.cpp b/services/camera/libcameraservice/photography/CameraDeviceClient.cpp index bd6b60a..a6a2dc1 100644 --- a/services/camera/libcameraservice/photography/CameraDeviceClient.cpp +++ b/services/camera/libcameraservice/photography/CameraDeviceClient.cpp @@ -391,28 +391,23 @@ status_t CameraDeviceClient::createDefaultRequest(int templateId, return res; } -status_t CameraDeviceClient::getCameraInfo(int cameraId, - /*out*/ - camera_metadata** info) +status_t CameraDeviceClient::getCameraInfo(/*out*/CameraMetadata* info) { ATRACE_CALL(); ALOGV("%s", __FUNCTION__); status_t res = OK; - // TODO: remove cameraId. this should be device-specific info, not static. - if (cameraId != mCameraId) { - return INVALID_OPERATION; - } - if ( (res = checkPid(__FUNCTION__) ) != OK) return res; Mutex::Autolock icl(mBinderSerializationLock); if (!mDevice.get()) return DEAD_OBJECT; - CameraMetadata deviceInfo = mDevice->info(); - *info = deviceInfo.release(); + if (info != NULL) { + *info = mDevice->info(); // static camera metadata + // TODO: merge with device-specific camera metadata + } return res; } diff --git a/services/camera/libcameraservice/photography/CameraDeviceClient.h b/services/camera/libcameraservice/photography/CameraDeviceClient.h index 806aa15..c6c241a 100644 --- a/services/camera/libcameraservice/photography/CameraDeviceClient.h +++ b/services/camera/libcameraservice/photography/CameraDeviceClient.h @@ -85,9 +85,7 @@ public: // Get the static metadata for the camera // -- Caller owns the newly allocated metadata - virtual status_t getCameraInfo(int cameraId, - /*out*/ - camera_metadata** info); + virtual status_t getCameraInfo(/*out*/CameraMetadata* info); /** * Interface used by CameraService |