ogl_beamforming

Ultrasound Beamforming Implemented with OpenGL
git clone anongit@rnpnr.xyz:ogl_beamforming.git
Log | Files | Refs | Feed | Submodules | README | LICENSE

zemp_bp.h (8258B)


      1 /*
      2  * ISC License (ISC)
      3  *
      4  * © 2024-2026 Randy Palamar <randy@rnpnr.xyz>
      5  *
      6  * Permission to use, copy, modify, and distribute this software for any
      7  * purpose with or without fee is hereby granted, provided that the above
      8  * copyright notice and this permission notice appear in all copies.
      9  *
     10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     17  */
     18 
     19 // GENERATED CODE
     20 
     21 #include <stdint.h>
     22 
     23 #define ZBP_HeaderMagic     (0x5042504d455afecaULL)
     24 #define ZBP_OffsetAlignment (0x04U)
     25 
     26 typedef enum {
     27 	ZBP_RCAOrientation_None    = 0,
     28 	ZBP_RCAOrientation_Rows    = 1,
     29 	ZBP_RCAOrientation_Columns = 2,
     30 	ZBP_RCAOrientation_Count,
     31 } ZBP_RCAOrientation;
     32 
     33 typedef enum {
     34 	ZBP_DecodeMode_None     = 0,
     35 	ZBP_DecodeMode_Hadamard = 1,
     36 	ZBP_DecodeMode_Walsh    = 2,
     37 	ZBP_DecodeMode_Count,
     38 } ZBP_DecodeMode;
     39 
     40 typedef enum {
     41 	ZBP_SamplingMode_Standard = 0,
     42 	ZBP_SamplingMode_Bandpass = 1,
     43 	ZBP_SamplingMode_Count,
     44 } ZBP_SamplingMode;
     45 
     46 typedef enum {
     47 	ZBP_AcquisitionKind_FORCES         = 0,
     48 	ZBP_AcquisitionKind_UFORCES        = 1,
     49 	ZBP_AcquisitionKind_HERCULES       = 2,
     50 	ZBP_AcquisitionKind_RCA_VLS        = 3,
     51 	ZBP_AcquisitionKind_RCA_TPW        = 4,
     52 	ZBP_AcquisitionKind_UHERCULES      = 5,
     53 	ZBP_AcquisitionKind_RACES          = 6,
     54 	ZBP_AcquisitionKind_EPIC_FORCES    = 7,
     55 	ZBP_AcquisitionKind_EPIC_UFORCES   = 8,
     56 	ZBP_AcquisitionKind_EPIC_UHERCULES = 9,
     57 	ZBP_AcquisitionKind_Flash          = 10,
     58 	ZBP_AcquisitionKind_HERO_PA        = 11,
     59 	ZBP_AcquisitionKind_HEXDoppler     = 12,
     60 	ZBP_AcquisitionKind_XDoppler       = 13,
     61 	ZBP_AcquisitionKind_Count,
     62 } ZBP_AcquisitionKind;
     63 
     64 typedef enum {
     65 	ZBP_ContrastMode_None = 0,
     66 	ZBP_ContrastMode_A1S2 = 1,
     67 	ZBP_ContrastMode_A2   = 2,
     68 	ZBP_ContrastMode_Count,
     69 } ZBP_ContrastMode;
     70 
     71 typedef enum {
     72 	ZBP_EmissionKind_Sine  = 0,
     73 	ZBP_EmissionKind_Chirp = 1,
     74 	ZBP_EmissionKind_Count,
     75 } ZBP_EmissionKind;
     76 
     77 typedef enum {
     78 	ZBP_DataKind_Int16          = 0,
     79 	ZBP_DataKind_Int16Complex   = 1,
     80 	ZBP_DataKind_Float32        = 2,
     81 	ZBP_DataKind_Float32Complex = 3,
     82 	ZBP_DataKind_Float16        = 4,
     83 	ZBP_DataKind_Float16Complex = 5,
     84 	ZBP_DataKind_Count,
     85 } ZBP_DataKind;
     86 
     87 typedef enum {
     88 	ZBP_DataCompressionKind_None = 0,
     89 	ZBP_DataCompressionKind_ZSTD = 1,
     90 	ZBP_DataCompressionKind_Count,
     91 } ZBP_DataCompressionKind;
     92 
     93 typedef enum {
     94 	ZBP_ContrastDataFlags_Reduced = 1 << 0,
     95 } ZBP_ContrastDataFlags;
     96 
     97 typedef struct ZBP_BaseHeader {
     98 	uint64_t magic;
     99 	uint32_t major;
    100 	uint32_t minor;
    101 } ZBP_BaseHeader;
    102 
    103 typedef struct ZBP_HeaderV1 {
    104 	uint64_t magic;
    105 	uint32_t version;
    106 	int16_t  decode_mode;
    107 	int16_t  beamform_mode;
    108 	uint32_t raw_data_dimension[4];
    109 	uint32_t sample_count;
    110 	uint32_t channel_count;
    111 	uint32_t receive_event_count;
    112 	uint32_t frame_count;
    113 	float    transducer_element_pitch[2];
    114 	float    transducer_transform_matrix[16];
    115 	int16_t  channel_mapping[256];
    116 	float    steering_angles[256];
    117 	float    focal_depths[256];
    118 	int16_t  sparse_elements[256];
    119 	int16_t  hadamard_rows[256];
    120 	float    speed_of_sound;
    121 	float    demodulation_frequency;
    122 	float    sampling_frequency;
    123 	float    time_offset;
    124 	uint32_t transmit_mode;
    125 } ZBP_HeaderV1;
    126 
    127 typedef struct ZBP_HeaderV2 {
    128 	uint64_t                magic;
    129 	uint32_t                major;
    130 	uint32_t                minor;
    131 	uint32_t                raw_data_dimension[4];
    132 	ZBP_DataKind            raw_data_kind;
    133 	int32_t                 raw_data_offset;
    134 	ZBP_DataCompressionKind raw_data_compression_kind;
    135 	ZBP_DecodeMode          decode_mode;
    136 	ZBP_SamplingMode        sampling_mode;
    137 	float                   sampling_frequency;
    138 	float                   demodulation_frequency;
    139 	float                   speed_of_sound;
    140 	int32_t                 channel_mapping_offset;
    141 	uint32_t                sample_count;
    142 	uint32_t                channel_count;
    143 	uint32_t                receive_event_count;
    144 	float                   transducer_transform_matrix[16];
    145 	float                   transducer_element_pitch[2];
    146 	float                   time_offset;
    147 	float                   group_acquisition_time;
    148 	float                   ensemble_repetition_interval;
    149 	ZBP_AcquisitionKind     acquisition_mode;
    150 	int32_t                 acquisition_parameters_offset;
    151 	ZBP_ContrastMode        contrast_mode;
    152 	int32_t                 contrast_parameters_offset;
    153 	int32_t                 emission_descriptors_offset;
    154 } ZBP_HeaderV2;
    155 
    156 typedef struct ZBP_HeaderV3 {
    157 	uint64_t                magic;
    158 	uint32_t                major;
    159 	uint32_t                minor;
    160 	uint32_t                raw_data_dimension[4];
    161 	uint64_t                raw_data_size;
    162 	int32_t                 raw_data_offset;
    163 	ZBP_DataKind            raw_data_kind;
    164 	ZBP_DataCompressionKind raw_data_compression_kind;
    165 	int32_t                 raw_data_layout_offset;
    166 	ZBP_DecodeMode          decode_mode;
    167 	ZBP_SamplingMode        sampling_mode;
    168 	float                   sampling_frequency;
    169 	float                   speed_of_sound;
    170 	int32_t                 channel_mapping_offset;
    171 	uint32_t                sample_count;
    172 	uint32_t                channel_count;
    173 	uint32_t                receive_event_count;
    174 	uint32_t                transducer_tile_count[2];
    175 	float                   transducer_element_pitch[2];
    176 	float                   group_acquisition_time;
    177 	float                   ensemble_repetition_interval;
    178 	ZBP_AcquisitionKind     acquisition_mode;
    179 	int32_t                 acquisition_parameters_offset;
    180 	ZBP_ContrastMode        contrast_mode;
    181 	uint32_t                contrast_data_flags;
    182 	int32_t                 contrast_parameters_offset;
    183 	int32_t                 emission_descriptors_offset;
    184 	int32_t                 time_delays_offset;
    185 	int32_t                 demodulation_frequencies_offset;
    186 	int32_t                 transducer_transforms_offset;
    187 	uint32_t                string_count;
    188 	int32_t                 string_table_offset;
    189 	int32_t                 format_extension_offset;
    190 } ZBP_HeaderV3;
    191 
    192 typedef struct ZBP_StringTableEntry {
    193 	uint32_t string_tag_length;
    194 	int32_t  string_tag_offset;
    195 	uint32_t string_length;
    196 	int32_t  string_offset;
    197 } ZBP_StringTableEntry;
    198 
    199 typedef struct ZBP_EmissionDescriptor {
    200 	ZBP_EmissionKind emission_kind;
    201 	int32_t          parameters_offset;
    202 } ZBP_EmissionDescriptor;
    203 
    204 typedef struct ZBP_EmissionSineParameters {
    205 	float cycles;
    206 	float frequency;
    207 } ZBP_EmissionSineParameters;
    208 
    209 typedef struct ZBP_EmissionChirpParameters {
    210 	float duration;
    211 	float min_frequency;
    212 	float max_frequency;
    213 } ZBP_EmissionChirpParameters;
    214 
    215 typedef struct ZBP_RCATransmitFocus {
    216 	float    focal_depth;
    217 	float    steering_angle;
    218 	float    origin_offset;
    219 	uint32_t transmit_receive_orientation;
    220 } ZBP_RCATransmitFocus;
    221 
    222 typedef struct ZBP_FORCESParameters {
    223 	ZBP_RCATransmitFocus transmit_focus;
    224 } ZBP_FORCESParameters;
    225 
    226 typedef struct ZBP_uFORCESParameters {
    227 	ZBP_RCATransmitFocus transmit_focus;
    228 	int32_t              sparse_elements_offset;
    229 } ZBP_uFORCESParameters;
    230 
    231 typedef struct ZBP_HERCULESParameters {
    232 	ZBP_RCATransmitFocus transmit_focus;
    233 } ZBP_HERCULESParameters;
    234 
    235 typedef struct ZBP_uHERCULESParameters {
    236 	ZBP_RCATransmitFocus transmit_focus;
    237 	int32_t              sparse_elements_offset;
    238 } ZBP_uHERCULESParameters;
    239 
    240 typedef struct ZBP_TPWParameters {
    241 	int32_t tilting_angles_offset;
    242 	int32_t transmit_receive_orientations_offset;
    243 } ZBP_TPWParameters;
    244 
    245 typedef struct ZBP_VLSParameters {
    246 	int32_t focal_depths_offset;
    247 	int32_t origin_offsets_offset;
    248 	int32_t transmit_receive_orientations_offset;
    249 } ZBP_VLSParameters;
    250 
    251 typedef struct ZBP_HERO_PAParameters {
    252 	uint32_t transmit_receive_orientation;
    253 } ZBP_HERO_PAParameters;
    254 
    255 typedef struct ZBP_HEXDopplerParameters {
    256 	int32_t bin_count[2];
    257 	int32_t bin_size[2];
    258 } ZBP_HEXDopplerParameters;
    259 
    260 typedef struct ZBP_XDopplerParameters {
    261 	int32_t angle_count[2];
    262 	int32_t tilting_angles_offset;
    263 } ZBP_XDopplerParameters;
    264 
    265 typedef struct ZBP_EPIC_FORCESParameters {
    266 	int32_t transmit_foci_offset;
    267 } ZBP_EPIC_FORCESParameters;