| // Copyright 2023 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_GRAPHICS_DISPLAY_DRIVERS_COORDINATOR_MIGRATION_UTIL_H_ |
| #define SRC_GRAPHICS_DISPLAY_DRIVERS_COORDINATOR_MIGRATION_UTIL_H_ |
| |
| #include <fidl/fuchsia.hardware.display.types/cpp/wire.h> |
| #include <fidl/fuchsia.hardware.display/cpp/wire.h> |
| #include <fidl/fuchsia.images2/cpp/wire.h> |
| #include <fuchsia/hardware/display/controller/cpp/banjo.h> |
| #include <lib/stdcompat/span.h> |
| #include <lib/zx/result.h> |
| |
| #include <cstdint> |
| |
| #include <fbl/vector.h> |
| |
| namespace display { |
| |
| // Pixel format that the display coordinator can use internally. |
| struct CoordinatorPixelFormat { |
| public: |
| // Converts a pixel format value used in banjo fuchsia.hardware.display |
| // interface to a CoordinatorPixelFormat. The argument type must match |
| // the `pixel_format` fields used in banjo fuchsia.hardware.display interface. |
| static CoordinatorPixelFormat FromBanjo( |
| fuchsia_images2_pixel_format_enum_value_t banjo_pixel_format); |
| |
| // Creates a fbl::Vector containing converted pixel formats from a given |
| // banjo-typed Vector got from display engine drivers. Returned values may get |
| // de-duplicated. |
| static zx::result<fbl::Vector<CoordinatorPixelFormat>> CreateFblVectorFromBanjoVector( |
| cpp20::span<const fuchsia_images2_pixel_format_enum_value_t> banjo_pixel_formats); |
| |
| // Converts a CoordinatorPixelFormat to format used in FIDL fuchsia.hardware. |
| // display interface. The return type must match return the `pixel_format` |
| // fields used in FIDL fuchsia.hardware.display interface. |
| fuchsia_images2::wire::PixelFormat ToFidl() const; |
| |
| fuchsia_images2::wire::PixelFormat format; |
| }; |
| |
| constexpr bool operator==(const CoordinatorPixelFormat& lhs, const CoordinatorPixelFormat& rhs) { |
| return lhs.format == rhs.format; |
| } |
| |
| constexpr bool operator!=(const CoordinatorPixelFormat& lhs, const CoordinatorPixelFormat& rhs) { |
| return !(lhs == rhs); |
| } |
| |
| } // namespace display |
| |
| #endif // SRC_GRAPHICS_DISPLAY_DRIVERS_COORDINATOR_MIGRATION_UTIL_H_ |