Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 099b457f authored by Igor Murashkin's avatar Igor Murashkin
Browse files

camera2: Implement ICameraDeviceUser::getCameraInfo

Bug: 9529161
Change-Id: I927e39c124cd5fb19e38423506f4463acc381cb0
parent ce177bb3
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -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;
+2 −3
Original line number Diff line number Diff line
@@ -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;

};

+5 −10
Original line number Diff line number Diff line
@@ -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;
}
+1 −3
Original line number Diff line number Diff line
@@ -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