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

Commit a1392a19 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 8391568 from 09b26540 to tm-release

Change-Id: Ib3d9db1841f5563798c9f48aba95f019284a9d23
parents fb75e371 09b26540
Loading
Loading
Loading
Loading
+31 −9
Original line number Diff line number Diff line
@@ -330,7 +330,8 @@ camera_status_t CameraDevice::updateOutputConfigurationLocked(ACaptureSessionOut
                return ACAMERA_ERROR_UNKNOWN;
    }

    mConfiguredOutputs[streamId] = std::make_pair(output->mWindow, outConfigW);
    mConfiguredOutputs[streamId] =
            std::move(std::make_pair(std::move(output->mWindow), std::move(outConfigW)));

    return ACAMERA_OK;
}
@@ -623,7 +624,8 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu
        outConfigInsert.windowHandles[0] = anw;
        outConfigInsert.physicalCameraId = outConfig.mPhysicalCameraId;
        native_handle_ptr_wrapper wrap(anw);
        outputSet.insert(std::make_pair(anw, outConfigInsertW));

        outputSet.emplace(std::make_pair(std::move(anw), std::move(outConfigInsertW)));
    }
    std::set<std::pair<native_handle_ptr_wrapper, OutputConfigurationWrapper>> addSet = outputSet;
    std::vector<int32_t> deleteList;
