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

Commit e74399e4 authored by Shuzhen Wang's avatar Shuzhen Wang Committed by android-build-merger
Browse files

Merge "Camera: Use original format and dataSpace for reconfigure" into qt-dev

am: 8caf80a2

Change-Id: Id52e4ca84cecd8c51ff7a84c022506ac44cb5949
parents fd643d42 8caf80a2
Loading
Loading
Loading
Loading
+22 −10
Original line number Diff line number Diff line
@@ -2876,7 +2876,8 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode,
    config.streams = streams.editArray();

    // Do the HAL configuration; will potentially touch stream
    // max_buffers, usage, priv fields.
    // max_buffers, usage, and priv fields, as well as data_space and format
    // fields for IMPLEMENTATION_DEFINED formats.

    const camera_metadata_t *sessionBuffer = sessionParams.getAndLock();
    res = mInterface->configureStreams(sessionBuffer, &config, bufferSizes);
@@ -4202,10 +4203,19 @@ status_t Camera3Device::HalInterface::configureStreams(const camera_metadata_t *
        dst3_2.streamType = streamType;
        dst3_2.width = src->width;
        dst3_2.height = src->height;
        dst3_2.format = mapToPixelFormat(src->format);
        dst3_2.usage = mapToConsumerUsage(cam3stream->getUsage());
        dst3_2.dataSpace = mapToHidlDataspace(src->data_space);
        dst3_2.rotation = mapToStreamRotation((camera3_stream_rotation_t) src->rotation);
        // For HidlSession version 3.5 or newer, the format and dataSpace sent
        // to HAL are original, not the overriden ones.
        if (mHidlSession_3_5 != nullptr) {
            dst3_2.format = mapToPixelFormat(cam3stream->isFormatOverridden() ?
                    cam3stream->getOriginalFormat() : src->format);
            dst3_2.dataSpace = mapToHidlDataspace(cam3stream->isDataSpaceOverridden() ?
                    cam3stream->getOriginalDataSpace() : src->data_space);
        } else {
            dst3_2.format = mapToPixelFormat(src->format);
            dst3_2.dataSpace = mapToHidlDataspace(src->data_space);
        }
        dst3_4.v3_2 = dst3_2;
        dst3_4.bufferSize = bufferSizes[i];
        if (src->physical_camera_id != nullptr) {
@@ -4266,7 +4276,7 @@ status_t Camera3Device::HalInterface::configureStreams(const camera_metadata_t *
                return OK;
            };

    // See if we have v3.4 or v3.3 HAL
    // See which version of HAL we have
    if (mHidlSession_3_5 != nullptr) {
        ALOGV("%s: v3.5 device found", __FUNCTION__);
        device::V3_5::StreamConfiguration requestedConfiguration3_5;
@@ -4281,7 +4291,6 @@ status_t Camera3Device::HalInterface::configureStreams(const camera_metadata_t *
    } else if (mHidlSession_3_4 != nullptr) {
        // We do; use v3.4 for the call
        ALOGV("%s: v3.4 device found", __FUNCTION__);
        device::V3_4::HalStreamConfiguration finalConfiguration3_4;
        auto err = mHidlSession_3_4->configureStreams_3_4(
                requestedConfiguration3_4, configStream34Cb);
        res = postprocConfigStream34(err);
@@ -4352,12 +4361,12 @@ status_t Camera3Device::HalInterface::configureStreams(const camera_metadata_t *
        device::V3_3::HalStream &src = finalConfiguration.streams[realIdx];

        Camera3Stream* dstStream = Camera3Stream::cast(dst);
        dstStream->setFormatOverride(false);
        dstStream->setDataSpaceOverride(false);
        int overrideFormat = mapToFrameworkFormat(src.v3_2.overrideFormat);
        android_dataspace overrideDataSpace = mapToFrameworkDataspace(src.overrideDataSpace);

        if (dst->format != HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) {
            dstStream->setFormatOverride(false);
            dstStream->setDataSpaceOverride(false);
            if (dst->format != overrideFormat) {
                ALOGE("%s: Stream %d: Format override not allowed for format 0x%x", __FUNCTION__,
                        streamId, dst->format);
@@ -4367,10 +4376,13 @@ status_t Camera3Device::HalInterface::configureStreams(const camera_metadata_t *
                        streamId, dst->format);
            }
        } else {
            dstStream->setFormatOverride((dst->format != overrideFormat) ? true : false);
            dstStream->setDataSpaceOverride((dst->data_space != overrideDataSpace) ? true : false);

            bool needFormatOverride =
                    requestedConfiguration3_2.streams[i].format != src.v3_2.overrideFormat;
            bool needDataspaceOverride =
                    requestedConfiguration3_2.streams[i].dataSpace != src.overrideDataSpace;
            // Override allowed with IMPLEMENTATION_DEFINED
            dstStream->setFormatOverride(needFormatOverride);
            dstStream->setDataSpaceOverride(needDataspaceOverride);
            dst->format = overrideFormat;
            dst->data_space = overrideDataSpace;
        }
+1 −1
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ status_t Camera3SharedOutputStream::connectStreamSplitterLocked() {

    mStreamSplitter = new Camera3StreamSplitter(mUseHalBufManager);

    uint64_t usage;
    uint64_t usage = 0;
    getEndpointUsage(&usage);

    std::unordered_map<size_t, sp<Surface>> initialSurfaces;
+8 −2
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ Camera3Stream::Camera3Stream(int id,
    mBufferLimitLatency(kBufferLimitLatencyBinSize),
    mFormatOverridden(false),
    mOriginalFormat(-1),
    mDataSpaceOverridden(false),
    mOriginalDataSpace(HAL_DATASPACE_UNKNOWN),
    mPhysicalCameraId(physicalCameraId),
    mLastTimestamp(0) {

@@ -121,7 +123,9 @@ void Camera3Stream::setUsage(uint64_t usage) {

void Camera3Stream::setFormatOverride(bool formatOverridden) {
    mFormatOverridden = formatOverridden;
    if (formatOverridden) mOriginalFormat = camera3_stream::format;
    if (formatOverridden && mOriginalFormat == -1) {
        mOriginalFormat = camera3_stream::format;
    }
}

bool Camera3Stream::isFormatOverridden() const {
@@ -134,7 +138,9 @@ int Camera3Stream::getOriginalFormat() const {

void Camera3Stream::setDataSpaceOverride(bool dataSpaceOverridden) {
    mDataSpaceOverridden = dataSpaceOverridden;
    if (dataSpaceOverridden) mOriginalDataSpace = camera3_stream::data_space;
    if (dataSpaceOverridden && mOriginalDataSpace == HAL_DATASPACE_UNKNOWN) {
        mOriginalDataSpace = camera3_stream::data_space;
    }
}

bool Camera3Stream::isDataSpaceOverridden() const {