Camera: Switch camera2 to auto-gen C++ binder interfaces
- Move camera service AIDL files to frameworks/av
- Build C++ interface stubs with AIDL tools
- Add necessary native-side parcelables and update existing ones
- Remove manually-written stubs, rearrange remaining manual stubs
- Adjust implementations to work with auto-generated stubs
- Adjust method signatures for auto-gen differences
- Add rich error messages using binder::Status
Bug: 25091611
Change-Id: I6f69f34b9d1a3f8d1fb7db87357363f8fa8483ff
diff --git a/camera/camera2/CaptureRequest.cpp b/camera/camera2/CaptureRequest.cpp
index 4217bc6..fb43708 100644
--- a/camera/camera2/CaptureRequest.cpp
+++ b/camera/camera2/CaptureRequest.cpp
@@ -25,8 +25,10 @@
#include <gui/Surface.h>
namespace android {
+namespace hardware {
+namespace camera2 {
-status_t CaptureRequest::readFromParcel(Parcel* parcel) {
+status_t CaptureRequest::readFromParcel(const Parcel* parcel) {
if (parcel == NULL) {
ALOGE("%s: Null parcel", __FUNCTION__);
return BAD_VALUE;
@@ -130,4 +132,6 @@
return OK;
}
-}; // namespace android
+} // namespace camera2
+} // namespace hardware
+} // namespace android
diff --git a/camera/camera2/ICameraDeviceCallbacks.cpp b/camera/camera2/ICameraDeviceCallbacks.cpp
deleted file mode 100644
index f599879..0000000
--- a/camera/camera2/ICameraDeviceCallbacks.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-//#define LOG_NDEBUG 0
-#define LOG_TAG "ICameraDeviceCallbacks"
-#include <utils/Log.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <binder/Parcel.h>
-#include <gui/IGraphicBufferProducer.h>
-#include <gui/Surface.h>
-#include <utils/Mutex.h>
-
-#include <camera/camera2/ICameraDeviceCallbacks.h>
-#include "camera/CameraMetadata.h"
-#include "camera/CaptureResult.h"
-
-namespace android {
-
-enum {
- CAMERA_ERROR = IBinder::FIRST_CALL_TRANSACTION,
- CAMERA_IDLE,
- CAPTURE_STARTED,
- RESULT_RECEIVED,
- PREPARED
-};
-
-class BpCameraDeviceCallbacks: public BpInterface<ICameraDeviceCallbacks>
-{
-public:
- BpCameraDeviceCallbacks(const sp<IBinder>& impl)
- : BpInterface<ICameraDeviceCallbacks>(impl)
- {
- }
-
- void onDeviceError(CameraErrorCode errorCode, const CaptureResultExtras& resultExtras)
- {
- ALOGV("onDeviceError");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
- data.writeInt32(static_cast<int32_t>(errorCode));
- data.writeInt32(1); // to mark presence of CaptureResultExtras object
- resultExtras.writeToParcel(&data);
- remote()->transact(CAMERA_ERROR, data, &reply, IBinder::FLAG_ONEWAY);
- data.writeNoException();
- }
-
- void onDeviceIdle()
- {
- ALOGV("onDeviceIdle");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
- remote()->transact(CAMERA_IDLE, data, &reply, IBinder::FLAG_ONEWAY);
- data.writeNoException();
- }
-
- void onCaptureStarted(const CaptureResultExtras& result, int64_t timestamp)
- {
- ALOGV("onCaptureStarted");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
- data.writeInt32(1); // to mark presence of CaptureResultExtras object
- result.writeToParcel(&data);
- data.writeInt64(timestamp);
- remote()->transact(CAPTURE_STARTED, data, &reply, IBinder::FLAG_ONEWAY);
- data.writeNoException();
- }
-
- void onResultReceived(const CameraMetadata& metadata,
- const CaptureResultExtras& resultExtras) {
- ALOGV("onResultReceived");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
- data.writeInt32(1); // to mark presence of metadata object
- metadata.writeToParcel(&data);
- data.writeInt32(1); // to mark presence of CaptureResult object
- resultExtras.writeToParcel(&data);
- remote()->transact(RESULT_RECEIVED, data, &reply, IBinder::FLAG_ONEWAY);
- data.writeNoException();
- }
-
- void onPrepared(int streamId)
- {
- ALOGV("onPrepared");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor());
- data.writeInt32(streamId);
- remote()->transact(PREPARED, data, &reply, IBinder::FLAG_ONEWAY);
- data.writeNoException();
- }
-
-};
-
-IMPLEMENT_META_INTERFACE(CameraDeviceCallbacks,
- "android.hardware.camera2.ICameraDeviceCallbacks");
-
-// ----------------------------------------------------------------------
-
-status_t BnCameraDeviceCallbacks::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- ALOGV("onTransact - code = %d", code);
- switch(code) {
- case CAMERA_ERROR: {
- ALOGV("onDeviceError");
- CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
- CameraErrorCode errorCode =
- static_cast<CameraErrorCode>(data.readInt32());
- CaptureResultExtras resultExtras;
- if (data.readInt32() != 0) {
- resultExtras.readFromParcel(const_cast<Parcel*>(&data));
- } else {
- ALOGE("No CaptureResultExtras object is present!");
- }
- onDeviceError(errorCode, resultExtras);
- data.readExceptionCode();
- return NO_ERROR;
- } break;
- case CAMERA_IDLE: {
- ALOGV("onDeviceIdle");
- CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
- onDeviceIdle();
- data.readExceptionCode();
- return NO_ERROR;
- } break;
- case CAPTURE_STARTED: {
- ALOGV("onCaptureStarted");
- CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
- CaptureResultExtras result;
- if (data.readInt32() != 0) {
- result.readFromParcel(const_cast<Parcel*>(&data));
- } else {
- ALOGE("No CaptureResultExtras object is present in result!");
- }
- int64_t timestamp = data.readInt64();
- onCaptureStarted(result, timestamp);
- data.readExceptionCode();
- return NO_ERROR;
- } break;
- case RESULT_RECEIVED: {
- ALOGV("onResultReceived");
- CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
- CameraMetadata metadata;
- if (data.readInt32() != 0) {
- metadata.readFromParcel(const_cast<Parcel*>(&data));
- } else {
- ALOGW("No metadata object is present in result");
- }
- CaptureResultExtras resultExtras;
- if (data.readInt32() != 0) {
- resultExtras.readFromParcel(const_cast<Parcel*>(&data));
- } else {
- ALOGW("No capture result extras object is present in result");
- }
- onResultReceived(metadata, resultExtras);
- data.readExceptionCode();
- return NO_ERROR;
- } break;
- case PREPARED: {
- ALOGV("onPrepared");
- CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply);
- CaptureResultExtras result;
- int streamId = data.readInt32();
- onPrepared(streamId);
- data.readExceptionCode();
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
diff --git a/camera/camera2/ICameraDeviceUser.cpp b/camera/camera2/ICameraDeviceUser.cpp
deleted file mode 100644
index 2a9fd2b..0000000
--- a/camera/camera2/ICameraDeviceUser.cpp
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-// #define LOG_NDEBUG 0
-#define LOG_TAG "ICameraDeviceUser"
-#include <utils/Log.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <binder/Parcel.h>
-#include <camera/camera2/ICameraDeviceUser.h>
-#include <gui/IGraphicBufferProducer.h>
-#include <gui/Surface.h>
-#include <camera/CameraMetadata.h>
-#include <camera/camera2/CaptureRequest.h>
-#include <camera/camera2/OutputConfiguration.h>
-
-namespace android {
-
-typedef Parcel::WritableBlob WritableBlob;
-typedef Parcel::ReadableBlob ReadableBlob;
-
-enum {
- DISCONNECT = IBinder::FIRST_CALL_TRANSACTION,
- SUBMIT_REQUEST,
- SUBMIT_REQUEST_LIST,
- CANCEL_REQUEST,
- BEGIN_CONFIGURE,
- END_CONFIGURE,
- DELETE_STREAM,
- CREATE_STREAM,
- CREATE_INPUT_STREAM,
- GET_INPUT_SURFACE,
- CREATE_DEFAULT_REQUEST,
- GET_CAMERA_INFO,
- WAIT_UNTIL_IDLE,
- FLUSH,
- PREPARE,
- TEAR_DOWN,
- PREPARE2
-};
-
-namespace {
- // Read empty strings without printing a false error message.
- String16 readMaybeEmptyString16(const Parcel& parcel) {
- size_t len;
- const char16_t* str = parcel.readString16Inplace(&len);
- if (str != NULL) {
- return String16(str, len);
- } else {
- return String16();
- }
- }
-};
-
-class BpCameraDeviceUser : public BpInterface<ICameraDeviceUser>
-{
-public:
- BpCameraDeviceUser(const sp<IBinder>& impl)
- : BpInterface<ICameraDeviceUser>(impl)
- {
- }
-
- // disconnect from camera service
- void disconnect()
- {
- ALOGV("disconnect");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- remote()->transact(DISCONNECT, data, &reply);
- reply.readExceptionCode();
- }
-
- virtual int submitRequest(sp<CaptureRequest> request, bool repeating,
- int64_t *lastFrameNumber)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
-
- // arg0 = CaptureRequest
- if (request != 0) {
- data.writeInt32(1);
- request->writeToParcel(&data);
- } else {
- data.writeInt32(0);
- }
-
- // arg1 = streaming (bool)
- data.writeInt32(repeating);
-
- remote()->transact(SUBMIT_REQUEST, data, &reply);
-
- reply.readExceptionCode();
- status_t res = reply.readInt32();
-
- status_t resFrameNumber = BAD_VALUE;
- if (reply.readInt32() != 0) {
- if (lastFrameNumber != NULL) {
- resFrameNumber = reply.readInt64(lastFrameNumber);
- }
- }
-
- if (res < 0 || (resFrameNumber != NO_ERROR)) {
- res = FAILED_TRANSACTION;
- }
- return res;
- }
-
- virtual int submitRequestList(List<sp<CaptureRequest> > requestList, bool repeating,
- int64_t *lastFrameNumber)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
-
- data.writeInt32(requestList.size());
-
- for (List<sp<CaptureRequest> >::iterator it = requestList.begin();
- it != requestList.end(); ++it) {
- sp<CaptureRequest> request = *it;
- if (request != 0) {
- data.writeInt32(1);
- if (request->writeToParcel(&data) != OK) {
- return BAD_VALUE;
- }
- } else {
- data.writeInt32(0);
- }
- }
-
- data.writeInt32(repeating);
-
- remote()->transact(SUBMIT_REQUEST_LIST, data, &reply);
-
- reply.readExceptionCode();
- status_t res = reply.readInt32();
-
- status_t resFrameNumber = BAD_VALUE;
- if (reply.readInt32() != 0) {
- if (lastFrameNumber != NULL) {
- resFrameNumber = reply.readInt64(lastFrameNumber);
- }
- }
- if (res < 0 || (resFrameNumber != NO_ERROR)) {
- res = FAILED_TRANSACTION;
- }
- return res;
- }
-
- virtual status_t cancelRequest(int requestId, int64_t *lastFrameNumber)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(requestId);
-
- remote()->transact(CANCEL_REQUEST, data, &reply);
-
- reply.readExceptionCode();
- status_t res = reply.readInt32();
-
- status_t resFrameNumber = BAD_VALUE;
- if (reply.readInt32() != 0) {
- if (lastFrameNumber != NULL) {
- resFrameNumber = reply.readInt64(lastFrameNumber);
- }
- }
- if ((res != NO_ERROR) || (resFrameNumber != NO_ERROR)) {
- res = FAILED_TRANSACTION;
- }
- return res;
- }
-
- virtual status_t beginConfigure()
- {
- ALOGV("beginConfigure");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- remote()->transact(BEGIN_CONFIGURE, data, &reply);
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- virtual status_t endConfigure(bool isConstrainedHighSpeed)
- {
- ALOGV("endConfigure");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(isConstrainedHighSpeed);
-
- remote()->transact(END_CONFIGURE, data, &reply);
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- virtual status_t deleteStream(int streamId)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(streamId);
-
- remote()->transact(DELETE_STREAM, data, &reply);
-
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- virtual status_t createStream(const OutputConfiguration& outputConfiguration)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- if (outputConfiguration.getGraphicBufferProducer() != NULL) {
- data.writeInt32(1); // marker that OutputConfiguration is not null. Mimic aidl behavior
- outputConfiguration.writeToParcel(data);
- } else {
- data.writeInt32(0);
- }
- remote()->transact(CREATE_STREAM, data, &reply);
-
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- virtual status_t createInputStream(int width, int height, int format)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(width);
- data.writeInt32(height);
- data.writeInt32(format);
-
- remote()->transact(CREATE_INPUT_STREAM, data, &reply);
-
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- // get the buffer producer of the input stream
- virtual status_t getInputBufferProducer(
- sp<IGraphicBufferProducer> *producer) {
- if (producer == NULL) {
- return BAD_VALUE;
- }
-
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
-
- remote()->transact(GET_INPUT_SURFACE, data, &reply);
-
- reply.readExceptionCode();
- status_t result = reply.readInt32() ;
- if (result != OK) {
- return result;
- }
-
- sp<IGraphicBufferProducer> bp = NULL;
- if (reply.readInt32() != 0) {
- String16 name = readMaybeEmptyString16(reply);
- bp = interface_cast<IGraphicBufferProducer>(
- reply.readStrongBinder());
- }
-
- *producer = bp;
-
- return *producer == NULL ? INVALID_OPERATION : OK;
- }
-
- // Create a request object from a template.
- virtual status_t createDefaultRequest(int templateId,
- /*out*/
- CameraMetadata* request)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(templateId);
- remote()->transact(CREATE_DEFAULT_REQUEST, data, &reply);
-
- reply.readExceptionCode();
- status_t result = reply.readInt32();
-
- CameraMetadata out;
- if (reply.readInt32() != 0) {
- out.readFromParcel(&reply);
- }
-
- if (request != NULL) {
- request->swap(out);
- }
- return result;
- }
-
-
- virtual status_t getCameraInfo(CameraMetadata* info)
- {
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- remote()->transact(GET_CAMERA_INFO, data, &reply);
-
- reply.readExceptionCode();
- status_t result = reply.readInt32();
-
- CameraMetadata out;
- if (reply.readInt32() != 0) {
- out.readFromParcel(&reply);
- }
-
- if (info != NULL) {
- info->swap(out);
- }
-
- return result;
- }
-
- virtual status_t waitUntilIdle()
- {
- ALOGV("waitUntilIdle");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- remote()->transact(WAIT_UNTIL_IDLE, data, &reply);
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- virtual status_t flush(int64_t *lastFrameNumber)
- {
- ALOGV("flush");
- Parcel data, reply;
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- remote()->transact(FLUSH, data, &reply);
- reply.readExceptionCode();
- status_t res = reply.readInt32();
-
- status_t resFrameNumber = BAD_VALUE;
- if (reply.readInt32() != 0) {
- if (lastFrameNumber != NULL) {
- resFrameNumber = reply.readInt64(lastFrameNumber);
- }
- }
- if ((res != NO_ERROR) || (resFrameNumber != NO_ERROR)) {
- res = FAILED_TRANSACTION;
- }
- return res;
- }
-
- virtual status_t prepare(int streamId)
- {
- ALOGV("prepare");
- Parcel data, reply;
-
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(streamId);
-
- remote()->transact(PREPARE, data, &reply);
-
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- virtual status_t prepare2(int maxCount, int streamId)
- {
- ALOGV("prepare2");
- Parcel data, reply;
-
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(maxCount);
- data.writeInt32(streamId);
-
- remote()->transact(PREPARE2, data, &reply);
-
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
- virtual status_t tearDown(int streamId)
- {
- ALOGV("tearDown");
- Parcel data, reply;
-
- data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor());
- data.writeInt32(streamId);
-
- remote()->transact(TEAR_DOWN, data, &reply);
-
- reply.readExceptionCode();
- return reply.readInt32();
- }
-
-private:
-
-
-};
-
-IMPLEMENT_META_INTERFACE(CameraDeviceUser,
- "android.hardware.camera2.ICameraDeviceUser");
-
-// ----------------------------------------------------------------------
-
-status_t BnCameraDeviceUser::onTransact(
- uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
-{
- switch(code) {
- case DISCONNECT: {
- ALOGV("DISCONNECT");
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- disconnect();
- reply->writeNoException();
- return NO_ERROR;
- } break;
- case SUBMIT_REQUEST: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
-
- // arg0 = request
- sp<CaptureRequest> request;
- if (data.readInt32() != 0) {
- request = new CaptureRequest();
- request->readFromParcel(const_cast<Parcel*>(&data));
- }
-
- // arg1 = streaming (bool)
- bool repeating = data.readInt32();
-
- // return code: requestId (int32)
- reply->writeNoException();
- int64_t lastFrameNumber = -1;
- reply->writeInt32(submitRequest(request, repeating, &lastFrameNumber));
- reply->writeInt32(1);
- reply->writeInt64(lastFrameNumber);
-
- return NO_ERROR;
- } break;
- case SUBMIT_REQUEST_LIST: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
-
- List<sp<CaptureRequest> > requestList;
- int requestListSize = data.readInt32();
- for (int i = 0; i < requestListSize; i++) {
- if (data.readInt32() != 0) {
- sp<CaptureRequest> request = new CaptureRequest();
- if (request->readFromParcel(const_cast<Parcel*>(&data)) != OK) {
- return BAD_VALUE;
- }
- requestList.push_back(request);
- } else {
- sp<CaptureRequest> request = 0;
- requestList.push_back(request);
- ALOGE("A request is missing. Sending in null request.");
- }
- }
-
- bool repeating = data.readInt32();
-
- reply->writeNoException();
- int64_t lastFrameNumber = -1;
- reply->writeInt32(submitRequestList(requestList, repeating, &lastFrameNumber));
- reply->writeInt32(1);
- reply->writeInt64(lastFrameNumber);
-
- return NO_ERROR;
- } break;
- case CANCEL_REQUEST: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- int requestId = data.readInt32();
- reply->writeNoException();
- int64_t lastFrameNumber = -1;
- reply->writeInt32(cancelRequest(requestId, &lastFrameNumber));
- reply->writeInt32(1);
- reply->writeInt64(lastFrameNumber);
- return NO_ERROR;
- } break;
- case DELETE_STREAM: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- int streamId = data.readInt32();
- reply->writeNoException();
- reply->writeInt32(deleteStream(streamId));
- return NO_ERROR;
- } break;
- case CREATE_STREAM: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
-
- status_t ret = BAD_VALUE;
- if (data.readInt32() != 0) {
- OutputConfiguration outputConfiguration(data);
- ret = createStream(outputConfiguration);
- } else {
- ALOGE("%s: cannot take an empty OutputConfiguration", __FUNCTION__);
- }
-
- reply->writeNoException();
- ALOGV("%s: CREATE_STREAM: write noException", __FUNCTION__);
- reply->writeInt32(ret);
- ALOGV("%s: CREATE_STREAM: write ret = %d", __FUNCTION__, ret);
-
- return NO_ERROR;
- } break;
- case CREATE_INPUT_STREAM: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- int width, height, format;
-
- width = data.readInt32();
- height = data.readInt32();
- format = data.readInt32();
- status_t ret = createInputStream(width, height, format);
-
- reply->writeNoException();
- reply->writeInt32(ret);
- return NO_ERROR;
-
- } break;
- case GET_INPUT_SURFACE: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
-
- sp<IGraphicBufferProducer> bp;
- status_t ret = getInputBufferProducer(&bp);
- sp<IBinder> b(IInterface::asBinder(ret == OK ? bp : NULL));
-
- reply->writeNoException();
- reply->writeInt32(ret);
- reply->writeInt32(1);
- reply->writeString16(String16("camera input")); // name of surface
- reply->writeStrongBinder(b);
-
- return NO_ERROR;
- } break;
- case CREATE_DEFAULT_REQUEST: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
-
- int templateId = data.readInt32();
-
- CameraMetadata request;
- status_t ret;
- ret = createDefaultRequest(templateId, &request);
-
- 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));
-
- return NO_ERROR;
- } break;
- case GET_CAMERA_INFO: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
-
- CameraMetadata info;
- status_t ret;
- ret = getCameraInfo(&info);
-
- reply->writeNoException();
- reply->writeInt32(ret);
-
- // out-variables are after exception and return value
- reply->writeInt32(1); // to mark presence of metadata object
- info.writeToParcel(reply);
-
- return NO_ERROR;
- } break;
- case WAIT_UNTIL_IDLE: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- reply->writeNoException();
- reply->writeInt32(waitUntilIdle());
- return NO_ERROR;
- } break;
- case FLUSH: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- reply->writeNoException();
- int64_t lastFrameNumber = -1;
- reply->writeInt32(flush(&lastFrameNumber));
- reply->writeInt32(1);
- reply->writeInt64(lastFrameNumber);
- return NO_ERROR;
- }
- case BEGIN_CONFIGURE: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- reply->writeNoException();
- reply->writeInt32(beginConfigure());
- return NO_ERROR;
- } break;
- case END_CONFIGURE: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- bool isConstrainedHighSpeed = data.readInt32();
- reply->writeNoException();
- reply->writeInt32(endConfigure(isConstrainedHighSpeed));
- return NO_ERROR;
- } break;
- case PREPARE: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- int streamId = data.readInt32();
- reply->writeNoException();
- reply->writeInt32(prepare(streamId));
- return NO_ERROR;
- } break;
- case TEAR_DOWN: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- int streamId = data.readInt32();
- reply->writeNoException();
- reply->writeInt32(tearDown(streamId));
- return NO_ERROR;
- } break;
- case PREPARE2: {
- CHECK_INTERFACE(ICameraDeviceUser, data, reply);
- int maxCount = data.readInt32();
- int streamId = data.readInt32();
- reply->writeNoException();
- reply->writeInt32(prepare2(maxCount, streamId));
- return NO_ERROR;
- } break;
- default:
- return BBinder::onTransact(code, data, reply, flags);
- }
-}
-
-// ----------------------------------------------------------------------------
-
-}; // namespace android
diff --git a/camera/camera2/OutputConfiguration.cpp b/camera/camera2/OutputConfiguration.cpp
index 3505154..2c2c90b 100644
--- a/camera/camera2/OutputConfiguration.cpp
+++ b/camera/camera2/OutputConfiguration.cpp
@@ -16,9 +16,12 @@
*/
#define LOG_TAG "OutputConfiguration"
+//#define LOG_NDEBUG 0
+
#include <utils/Log.h>
#include <camera/camera2/OutputConfiguration.h>
+#include <gui/Surface.h>
#include <binder/Parcel.h>
namespace android {
@@ -27,17 +30,6 @@
const int OutputConfiguration::INVALID_ROTATION = -1;
const int OutputConfiguration::INVALID_SET_ID = -1;
-// Read empty strings without printing a false error message.
-String16 OutputConfiguration::readMaybeEmptyString16(const Parcel& parcel) {
- size_t len;
- const char16_t* str = parcel.readString16Inplace(&len);
- if (str != NULL) {
- return String16(str, len);
- } else {
- return String16();
- }
-}
-
sp<IGraphicBufferProducer> OutputConfiguration::getGraphicBufferProducer() const {
return mGbp;
}
@@ -50,33 +42,48 @@
return mSurfaceSetID;
}
-OutputConfiguration::OutputConfiguration(const Parcel& parcel) {
- status_t err;
+OutputConfiguration::OutputConfiguration() :
+ mRotation(INVALID_ROTATION),
+ mSurfaceSetID(INVALID_SET_ID) {
+}
+
+OutputConfiguration::OutputConfiguration(const Parcel& parcel) :
+ mRotation(INVALID_ROTATION),
+ mSurfaceSetID(INVALID_SET_ID) {
+ readFromParcel(&parcel);
+}
+
+status_t OutputConfiguration::readFromParcel(const Parcel* parcel) {
+ status_t err = OK;
int rotation = 0;
- if ((err = parcel.readInt32(&rotation)) != OK) {
+
+ if (parcel == nullptr) return BAD_VALUE;
+
+ if ((err = parcel->readInt32(&rotation)) != OK) {
ALOGE("%s: Failed to read rotation from parcel", __FUNCTION__);
- mGbp = NULL;
- mRotation = INVALID_ROTATION;
- return;
+ return err;
}
int setID = INVALID_SET_ID;
- if ((err = parcel.readInt32(&setID)) != OK) {
+ if ((err = parcel->readInt32(&setID)) != OK) {
ALOGE("%s: Failed to read surface set ID from parcel", __FUNCTION__);
- mGbp = NULL;
- mSurfaceSetID = INVALID_SET_ID;
- return;
+ return err;
}
- String16 name = readMaybeEmptyString16(parcel);
- const sp<IGraphicBufferProducer>& gbp =
- interface_cast<IGraphicBufferProducer>(parcel.readStrongBinder());
- mGbp = gbp;
+ view::Surface surfaceShim;
+ if ((err = surfaceShim.readFromParcel(parcel)) != OK) {
+ ALOGE("%s: Failed to read surface from parcel", __FUNCTION__);
+ return err;
+ }
+
+ mGbp = surfaceShim.graphicBufferProducer;
mRotation = rotation;
mSurfaceSetID = setID;
ALOGV("%s: OutputConfiguration: bp = %p, name = %s", __FUNCTION__,
- gbp.get(), String8(name).string());
+ mGbp.get(), String8(surfaceShim.name).string());
+
+ return err;
}
OutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
@@ -86,16 +93,25 @@
mSurfaceSetID = surfaceSetID;
}
-status_t OutputConfiguration::writeToParcel(Parcel& parcel) const {
+status_t OutputConfiguration::writeToParcel(Parcel* parcel) const {
- parcel.writeInt32(mRotation);
- parcel.writeInt32(mSurfaceSetID);
- parcel.writeString16(String16("unknown_name")); // name of surface
- sp<IBinder> b(IInterface::asBinder(mGbp));
- parcel.writeStrongBinder(b);
+ if (parcel == nullptr) return BAD_VALUE;
+ status_t err = OK;
+
+ err = parcel->writeInt32(mRotation);
+ if (err != OK) return err;
+
+ err = parcel->writeInt32(mSurfaceSetID);
+ if (err != OK) return err;
+
+ view::Surface surfaceShim;
+ surfaceShim.name = String16("unknown_name"); // name of surface
+ surfaceShim.graphicBufferProducer = mGbp;
+
+ err = surfaceShim.writeToParcel(parcel);
+ if (err != OK) return err;
return OK;
}
}; // namespace android
-
diff --git a/camera/camera2/SubmitInfo.cpp b/camera/camera2/SubmitInfo.cpp
new file mode 100644
index 0000000..d739c79
--- /dev/null
+++ b/camera/camera2/SubmitInfo.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "camera/camera2/SubmitInfo.h"
+
+namespace android {
+namespace hardware {
+namespace camera2 {
+namespace utils {
+
+status_t SubmitInfo::writeToParcel(Parcel *parcel) const {
+ status_t res;
+ if (parcel == nullptr) return BAD_VALUE;
+
+ res = parcel->writeInt32(mRequestId);
+ if (res != OK) return res;
+
+ res = parcel->writeInt64(mLastFrameNumber);
+ return res;
+}
+
+status_t SubmitInfo::readFromParcel(const Parcel *parcel) {
+ status_t res;
+ if (parcel == nullptr) return BAD_VALUE;
+
+ res = parcel->readInt32(&mRequestId);
+ if (res != OK) return res;
+
+ res = parcel->readInt64(&mLastFrameNumber);
+ return res;
+}
+
+} // namespace utils
+} // namespace camera2
+} // namespace hardware
+} // namespace android