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

Commit 6fb9605c authored by Shuzhen Wang's avatar Shuzhen Wang Committed by Android (Google) Code Review
Browse files

Merge "Camera: Support querying session config with parameters" into main

parents 7bd5825b 045be6cf
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.hardware.camera2.ICameraDeviceUser;
import android.hardware.camera2.ICameraDeviceCallbacks;
import android.hardware.camera2.ICameraInjectionCallback;
import android.hardware.camera2.ICameraInjectionSession;
import android.hardware.camera2.params.SessionConfiguration;
import android.hardware.camera2.params.VendorTagDescriptor;
import android.hardware.camera2.params.VendorTagDescriptorCache;
import android.hardware.camera2.utils.ConcurrentCameraIdCombination;
@@ -261,4 +262,18 @@ interface ICameraService
    const int DEVICE_STATE_FOLDED = 4;
    const int DEVICE_STATE_LAST_FRAMEWORK_BIT = 0x80000000; // 1 << 31;

    // Create a CaptureRequest metadata based on template id
    CameraMetadataNative createDefaultRequest(@utf8InCpp String cameraId, int templateId);

    /**
      * Check whether a particular session configuration with optional session parameters
      * has camera device support.
      *
      * @param cameraId The camera id to query session configuration on
      * @param sessionConfiguration Specific session configuration to be verified.
      * @return true  - in case the stream combination is supported.
      *         false - in case there is no device support.
      */
    boolean isSessionConfigurationWithParametersSupported(@utf8InCpp String cameraId,
            in SessionConfiguration sessionConfiguration);
}
+33 −1
Original line number Diff line number Diff line
@@ -22,10 +22,13 @@

#include <camera/camera2/SessionConfiguration.h>
#include <camera/camera2/OutputConfiguration.h>
#include <com_android_internal_camera_flags.h>
#include <binder/Parcel.h>

namespace android {

namespace flags = com::android::internal::camera::flags;

status_t SessionConfiguration::readFromParcel(const android::Parcel* parcel) {
    status_t err = OK;
    int operatingMode = 0;
@@ -67,6 +70,22 @@ status_t SessionConfiguration::readFromParcel(const android::Parcel* parcel) {
        return err;
    }

    bool hasSessionParameters = false;
    CameraMetadata settings;
    if (flags::feature_combination_query()) {
        if ((err = parcel->readBool(&hasSessionParameters)) != OK) {
            ALOGE("%s: Failed to read hasSessionParameters flag from parcel", __FUNCTION__);
            return err;
        }

        if (hasSessionParameters) {
            if ((err = settings.readFromParcel(parcel)) != OK) {
                ALOGE("%s: Failed to read metadata flag from parcel", __FUNCTION__);
                return err;
            }
        }
    }

    mOperatingMode = operatingMode;
    mInputWidth = inputWidth;
    mInputHeight = inputHeight;
@@ -75,7 +94,10 @@ status_t SessionConfiguration::readFromParcel(const android::Parcel* parcel) {
    for (auto& stream : outputStreams) {
        mOutputStreams.push_back(stream);
    }

    if (flags::feature_combination_query()) {
        mHasSessionParameters = hasSessionParameters;
        mSessionParameters = std::move(settings);
    }

    return err;
}
@@ -103,6 +125,16 @@ status_t SessionConfiguration::writeToParcel(android::Parcel* parcel) const {
    err = parcel->writeParcelableVector(mOutputStreams);
    if (err != OK) return err;

    if (flags::feature_combination_query()) {
        err = parcel->writeBool(mHasSessionParameters);
        if (err != OK) return err;

        if (mHasSessionParameters) {
            err = mSessionParameters.writeToParcel(parcel);
            if (err != OK) return err;
        }
    }

    return OK;
}

+8 −0
Original line number Diff line number Diff line
@@ -13,6 +13,14 @@ flag {
     description: "Introduces a new concert mode camera extension type"
     bug: "297083874"
}

flag {
     namespace: "camera_platform"
     name: "feature_combination_query"
     description: "Query feature combination support and session specific characteristics"
     bug: "309627704"
}

flag {
     namespace: "camera_platform"
     name: "log_ultrawide_usage"
+5 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
#define ANDROID_HARDWARE_CAMERA2_SESSIONCONFIGURATION_H

#include <binder/Parcelable.h>
#include <camera/CameraMetadata.h>

namespace android {

@@ -39,6 +40,8 @@ public:
    int getInputFormat() const { return mInputFormat; }
    int getOperatingMode() const { return mOperatingMode; }
    bool inputIsMultiResolution() const { return mInputIsMultiResolution; }
    bool hasSessionParameters() const { return mHasSessionParameters; }
    const CameraMetadata& getSessionParameters() const { return mSessionParameters; }

    virtual status_t writeToParcel(android::Parcel* parcel) const override;
    virtual status_t readFromParcel(const android::Parcel* parcel) override;
@@ -111,6 +114,8 @@ private:
    std::vector<OutputConfiguration> mOutputStreams;
    int                              mInputWidth, mInputHeight, mInputFormat, mOperatingMode;
    bool                             mInputIsMultiResolution = false;
    bool                             mHasSessionParameters = false;
    CameraMetadata                   mSessionParameters;
};
} // namespace params
} // namespace camera2
+1 −1
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ cc_defaults {
        "android.hardware.camera.provider@2.5",
        "android.hardware.camera.provider@2.6",
        "android.hardware.camera.provider@2.7",
        "android.hardware.camera.provider-V2-ndk",
        "android.hardware.camera.provider-V3-ndk",
        "libaidlcommonsupport",
        "libbinderthreadstateutils",
        "libcameraservice_device_independent",
Loading