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

Commit 470d1380 authored by Emilian Peev's avatar Emilian Peev
Browse files

Camera VTS: Keep buffer ids and frame numbers consistent

In case we have a camera device that doesn't support the
Hal buffer management mode, services are required to use
the frame number and stream id to deduce the specific
buffer id and Hals are not mandated to return valid
buffer ids as part of the capture result.

Bug: 265092659
Test:adb shell
/data/nativetest64/VtsAidlHalCameraProvider_TargetTest/VtsAidlHalCameraProvider_TargetTest
--gtest_filter=PerInstance/CameraAidlTest.process10BitDynamicRangeRequest/0_android_hardware_camera_provider_ICameraProvider_internal_0

Change-Id: I3b10e91d38a13afcca45f26712cc5d5c241c2a32
parent 2f27d9e8
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -1846,7 +1846,6 @@ TEST_P(CameraAidlTest, processUltraHighResolutionRequest) {
// Generate and verify 10-bit dynamic range request
TEST_P(CameraAidlTest, process10BitDynamicRangeRequest) {
    std::vector<std::string> cameraDeviceNames = getCameraDeviceNames(mProvider);
    int64_t bufferId = 1;
    CameraMetadata settings;

    for (const auto& name : cameraDeviceNames) {
@@ -1927,12 +1926,12 @@ TEST_P(CameraAidlTest, process10BitDynamicRangeRequest) {
            // Stream as long as needed to fill the Hal inflight queue
            std::vector<CaptureRequest> requests(halStreams[0].maxBuffers);

            for (int32_t frameNumber = 0; frameNumber < requests.size(); frameNumber++) {
            for (int32_t requestId = 0; requestId < requests.size(); requestId++) {
                std::shared_ptr<InFlightRequest> inflightReq = std::make_shared<InFlightRequest>(
                        static_cast<ssize_t>(halStreams.size()), false, supportsPartialResults,
                        partialResultCount, std::unordered_set<std::string>(), resultQueue);

                CaptureRequest& request = requests[frameNumber];
                CaptureRequest& request = requests[requestId];
                std::vector<StreamBuffer>& outputBuffers = request.outputBuffers;
                outputBuffers.resize(halStreams.size());

@@ -1941,6 +1940,7 @@ TEST_P(CameraAidlTest, process10BitDynamicRangeRequest) {
                std::vector<buffer_handle_t> graphicBuffers;
                graphicBuffers.reserve(halStreams.size());

                auto bufferId = requestId + 1; // Buffer id value 0 is not valid
                for (const auto& halStream : halStreams) {
                    buffer_handle_t buffer_handle;
                    if (useHalBufManager) {
@@ -1959,14 +1959,13 @@ TEST_P(CameraAidlTest, process10BitDynamicRangeRequest) {
                        outputBuffers[k] = {halStream.id, bufferId,
                            android::makeToAidl(buffer_handle), BufferStatus::OK, NativeHandle(),
                            NativeHandle()};
                        bufferId++;
                    }
                    k++;
                }

                request.inputBuffer = {
                        -1, 0, NativeHandle(), BufferStatus::ERROR, NativeHandle(), NativeHandle()};
                request.frameNumber = frameNumber;
                request.frameNumber = bufferId;
                request.fmqSettingsSize = 0;
                request.settings = settings;
                request.inputWidth = 0;
@@ -1974,7 +1973,7 @@ TEST_P(CameraAidlTest, process10BitDynamicRangeRequest) {

                {
                    std::unique_lock<std::mutex> l(mLock);
                    mInflightMap[frameNumber] = inflightReq;
                    mInflightMap[bufferId] = inflightReq;
                }

            }
@@ -1990,7 +1989,10 @@ TEST_P(CameraAidlTest, process10BitDynamicRangeRequest) {
                    std::vector<int32_t> {halStreams[0].id});
            ASSERT_TRUE(returnStatus.isOk());

            for (int32_t frameNumber = 0; frameNumber < requests.size(); frameNumber++) {
            // We are keeping frame numbers and buffer ids consistent. Buffer id value of 0
            // is used to indicate a buffer that is not present/available so buffer ids as well
            // as frame numbers begin with 1.
            for (int32_t frameNumber = 1; frameNumber <= requests.size(); frameNumber++) {
                const auto& inflightReq = mInflightMap[frameNumber];
                std::unique_lock<std::mutex> l(mLock);
                while (!inflightReq->errorCodeValid &&
+3 −2
Original line number Diff line number Diff line
@@ -429,10 +429,11 @@ bool DeviceCb::processCaptureResultLocked(
        CameraAidlTest::InFlightRequest::StreamBufferAndTimestamp streamBufferAndTimestamp;
        auto outstandingBuffers = mUseHalBufManager ? mOutstandingBufferIds :
            request->mOutstandingBufferIds;
        auto bufferId = mUseHalBufManager ? buffer.bufferId : results.frameNumber;
        auto outputBuffer = outstandingBuffers.empty() ? ::android::makeFromAidl(buffer.buffer) :
            outstandingBuffers[buffer.streamId][buffer.bufferId];
            outstandingBuffers[buffer.streamId][bufferId];
        streamBufferAndTimestamp.buffer = {buffer.streamId,
                                           buffer.bufferId,
                                           bufferId,
                                           outputBuffer,
                                           buffer.status,
                                           ::android::makeFromAidl(buffer.acquireFence),