blob: b48ca376fd1acbf62fc0a5bf5d553d5b050f7111 [file] [log] [blame]
// Copyright 2018 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_TESTING_CLIENT_UTILS_IMAGE_H_
#define SRC_GRAPHICS_DISPLAY_TESTING_CLIENT_UTILS_IMAGE_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 <lib/zx/channel.h>
#include <lib/zx/event.h>
#include <zircon/types.h>
#include "src/graphics/display/lib/api-types-cpp/buffer-collection-id.h"
#include "src/graphics/display/lib/api-types-cpp/event-id.h"
#include "src/graphics/display/lib/api-types-cpp/image-id.h"
// Indicies into event and event_ids
#define WAIT_EVENT 0
#define SIGNAL_EVENT 1
namespace display_test {
typedef struct image_import {
display::ImageId id;
zx::event events[2];
display::EventId event_ids[2];
} image_import_t;
class Image {
public:
enum class Pattern {
kCheckerboard,
kBorder,
};
static Image* Create(const fidl::WireSyncClient<fuchsia_hardware_display::Coordinator>& dc,
uint32_t width, uint32_t height, fuchsia_images2::wire::PixelFormat format,
Pattern pattern, uint32_t fg_color, uint32_t bg_color,
fuchsia_images2::wire::PixelFormatModifier modifier);
void Render(int32_t prev_step, int32_t step_num);
void* buffer() { return buf_; }
uint32_t width() { return width_; }
uint32_t height() { return height_; }
uint32_t stride() { return stride_; }
fuchsia_images2::wire::PixelFormat format() { return format_; }
fuchsia_images2::wire::PixelFormatModifier modifier() const { return modifier_; }
fuchsia_hardware_display_types::wire::ImageMetadata GetMetadata() const;
bool Import(const fidl::WireSyncClient<fuchsia_hardware_display::Coordinator>& dc,
display::ImageId image_id, image_import_t* info_out) const;
private:
Image(uint32_t width, uint32_t height, int32_t stride, fuchsia_images2::wire::PixelFormat format,
display::BufferCollectionId buffer_collection_id, void* buf, Pattern pattern,
uint32_t fg_color, uint32_t bg_color, fuchsia_images2::wire::PixelFormatModifier modifier);
void RenderNv12(int32_t prev_step, int32_t step_num);
// pixel_generator takes a width and a height and generates a uint32_t pixel color for it.
template <typename T>
void RenderLinear(T pixel_generator, uint32_t start_y, uint32_t end_y);
template <typename T>
void RenderTiled(T pixel_generator, uint32_t start_y, uint32_t end_y);
uint32_t width_;
uint32_t height_;
uint32_t stride_;
fuchsia_images2::wire::PixelFormat format_;
display::BufferCollectionId buffer_collection_id_;
void* buf_;
const Pattern pattern_;
uint32_t fg_color_;
uint32_t bg_color_;
fuchsia_images2::PixelFormatModifier modifier_;
};
} // namespace display_test
#endif // SRC_GRAPHICS_DISPLAY_TESTING_CLIENT_UTILS_IMAGE_H_