/* SPDX-License-Identifier: BSD-2-Clause */ /* * daedalus-decoder — internal types shared across translation units. * Not installed; pure-internal. */ #ifndef DAEDALUS_DECODER_INTERNAL_H #define DAEDALUS_DECODER_INTERNAL_H #include "daedalus_decoder.h" #include #include #include /* daedalus-fourier public API */ /* Per-MB descriptor as the GPU sees it. Bit-laid-out to match the * shader's std430 layout. Kept narrow (32 bytes target) so a 1080p * frame's 8160 entries fit in ~256 KiB SSBO. * * TODO once the shaders exist: nail down the exact std430 layout and * static_assert sizeof / alignof here. */ struct daedalus_decoder_mb_desc { uint16_t mb_x; uint16_t mb_y; uint8_t mb_type; uint8_t mb_qp_y; uint8_t mb_qp_uv; uint8_t cbp; uint8_t intra_4x4_modes[16]; uint8_t intra_16x16_mode; uint8_t intra_chroma_mode; uint8_t partition_mode; uint8_t _pad0; int8_t ref_idx_l0[4]; int8_t ref_idx_l1[4]; int16_t mv_l0[4][2]; int16_t mv_l1[4][2]; uint8_t deblock_disable; int8_t deblock_alpha_c0; int8_t deblock_beta; uint8_t _pad1; }; struct daedalus_decoder { /* Geometry. */ int width; int height; int mb_width; /* width / 16 */ int mb_height; /* height / 16 */ int n_mbs; /* daedalus-fourier context (Vulkan + V3D7 runner). */ daedalus_ctx *dctx; /* Frame-shaped staging (CPU-side; will move to mapped SSBO once * Vulkan plumbing is in place). */ struct daedalus_decoder_mb_desc *mb_descs; /* n_mbs */ int16_t *coeffs; /* n_mbs * 384 */ int mbs_appended; /* per-frame count */ /* Output format. */ daedalus_decoder_output_format output_fmt; }; #endif /* DAEDALUS_DECODER_INTERNAL_H */