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

Commit 73142871 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Enable logical multi-camera API in NDK"

parents ff7397bb 0ff9ae3e
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -167,19 +167,23 @@ status_t OutputConfiguration::readFromParcel(const android::Parcel* parcel) {
}

OutputConfiguration::OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
        const String16& physicalId,
        int surfaceSetID, bool isShared) {
    mGbps.push_back(gbp);
    mRotation = rotation;
    mSurfaceSetID = surfaceSetID;
    mIsDeferred = false;
    mIsShared = isShared;
    mPhysicalCameraId = physicalId;
}

OutputConfiguration::OutputConfiguration(
        const std::vector<sp<IGraphicBufferProducer>>& gbps,
    int rotation, int surfaceSetID,  int surfaceType, int width, int height, bool isShared)
    int rotation, const String16& physicalCameraId, int surfaceSetID,  int surfaceType,
    int width, int height, bool isShared)
  : mGbps(gbps), mRotation(rotation), mSurfaceSetID(surfaceSetID), mSurfaceType(surfaceType),
    mWidth(width), mHeight(height), mIsDeferred(false), mIsShared(isShared) { }
    mWidth(width), mHeight(height), mIsDeferred(false), mIsShared(isShared),
    mPhysicalCameraId(physicalCameraId) { }

status_t OutputConfiguration::writeToParcel(android::Parcel* parcel) const {

+3 −1
Original line number Diff line number Diff line
@@ -65,10 +65,12 @@ public:
    OutputConfiguration(const android::Parcel& parcel);

    OutputConfiguration(sp<IGraphicBufferProducer>& gbp, int rotation,
            const String16& physicalCameraId,
            int surfaceSetID = INVALID_SET_ID, bool isShared = false);

    OutputConfiguration(const std::vector<sp<IGraphicBufferProducer>>& gbps,
                        int rotation, int surfaceSetID = INVALID_SET_ID,
                        int rotation, const String16& physicalCameraId,
                        int surfaceSetID = INVALID_SET_ID,
                        int surfaceType = OutputConfiguration::SURFACE_TYPE_UNKNOWN, int width = 0,
                        int height = 0, bool isShared = false);

+49 −1
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@
#include <camera/NdkCameraCaptureSession.h>
#include "impl/ACameraCaptureSession.h"

#include "impl/ACameraCaptureSession.inc"

using namespace android;

EXPORT
@@ -82,7 +84,31 @@ camera_status_t ACameraCaptureSession_capture(
        return ACAMERA_ERROR_SESSION_CLOSED;
    }

    return session->capture(cbs, numRequests, requests, captureSequenceId);
    return session->capture(
            cbs, numRequests, requests, captureSequenceId);
}

EXPORT
camera_status_t ACameraCaptureSession_logicalCamera_capture(
        ACameraCaptureSession* session,
        /*optional*/ACameraCaptureSession_logicalCamera_captureCallbacks* lcbs,
        int numRequests, ACaptureRequest** requests,
        /*optional*/int* captureSequenceId) {
    ATRACE_CALL();
    if (session == nullptr || requests == nullptr || numRequests < 1) {
        ALOGE("%s: Error: invalid input: session %p, numRequest %d, requests %p",
                __FUNCTION__, session, numRequests, requests);
        return ACAMERA_ERROR_INVALID_PARAMETER;
    }

    if (session->isClosed()) {
        ALOGE("%s: session %p is already closed", __FUNCTION__, session);
        *captureSequenceId = CAPTURE_SEQUENCE_ID_NONE;
        return ACAMERA_ERROR_SESSION_CLOSED;
    }

    return session->capture(
            lcbs, numRequests, requests, captureSequenceId);
}

EXPORT
@@ -106,6 +132,28 @@ camera_status_t ACameraCaptureSession_setRepeatingRequest(
    return session->setRepeatingRequest(cbs, numRequests, requests, captureSequenceId);
}

EXPORT
camera_status_t ACameraCaptureSession_logicalCamera_setRepeatingRequest(
        ACameraCaptureSession* session,
        /*optional*/ACameraCaptureSession_logicalCamera_captureCallbacks* lcbs,
        int numRequests, ACaptureRequest** requests,
        /*optional*/int* captureSequenceId) {
    ATRACE_CALL();
    if (session == nullptr || requests == nullptr || numRequests < 1) {
        ALOGE("%s: Error: invalid input: session %p, numRequest %d, requests %p",
                __FUNCTION__, session, numRequests, requests);
        return ACAMERA_ERROR_INVALID_PARAMETER;
    }

    if (session->isClosed()) {
        ALOGE("%s: session %p is already closed", __FUNCTION__, session);
        *captureSequenceId = CAPTURE_SEQUENCE_ID_NONE;
        return ACAMERA_ERROR_SESSION_CLOSED;
    }

    return session->setRepeatingRequest(lcbs, numRequests, requests, captureSequenceId);
}

EXPORT
camera_status_t ACameraCaptureSession_stopRepeating(ACameraCaptureSession* session) {
    ATRACE_CALL();
+14 −0
Original line number Diff line number Diff line
@@ -128,6 +128,20 @@ camera_status_t ACaptureSessionSharedOutput_create(
    return ACAMERA_OK;
}

EXPORT
camera_status_t ACaptureSessionPhysicalOutput_create(
        ACameraWindowType* window, const char* physicalId,
        /*out*/ACaptureSessionOutput** out) {
    ATRACE_CALL();
    if (window == nullptr || physicalId == nullptr || out == nullptr) {
        ALOGE("%s: Error: bad argument. window %p, physicalId %p, out %p",
                __FUNCTION__, window, physicalId, out);
        return ACAMERA_ERROR_INVALID_PARAMETER;
    }
    *out = new ACaptureSessionOutput(window, false, physicalId);
    return ACAMERA_OK;
}

EXPORT
camera_status_t ACaptureSessionSharedOutput_add(ACaptureSessionOutput *out,
        ACameraWindowType* window) {
+17 −0
Original line number Diff line number Diff line
@@ -69,3 +69,20 @@ void ACameraMetadata_free(ACameraMetadata* metadata) {
        metadata->decStrong((void*) ACameraMetadata_free);
    }
}

EXPORT
bool ACameraMetadata_isLogicalMultiCamera(const ACameraMetadata* staticMetadata,
        /*out*/size_t* numPhysicalCameras, /*out*/const char*const** physicalCameraIds) {
    ATRACE_CALL();
    if (numPhysicalCameras == nullptr || physicalCameraIds == nullptr) {
        ALOGE("%s: Invalid input: numPhysicalCameras %p, physicalCameraIds %p",
                 __FUNCTION__, numPhysicalCameras, physicalCameraIds);
        return false;
    }
    if (staticMetadata == nullptr) {
        ALOGE("%s: Invalid input: staticMetadata is null.", __FUNCTION__);
        return false;
    }

    return staticMetadata->isLogicalMultiCamera(numPhysicalCameras, physicalCameraIds);
}
Loading