Skip to content

File stereo_frame.hpp

File List > data_format > stereo_frame.hpp

Go to the documentation of this file

#pragma once

#include "illixr/data_format/poses/pose_base.hpp"
#include "illixr/data_format/stereo_presentation.hpp"
#include "illixr/switchboard.hpp"

#include 
#include 
#include 
#include 
#include 
#include 

namespace ILLIXR::data_format {

enum class stereo_pixel_format : std::uint8_t {
    rgba8_unorm,
};

enum class stereo_image_origin : std::uint8_t {
    upper_left,
    lower_left,
};

struct stereo_shared_image {
    std::uint64_t byte_offset{0};
    std::uint64_t byte_count{0};
    std::uint32_t width{0};
    std::uint32_t height{0};
    std::uint32_t row_stride_bytes{0};
};

struct stereo_render_view : public pose::pose_base {
#ifdef USING_OPENXR
    stereo_render_view() {
        orientation.w = 1.0F;
    }
#endif

    float angle_left{0.0F};
    float angle_right{0.0F};
    float angle_up{0.0F};
    float angle_down{0.0F};

#ifdef USING_OPENXR
    bool valid{false};
#endif
};

struct stereo_overlay_command_range {
    std::uint64_t byte_offset{0};
    std::uint32_t command_count{0};
    std::uint32_t command_stride_floats{0};
};

struct stereo_modal_overlay {
    bool visible{false};
    bool left_valid{false};
    bool right_valid{false};

    std::uint64_t byte_offset{0};
    std::uint32_t width{0};
    std::uint32_t height{0};
    std::uint32_t source_row_stride_bytes{0};
    std::array<Eigen::Vector2f, 4> left_quad_pixels{};
    std::array<Eigen::Vector2f, 4> right_quad_pixels{};
    float width_m{0.0F};
    float height_m{0.0F};
};

struct stereo_frame : public switchboard::event {
    std::uint64_t sequence{0};
    time_point    sample_time{};
    std::uint64_t source_frame_id{0};

    stereo_pixel_format      format{stereo_pixel_format::rgba8_unorm};
    stereo_image_origin      origin{stereo_image_origin::upper_left};
    stereo_presentation_mode presentation_mode{stereo_presentation_mode::stereo_fullscreen};

    std::string         pixel_buffer_path;
    std::uint64_t       pixel_generation_offset{0};
    stereo_shared_image left;
    stereo_shared_image right;
    stereo_render_view  left_render_view;
    stereo_render_view  right_render_view;

    std::string                  overlay_buffer_path;
    std::uint64_t                overlay_generation_offset{0};
    stereo_overlay_command_range left_overlay_commands;
    stereo_overlay_command_range right_overlay_commands;

    std::string          modal_buffer_path;
    std::uint64_t        modal_generation_offset{0};
    stereo_modal_overlay modal;
};

} // namespace ILLIXR::data_format