diff options
| author | 2024-11-22 20:23:35 +0000 | |
|---|---|---|
| committer | 2024-11-22 20:23:35 +0000 | |
| commit | a4c472bc84c32cfad0a7ac083e30c4570779ed85 (patch) | |
| tree | f6773a53fb85c246c4d675ab02839792aa02cbc9 | |
| parent | 6066cef898d3caeb4012cfce40e85e68e968d35d (diff) | |
| parent | 0cc2e2cd828b7a0a33132e860289e6481df24d59 (diff) | |
Merge "Use view::Surface instead of IGBPs in OutputConfiguration" into main
| -rw-r--r-- | libs/gui/Android.bp | 1 | ||||
| -rw-r--r-- | libs/gui/Flags.cpp | 73 | ||||
| -rw-r--r-- | libs/gui/include/gui/Flags.h | 26 | ||||
| -rw-r--r-- | libs/gui/include/gui/view/Surface.h | 16 | ||||
| -rw-r--r-- | libs/gui/view/Surface.cpp | 4 |
5 files changed, 117 insertions, 3 deletions
diff --git a/libs/gui/Android.bp b/libs/gui/Android.bp index 1e33abbdea..052b519db6 100644 --- a/libs/gui/Android.bp +++ b/libs/gui/Android.bp @@ -264,6 +264,7 @@ filegroup { "DisplayEventDispatcher.cpp", "DisplayEventReceiver.cpp", "FenceMonitor.cpp", + "Flags.cpp", "GLConsumer.cpp", "IConsumerListener.cpp", "IGraphicBufferConsumer.cpp", diff --git a/libs/gui/Flags.cpp b/libs/gui/Flags.cpp new file mode 100644 index 0000000000..85ee2cddad --- /dev/null +++ b/libs/gui/Flags.cpp @@ -0,0 +1,73 @@ +/* + * 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 diff --git a/libs/gui/include/gui/Flags.h b/libs/gui/include/gui/Flags.h index 34350d2c91..845bc54c71 100644 --- a/libs/gui/include/gui/Flags.h +++ b/libs/gui/include/gui/Flags.h @@ -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; -#endif
\ No newline at end of file +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 diff --git a/libs/gui/include/gui/view/Surface.h b/libs/gui/include/gui/view/Surface.h index 7c762d3869..bd8704ddc7 100644 --- a/libs/gui/include/gui/view/Surface.h +++ b/libs/gui/include/gui/view/Surface.h @@ -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; diff --git a/libs/gui/view/Surface.cpp b/libs/gui/view/Surface.cpp index 9f57923886..2cf7081ede 100644 --- a/libs/gui/view/Surface.cpp +++ b/libs/gui/view/Surface.cpp @@ -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 { |