summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camera/photography/ICameraDeviceUser.cpp27
-rw-r--r--include/camera/photography/ICameraDeviceUser.h5
-rw-r--r--services/camera/libcameraservice/photography/CameraDeviceClient.cpp15
-rw-r--r--services/camera/libcameraservice/photography/CameraDeviceClient.h4
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