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

Commit 0cc2e2cd authored by Carlos Martinez Romero's avatar Carlos Martinez Romero
Browse files

Use view::Surface instead of IGBPs in OutputConfiguration

We are currently limitig the use of IGBPs outside of libgui to allow for
further development of bufferqueues without external breakages. More
information at go/warren-buffers.

BYPASS_IGBP_IGBC_API_REASON: this CL is part of the migration.
Bug: 342197849
Test: atest android.hardware.cts.CameraTest
Flag: com.android.graphics.libgui.flags.wb_libcameraservice

Change-Id: I299be522d47849ca67bcbf22519535a39343ed37
parent f9854d27
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -264,6 +264,7 @@ filegroup {
        "DisplayEventDispatcher.cpp",
        "DisplayEventReceiver.cpp",
        "FenceMonitor.cpp",
        "Flags.cpp",
        "GLConsumer.cpp",
        "IConsumerListener.cpp",
        "IGraphicBufferConsumer.cpp",

libs/gui/Flags.cpp

0 → 100644
+73 −0
Original line number Diff line number Diff line
/*
 * Copyright 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <gui/Flags.h>
#include <gui/IGraphicBufferProducer.h>
#include <gui/Surface.h>
#include <gui/view/Surface.h>

namespace android {
namespace flagtools {
sp<SurfaceType> surfaceToSurfaceType(const sp<Surface>& surface) {
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    return surface;
#else
    return surface->getIGraphicBufferProducer();
#endif
}

sp<IGraphicBufferProducer> surfaceTypeToIGBP(const sp<SurfaceType>& surface) {
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    return surface->getIGraphicBufferProducer();
#else
    return surface;
#endif
}

bool isSurfaceTypeValid(const sp<SurfaceType>& surface) {
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    return Surface::isValid(surface);
#else
    return surface != nullptr;
#endif
}

ParcelableSurfaceType toParcelableSurfaceType(const view::Surface& surface) {
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    return surface;
#else
    return surface.graphicBufferProducer;
#endif
}

ParcelableSurfaceType convertSurfaceTypeToParcelable(sp<SurfaceType> surface) {
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    return view::Surface::fromSurface(surface);
#else
    return surface;
#endif
}

sp<SurfaceType> convertParcelableSurfaceTypeToSurface(const ParcelableSurfaceType& surface) {
#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
    return surface.toSurface();
#else
    return surface;
#endif
}

} // namespace flagtools
} // namespace android
 No newline at end of file
+23 −3
Original line number Diff line number Diff line
@@ -17,8 +17,15 @@
#pragma once

#include <com_android_graphics_libgui_flags.h>
#include <gui/IGraphicBufferProducer.h>
#include <gui/Surface.h>
#include <utils/StrongPointer.h>

namespace android {

class IGraphicBufferProducer;
class Surface;
namespace view {
class Surface;
}

#define WB_CAMERA3_AND_PROCESSORS_WITH_DEPENDENCIES                  \
    (COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CAMERA3_AND_PROCESSORS) && \
@@ -31,6 +38,19 @@

#if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES
typedef android::Surface SurfaceType;
typedef android::view::Surface ParcelableSurfaceType;
#else
typedef android::IGraphicBufferProducer SurfaceType;
typedef android::sp<android::IGraphicBufferProducer> ParcelableSurfaceType;
#endif

namespace flagtools {
sp<SurfaceType> surfaceToSurfaceType(const sp<Surface>& surface);
ParcelableSurfaceType toParcelableSurfaceType(const view::Surface& surface);
sp<IGraphicBufferProducer> surfaceTypeToIGBP(const sp<SurfaceType>& surface);
bool isSurfaceTypeValid(const sp<SurfaceType>& surface);
ParcelableSurfaceType convertSurfaceTypeToParcelable(sp<SurfaceType> surface);
sp<SurfaceType> convertParcelableSurfaceTypeToSurface(const ParcelableSurfaceType& surface);
} // namespace flagtools

} // namespace android
+16 −0
Original line number Diff line number Diff line
@@ -54,6 +54,22 @@ class Surface : public Parcelable {
    sp<android::Surface> toSurface() const;

    status_t getUniqueId(/* out */ uint64_t* id) const;

    bool isEmpty() const;

    bool operator==(const Surface& other) const {
        return graphicBufferProducer == other.graphicBufferProducer;
    }
    bool operator!=(const Surface& other) const { return !(*this == other); }
    bool operator==(const sp<android::Surface> other) const {
        if (other == nullptr) return graphicBufferProducer == nullptr;
        return graphicBufferProducer == other->getIGraphicBufferProducer();
    }
    bool operator!=(const sp<android::Surface> other) const { return !(*this == other); }
    bool operator<(const Surface& other) const {
        return graphicBufferProducer < other.graphicBufferProducer;
    }
    bool operator>(const Surface& other) const { return other < *this; }
#endif

    virtual status_t writeToParcel(Parcel* parcel) const override;
+4 −0
Original line number Diff line number Diff line
@@ -151,6 +151,10 @@ status_t Surface::getUniqueId(uint64_t* out_id) const {
    }
    return OK;
}

bool Surface::isEmpty() const {
    return graphicBufferProducer == nullptr;
}
#endif

std::string Surface::toString() const {