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

Commit 6fd0b7be authored by Emilian Peev's avatar Emilian Peev
Browse files

Camera: Disable surface usage caching for external surfaces

Calls to 'getEndpointUsageForSurface' may pass a reference
to a surface that is external (not equal to 'mConsumer').
Caching the usage value in this scenario must be avoided.

Bug: 332417443
Test: atest CtsCameraTestCases:android.hardware.camera2.cts.RecordingTest#testVideoPreviewSurfaceSharing
Change-Id: Ie10dae67385560c7825b6a4e36171da683ceef2c
(cherry picked from commit a495a7b1)
parent 40c44983
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -1030,7 +1030,8 @@ void Camera3OutputStream::applyZSLUsageQuirk(int format, uint64_t *consumerUsage

status_t Camera3OutputStream::getEndpointUsageForSurface(uint64_t *usage,
        const sp<Surface>& surface) {
    if (mConsumerUsageCachedValue.has_value() && flags::surface_ipc()) {
    bool internalConsumer = (mConsumer.get() != nullptr) && (mConsumer == surface);
    if (mConsumerUsageCachedValue.has_value() && flags::surface_ipc() && internalConsumer) {
        *usage = mConsumerUsageCachedValue.value();
        return OK;
    }
@@ -1039,7 +1040,9 @@ status_t Camera3OutputStream::getEndpointUsageForSurface(uint64_t *usage,

    res = native_window_get_consumer_usage(static_cast<ANativeWindow*>(surface.get()), usage);
    applyZSLUsageQuirk(camera_stream::format, usage);
    if (internalConsumer) {
        mConsumerUsageCachedValue = *usage;
    }
    return res;
}