@@ -680,7 +682,7 @@ CameraDevice::configureStreamsLocked(const ACaptureSessionOutputContainer* outpu
    }

    // add new streams
    for (auto outputPair : addSet) {
    for (const auto &outputPair : addSet) {
        int streamId;
        Status status = Status::UNKNOWN_ERROR;
        auto ret = mRemote->createStream(outputPair.second,
@@ -845,12 +847,32 @@ CameraDevice::onCaptureErrorLocked(
            return;
        }

        const auto& windowHandles = outputPairIt->second.second.mOutputConfiguration.windowHandles;
        for (const auto& outHandle : windowHandles) {
            for (auto streamAndWindowId : request->mCaptureRequest.streamAndWindowIds) {
                int32_t windowId = streamAndWindowId.windowId;
                if (utils::isWindowNativeHandleEqual(windowHandles[windowId],outHandle)) {
                    const native_handle_t* anw = windowHandles[windowId].getNativeHandle();
        // Get the surfaces corresponding to the error stream id, go through
        // them and try to match the surfaces in the corresponding
        // CaptureRequest.
        const auto& errorWindowHandles =
                outputPairIt->second.second.mOutputConfiguration.windowHandles;
        for (const auto& errorWindowHandle : errorWindowHandles) {
            for (const auto &requestStreamAndWindowId :
                        request->mCaptureRequest.streamAndWindowIds) {
                // Go through the surfaces in the capture request and see which
                // ones match the surfaces in the error stream.
                int32_t requestWindowId = requestStreamAndWindowId.windowId;
                auto requestSurfacePairIt =
                        mConfiguredOutputs.find(requestStreamAndWindowId.streamId);
                if (requestSurfacePairIt == mConfiguredOutputs.end()) {
                    ALOGE("%s: Error: request stream id %d does not exist", __FUNCTION__,
                              requestStreamAndWindowId.streamId);
                    setCameraDeviceErrorLocked(ACAMERA_ERROR_CAMERA_SERVICE);
                    return;
                }

                const auto &requestWindowHandles =
                        requestSurfacePairIt->second.second.mOutputConfiguration.windowHandles;
                if (utils::isWindowNativeHandleEqual(
                        requestWindowHandles[requestWindowId], errorWindowHandle)) {
                    const native_handle_t* anw =
                            requestWindowHandles[requestWindowId].getNativeHandle();
                    ALOGV("Camera %s Lost output buffer for ANW %p frame %" PRId64,
                            getId(), anw, frameNumber);

+24 −2
Original line number Diff line number Diff line
@@ -109,8 +109,30 @@ struct OutputConfigurationWrapper {
        mOutputConfiguration.windowGroupId = -1;
    };

    OutputConfigurationWrapper(OutputConfiguration &outputConfiguration)
            : mOutputConfiguration((outputConfiguration)) { }
    OutputConfigurationWrapper(const OutputConfigurationWrapper &other) {
        *this = other;
    }

    // Needed to make sure that OutputConfiguration in
    // OutputConfigurationWrapper, when copied doesn't call hidl_handle's
    // assignment operator / copy constructor, which will lead to native handle
    // cloning, which is not what we want for app callbacks which have the native
    // handle as parameter.
    OutputConfigurationWrapper &operator=(const OutputConfigurationWrapper &other) {
        const OutputConfiguration &outputConfiguration = other.mOutputConfiguration;
        mOutputConfiguration.rotation = outputConfiguration.rotation;
        mOutputConfiguration.isDeferred = outputConfiguration.isDeferred;
        mOutputConfiguration.width = outputConfiguration.width;
        mOutputConfiguration.height = outputConfiguration.height;
        mOutputConfiguration.windowGroupId = outputConfiguration.windowGroupId;
        mOutputConfiguration.windowHandles.resize(outputConfiguration.windowHandles.size());
        mOutputConfiguration.physicalCameraId = outputConfiguration.physicalCameraId;
        size_t i = 0;
        for (const auto &handle : outputConfiguration.windowHandles) {
            mOutputConfiguration.windowHandles[i++] = handle.getNativeHandle();
        }
        return *this;
    }

    bool operator ==(const OutputConfiguration &other) const {
        const OutputConfiguration &self = mOutputConfiguration;
+3 −1
Original line number Diff line number Diff line
@@ -1896,8 +1896,10 @@ status_t CCodecConfig::querySupportedParameters(std::vector<std::string> *names)
    names->clear();
    // TODO: expand to standard params
    for (const auto &[key, desc] : mVendorParams) {
        if (desc->isVisible()) {
            names->push_back(key);
        }
    }
    return OK;
}

+7 −3
Original line number Diff line number Diff line
@@ -281,6 +281,11 @@ void addSupportedColorFormats(
            }
        };

        // The color format is ordered by preference. The intention here is to advertise:
        //   c2.android.* codecs: YUV420s, Surface, <the rest>
        //   all other codecs:    Surface, YUV420s, <the rest>
        // TODO: get this preference via Codec2 API

        // vendor video codecs prefer opaque format
        if (trait.name.find("android") == std::string::npos) {
            addDefaultColorFormat(COLOR_FormatSurface);
@@ -290,9 +295,8 @@ void addSupportedColorFormats(
        addDefaultColorFormat(COLOR_FormatYUV420SemiPlanar);
        addDefaultColorFormat(COLOR_FormatYUV420PackedPlanar);
        addDefaultColorFormat(COLOR_FormatYUV420PackedSemiPlanar);
        // framework video encoders must support surface format, though it is unclear
        // that they will be able to map it if it is opaque
        if (encoder && trait.name.find("android") != std::string::npos) {
        // Android video codecs prefer CPU-readable formats
        if (trait.name.find("android") != std::string::npos) {
            addDefaultColorFormat(COLOR_FormatSurface);
        }
        for (int32_t colorFormat : supportedColorFormats) {
+10 −2
Original line number Diff line number Diff line
@@ -778,8 +778,16 @@ AAUDIO_API aaudio_result_t AAudio_createStreamBuilder(AAudioStreamBuilder** buil
        __INTRODUCED_IN(26);

/**
 * Request an audio device identified device using an ID.
 * On Android, for example, the ID could be obtained from the Java AudioManager.
 * Request an audio device identified by an ID.
 *
 * The ID could be obtained from the Java AudioManager.
 * AudioManager.getDevices() returns an array of {@link AudioDeviceInfo},
 * which contains a getId() method. That ID can be passed to this function.
 *
 * It is possible that you may not get the device that you requested.
 * So if it is important to you, you should call
 * AAudioStream_getDeviceId() after the stream is opened to
 * verify the actual ID.
 *
 * The default, if you do not call this function, is {@link #AAUDIO_UNSPECIFIED},
 * in which case the primary device will be used.
Loading