57static const char*
s_tag =
"VIN";
126typedef enum : uint8_t {
147typedef enum : uint16_t {
257 *mc_reg = (*mc_reg & ~clear_mask) | set_bits;
353 const uint32_t mc_now = *mc_reg;
354 const uint32_t fc_now = *fc_reg;
383 const uint32_t mc_now = *mc_reg;
501 uint32_t scle_bits = 0UL;
510 const uint8_t* cb_table,
511 const uint8_t* cr_table,
515 const uint8_t* cb = (cb_table !=
nullptr) ? cb_table : y_table;
516 const uint8_t* cr = (cr_table !=
nullptr) ? cr_table : y_table;
532 uint32_t lute_bits = 0UL;
598 }
else if (channel == 1U) {
649 uint32_t dc2_bits = 0UL;
743 if ((mb1 == 0U) && (mb2 == 0U) && (mb3 == 0U)) {
853 const uint32_t mask = *reg;
866 if (frame_fn !=
nullptr) {
903typedef enum : uint16_t {
911typedef enum : uint8_t {
966 if ((w == 0U) || (h == 0U)) {
969 const uint32_t pixel_end = (uint32_t)x + (uint32_t)w - 1U;
970 const uint32_t line_end = (uint32_t)y + (uint32_t)h - 1U;
976 .line_end = (uint16_t)line_end,
978 .pixel_end = (uint16_t)pixel_end,
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_ISR_SAFE
The function is callable from interrupt context.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_RETURN_ON_ERROR(err, tag, message)
Early return on error, propagating the code upward.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_invalid_state
Module in wrong state for requested operation.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Bounded wait-flag primitives for RA8D2 HAL drivers.
static ra8_err_t ra8_hw_wait_flag_clear32(volatile const uint32_t *reg, uint32_t mask, uint32_t budget)
Spin until (*reg & mask) == 0 or budget runs out.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_info_val(tag, message, value)
RA8 log info val.
#define ra8_log_info(tag, message)
RA8 log info.
Ref-counted Module Stop Control wrapper for the RA8D2.
ra8_err_t ra8_mstp_enable(ra8_mstp_t id)
Reference-counted "ungate this peripheral" request.
ra8_err_t ra8_mstp_disable(ra8_mstp_t id)
Reference-counted "gate this peripheral" request.
@ k_ra8_mstp_mipi_csi
MSTPC17 MIPI CSI.
ra8_err_t ra8_vin_set_window(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
Programme a region-of-interest pre-clip window.
ra8_vin_local_t
File-scope magic-free constants.
@ k_ra8_vin_max_ymode
DMR.YMODE legal max (0..3).
@ k_ra8_vin_max_lsft
Setting 3 LSFT 5-bit max.
@ k_ra8_vin_max_yuv444
MC.YUV444 legal max.
@ k_ra8_vin_max_im
MC.IM legal max (0..2).
@ k_ra8_vin_max_vc_sel
CSI_IFMD.VC_SEL 4-bit max.
@ k_ra8_vin_max_dt
CSI_IFMD.DT 6-bit max.
@ k_ra8_vin_max_field_no
CSIFLD.FLD_NUM legal max.
@ k_ra8_vin_max_dtmd
DMR.DTMD legal max (0..2).
@ k_ra8_vin_max_clp
MC.CLP legal max (0..3 with 2 reserved).
@ k_ra8_vin_yc_chan_max
RGB-to-YC channel index max (0..2).
@ k_ra8_vin_max_dc
MC.DC legal max (0..2).
ra8_err_t ra8_vin_set_data_mode(const ra8_vin_data_mode_t *mode)
Programme the DMR (Data Mode Register).
ra8_err_t ra8_vin_set_yc_to_rgb(const ra8_vin_yc_to_rgb_t *coeffs)
Programme the YC -> RGB matrix coefficients (CSCE1..4).
static void * s_vin_frame_ctx
Context forwarded to s_vin_frame_fn.
ra8_err_t ra8_vin_deinit(void)
Tear down VIN: stop capture, mask interrupts, drop MSTP.
void ra8_vin_dispatch(void)
Snapshot INTS, fire callback, then W1C the latched bits.
static ra8_vin_frame_fn_t s_vin_frame_fn
Frame-end callback registered via ra8_vin_attach_frame_handler.
ra8_err_t ra8_vin_init(const ra8_vin_config_t *cfg)
Initialise VIN with the supplied descriptor.
static void * s_vin_frame_buf
Buffer base of the most recent ra8_vin_capture_start call.
static void internal_mc_rmw(uint32_t clear_mask, uint32_t set_bits)
Read-modify-write a single bit-field within MC.
ra8_err_t ra8_vin_enable_scaling(bool enable)
Toggle the MC.SCLE main scaling-enable bit.
static uint32_t s_vin_frame_len
Cached length (in bytes) of the most recent capture geometry.
ra8_err_t ra8_vin_set_uds_ctrl(const ra8_vin_uds_ctrl_t *ctrl)
Programme UDS interpolation control (UDS_CTRL).
ra8_err_t ra8_vin_set_scanline_compare(uint16_t line)
Programme the SI (Scanline Interrupt) compare register.
ra8_err_t ra8_vin_lut_program(const uint8_t *y_table, const uint8_t *cb_table, const uint8_t *cr_table, bool enable)
Programme all 256 entries of the Y / Cb / Cr conversion LUT.
ra8_vin_chan_offsets_t
Register offsets for one row of the RGB-to-YC matrix.
@ k_ra8_vin_yc_y_set3
RA8 vin yc y set3.
@ k_ra8_vin_yc_y_set1
RA8 vin yc y set1.
@ k_ra8_vin_yc_cb_set2
RA8 vin yc cb set2.
@ k_ra8_vin_yc_cr_set2
RA8 vin yc cr set2.
@ k_ra8_vin_yc_cb_set1
RA8 vin yc cb set1.
@ k_ra8_vin_yc_cb_set3
RA8 vin yc cb set3.
@ k_ra8_vin_yc_y_set2
RA8 vin yc y set2.
@ k_ra8_vin_yc_cr_set1
RA8 vin yc cr set1.
@ k_ra8_vin_yc_cr_set3
RA8 vin yc cr set3.
ra8_err_t ra8_vin_set_csi_input(const ra8_vin_csi_input_t *input)
Programme CSI_IFMD (virtual channel + data type + extension).
ra8_err_t ra8_vin_exit_stop(void)
Re-enable the VIN clock gate after ra8_vin_enter_stop.
ra8_err_t ra8_vin_set_preclip(const ra8_vin_preclip_t *window)
Programme the pre-clip window (SLPRC / ELPRC / SPPRC / EPPRC).
static void internal_yc_offsets(uint8_t channel, ra8_vin_off_t *off1, ra8_vin_off_t *off2, ra8_vin_off_t *off3)
Resolve the (set1, set2, set3) offset triple for one row.
ra8_err_t ra8_vin_set_interrupt_enable(uint32_t mask)
Update the IE (Interrupt Enable) mask at runtime.
ra8_err_t ra8_vin_set_field_detect(const ra8_vin_field_detect_t *detect)
Programme CSIFLD (field detection).
ra8_err_t ra8_vin_set_yuv444_mode(uint8_t mode)
Configure the YUV-444 conversion mode (MC.YUV444).
ra8_err_t ra8_vin_set_uds_scale(const ra8_vin_uds_scale_t *scale)
Programme the UDS scaling factor (UDS_SCALE).
ra8_err_t ra8_vin_enter_stop(void)
Quiesce VIN and disable its module-stop clock gate.
ra8_vin_capture_geom_t
Bounded geometry constants used by ra8_vin_capture_start.
@ k_ra8_vin_geom_max_dim
Hardware caps both axes at 4096.
static void * s_vin_ctx
Context value forwarded to s_vin_fn.
ra8_err_t ra8_vin_set_rgb_to_yc(uint8_t channel, const ra8_vin_rgb_to_yc_chan_t *row)
Programme one row of the RGB -> YC matrix.
ra8_err_t ra8_vin_capture_arm(ra8_vin_capture_mode_t mode)
Start a capture operation.
static uint32_t internal_compose_mc(const ra8_vin_config_t *cfg)
Encode a ra8_vin_config_t into the MC register value.
ra8_err_t ra8_vin_capture_start(void *buf, uint16_t w, uint16_t h, ra8_vin_input_fmt_t format)
Start a single-frame capture into buf with the supplied geometry.
ra8_err_t ra8_vin_capture_disarm(void)
Stop the current capture and drain outstanding AXI traffic.
static void internal_pulse_st(uint32_t mc_now)
Pulse MC.ST then absorb the >= 10 ICLK settling time.
static uint8_t internal_format_bpp(ra8_vin_input_fmt_t format)
ra8_err_t ra8_vin_get_line_count(uint16_t *out_count)
Read the LC (line count) register.
ra8_err_t ra8_vin_attach_handler(ra8_vin_event_fn_t fn, void *ctx)
Attach a VIN event callback (shared between status + error IRQs).
ra8_err_t ra8_vin_set_framebuffers(uint32_t mb1, uint32_t mb2, uint32_t mb3)
Re-programme MB1 / MB2 / MB3 (ping-pong framebuffers).
ra8_err_t ra8_vin_clear_status(uint32_t mask)
Clear write-1-to-clear bits in the INTS register.
ra8_vin_format_bpp_t
Bytes-per-pixel lookup for ra8_vin_input_fmt_t.
@ k_ra8_vin_bpp_rgb888
RGB888 packed in 32-bit cells.
@ k_ra8_vin_bpp_ycbcr422
4:2:2 packs to 2 bytes / pixel.
@ k_ra8_vin_bpp_raw8
RAW8 = 1 byte / pixel.
ra8_err_t ra8_vin_get_active_buffer(uint8_t *out_id)
Return the active framebuffer index from MS.FBS.
ra8_err_t ra8_vin_set_uv_offset(uint32_t uv_addr)
Programme UVAOF (UV plane address offset for YC-separated mode).
ra8_err_t ra8_vin_attach_frame_handler(ra8_vin_frame_fn_t fn, void *ctx)
Register the frame-end IRQ callback.
static ra8_vin_event_fn_t s_vin_fn
Registered VIN event callback (set by ra8_vin_attach_handler).
ra8_err_t ra8_vin_get_status(uint32_t *out_mask)
Snapshot the INTS register.
ra8_err_t ra8_vin_capture_stop(void)
Stop the in-flight capture started via ra8_vin_capture_start.
ra8_err_t ra8_vin_set_dithering(uint8_t mode, bool direction)
Configure the dithering mode (MC.DC + MC.DC2).
ra8_err_t ra8_vin_set_uds_passband(uint8_t v_bwidth, uint8_t h_bwidth)
Programme the UDS pass-band bandwidth (UDS_PASS_BWIDTH).
ra8_err_t ra8_vin_set_interlace_mode(uint8_t mode)
Set the interlace mode (MC.IM).
ra8_err_t ra8_vin_reset(void)
Issue a soft reset by re-running the MC.ST settle sequence.
ra8_err_t ra8_vin_set_uds_clip(uint16_t v_size, uint16_t h_size)
Programme the UDS output clipping (UDS_CLIP_SIZE).
ra8_err_t ra8_vin_get_module_status(ra8_vin_module_status_t *out_status)
Decode the MS register into a typed snapshot.
Video Input Module (VIN) driver – public API.
Video Input Module (VIN) register layout for the RA8D2.
@ k_ra8_vin_st_settle_reads
MC.ST settle read-backs.
@ k_ra8_vin_fc_cc
CC [1] Continuous frame capture mode.
@ k_ra8_vin_lutd_shift_ltydt
Y data byte shift.
@ k_ra8_vin_lutd_shift_ltcbdt
Cb data byte shift.
@ k_ra8_vin_lutd_shift_ltcrdt
Cr data byte shift.
@ k_ra8_vin_mtcstop_outstand
OUTSTAND[21:16] (R).
@ k_ra8_vin_mtcstop_req
STOPREQ [0].
@ k_ra8_vin_csce_mul_hi
High multiplier [29:16].
@ k_ra8_vin_csce_mul_lo
Low multiplier [13:0].
@ k_ra8_vin_dmr_shift_dtmd
DTMD[1:0] shift.
@ k_ra8_vin_dmr_shift_a8bit
A8BIT[31:24] shift.
@ k_ra8_vin_dmr_shift_ymode
YMODE[14:12] shift.
@ k_ra8_vin_uds_ctrl_amd
AMD [30] Advanced pixel cnt.
@ k_ra8_vin_uds_ctrl_bladv
BLADV [28] Advanced bilinear.
@ k_ra8_vin_uds_ctrl_bc
BC [20] Bilinear vs multi.
@ k_ra8_vin_uds_ctrl_ne_bcb
NE_BCB [16] B/Cb interp method.
@ k_ra8_vin_uds_ctrl_ne_gy
NE_GY [17] G/Y interp method.
@ k_ra8_vin_uds_ctrl_ne_rcr
NE_RCR [18] R/Cr interp method.
@ k_ra8_vin_csi_ifmd_shift_vc_sel
VC_SEL[3:0] shift.
@ k_ra8_vin_csi_ifmd_shift_dt
DT[13:8] shift.
@ k_ra8_vin_uds_scale_shift_vmant
VMANT[15:12] shift.
@ k_ra8_vin_uds_scale_shift_hmant
HMANT[31:28] shift.
@ k_ra8_vin_uds_scale_shift_hfrac
HFRAC[27:16] shift.
@ k_ra8_vin_uds_scale_shift_vfrac
VFRAC[11:0] shift.
@ k_ra8_vin_si_mask
SI[11:0] scanline match value.
@ k_ra8_vin_lc_mask
LC[11:0] line count.
@ k_ra8_vin_uds_bwidth_h
BWIDTH_H [22:16].
@ k_ra8_vin_uds_bwidth_v
BWIDTH_V [6:0].
ra8_vin_off_t
32-bit register offsets inside the VIN window.
@ k_ra8_vin_off_csifld
CSIFLD Field detect control.
@ k_ra8_vin_off_uvaof
UVAOF UV data address offset.
@ k_ra8_vin_off_lutp
LUTP LUT pointer (Y/Cb/Cr).
@ k_ra8_vin_off_csi_ifmd
CSI_IFMD CSI-2 interface mode.
@ k_ra8_vin_off_slprc
SLPRC Pre-clip start line.
@ k_ra8_vin_off_csce2
CSCE2 YC-to-RGB Y/CbCr subtraction.
@ k_ra8_vin_off_mb1
MB1 Memory base 1 (frame addr).
@ k_ra8_vin_off_crccr2
CRCCR2 RGB-to-Cr coeff G+B.
@ k_ra8_vin_off_lutd
LUTD LUT data (Y/Cb/Cr).
@ k_ra8_vin_off_fc
FC Frame capture register.
@ k_ra8_vin_off_cbccr2
CBCCR2 RGB-to-Cb coeff G+B.
@ k_ra8_vin_off_ints
INTS Interrupt status (W1C).
@ k_ra8_vin_off_uds_pass_bwidth
UDS_PASS_BWIDTH passband bandwidth.
@ k_ra8_vin_off_ie
IE Interrupt enable.
@ k_ra8_vin_off_epprc
EPPRC Pre-clip end pixel.
@ k_ra8_vin_off_csce4
CSCE4 YC-to-RGB Cb multiplication.
@ k_ra8_vin_off_mtcstop
MTCSTOP AXI transfer stop control.
@ k_ra8_vin_off_lc
LC Line count (R).
@ k_ra8_vin_off_mb2
MB2 Memory base 2 (frame addr).
@ k_ra8_vin_off_elprc
ELPRC Pre-clip end line.
@ k_ra8_vin_off_cbccr1
CBCCR1 RGB-to-Cb coeff R.
@ k_ra8_vin_off_mb3
MB3 Memory base 3 (frame addr).
@ k_ra8_vin_off_mc
MC Main control register.
@ k_ra8_vin_off_crccr1
CRCCR1 RGB-to-Cr coeff R.
@ k_ra8_vin_off_si
SI Scanline interrupt compare.
@ k_ra8_vin_off_ms
MS Module status (R).
@ k_ra8_vin_off_dmr
DMR Data mode register.
@ k_ra8_vin_off_uds_clip_size
UDS_CLIP_SIZE output clip size.
@ k_ra8_vin_off_yccr1
YCCR1 RGB-to-Y coeff R.
@ k_ra8_vin_off_yccr2
YCCR2 RGB-to-Y coeff G+B.
@ k_ra8_vin_off_is
IS Image stride.
@ k_ra8_vin_off_cbccr3
CBCCR3 RGB-to-Cb norm/shift.
@ k_ra8_vin_off_yccr3
YCCR3 RGB-to-Y norm/shift.
@ k_ra8_vin_off_csce1
CSCE1 YC-to-RGB Y multiplication.
@ k_ra8_vin_off_spprc
SPPRC Pre-clip start pixel.
@ k_ra8_vin_off_uds_ctrl
UDS_CTRL Scaling interpolation ctrl.
@ k_ra8_vin_off_csce3
CSCE3 YC-to-RGB Cr multiplication.
@ k_ra8_vin_off_crccr3
CRCCR3 RGB-to-Cr norm/shift.
@ k_ra8_vin_off_uds_scale
UDS_SCALE Scaling factor V/H.
@ k_ra8_vin_mb_align_mask
Reserved low bits (must be zero).
@ k_ra8_vin_lutd_ltydt
LTYDT [23:16] Y data byte.
@ k_ra8_vin_lutd_ltcbdt
LTCBDT [15:8] Cb data byte.
@ k_ra8_vin_lutd_ltcrdt
LTCRDT [7:0] Cr data byte.
@ k_ra8_vin_csce2_shift_ysub2
YSUB2[27:16] shift.
@ k_ra8_vin_lut_entries
LUT entry count for Y, Cb, and Cr.
@ k_ra8_vin_yc2_gp
Setting 2: G coeff [12:0].
@ k_ra8_vin_yc3_sft
Setting 3: shift-down volume [28:24].
@ k_ra8_vin_yc1_rp
Setting 1: R coeff [12:0].
@ k_ra8_vin_yc3_ap
Setting 3: additive offset [11:0].
@ k_ra8_vin_yc2_bp
Setting 2: B coeff [28:16].
@ k_ra8_vin_yc3_hen
Setting 3: round-off enable [23].
@ k_ra8_vin_csce2_csub2
CSUB2 [11:0].
@ k_ra8_vin_csce2_ysub2
YSUB2 [27:16].
@ k_ra8_vin_dmr_a8bit
A8BIT [31:24] ARGB-8888 alpha.
@ k_ra8_vin_dmr_bpsm
BPSM [4] Byte-swap mode.
@ k_ra8_vin_dmr_exrgb
EXRGB [8] Extend RGB to 32-bit.
@ k_ra8_vin_dmr_abit
ABIT [2] ARGB-1555 alpha bit.
@ k_ra8_vin_dmr_ymode
YMODE [14:12] YC transfer mode.
@ k_ra8_vin_dmr_dtmd
DTMD [1:0] Data conversion mode.
@ k_ra8_vin_dmr_yc_thr
YC_THR [11] YC data through mode.
@ k_ra8_vin_yccr_shift_sft
Setting 3 shift-down shift.
@ k_ra8_vin_yccr_shift_bp
Setting 2 B coeff shift.
@ k_ra8_vin_csi_ifmd_dt
DT [13:8] Data type.
@ k_ra8_vin_csi_ifmd_vc_sel
VC_SEL [3:0] Virtual channel.
@ k_ra8_vin_csi_ifmd_des0
DES0 [25] Data extension.
@ k_ra8_vin_uds_max_clip
12-bit clip-size max.
@ k_ra8_vin_uds_max_bw
7-bit pass-band width max.
@ k_ra8_vin_uds_max_mant
4-bit mantissa max value.
@ k_ra8_vin_uds_max_frac
12-bit fractional max value.
@ k_ra8_vin_preclip_mask
12-bit pre-clip count.
@ k_ra8_vin_uds_scale_hfrac
HFRAC [27:16] H scale frac.
@ k_ra8_vin_uds_scale_hmant
HMANT [31:28] H scale int.
@ k_ra8_vin_uds_scale_vfrac
VFRAC [11:0] V scale frac.
@ k_ra8_vin_uds_scale_vmant
VMANT [15:12] V scale int.
@ k_ra8_vin_lutp_ltypr
LTYPR [29:20] Y pointer.
@ k_ra8_vin_lutp_ltcrpr
LTCRPR [9:0] Cr pointer.
@ k_ra8_vin_lutp_ltcbpr
LTCBPR [19:10] Cb pointer.
@ k_ra8_vin_int_w1c_mask
FOS | ARES | FIS2.
@ k_ra8_vin_ms_ma
MA [16] Memory capture active.
@ k_ra8_vin_ms_av
AV [1] Active video.
@ k_ra8_vin_ms_fs
FS [2] Field status (0=odd,1=even).
@ k_ra8_vin_ms_ca
CA [0] Capture active.
@ k_ra8_vin_ms_fbs
FBS [4:3] Latest frame buffer id.
@ k_ra8_vin_ms_fms
FMS [20:19] External MB buffer status.
static volatile uint32_t * ra8_vin_reg32(ra8_vin_off_t off)
Pointer to a 32-bit register inside the VIN block.
@ k_ra8_vin_mc_shift_inf
INF[18:16] shift.
@ k_ra8_vin_mc_shift_im
IM[4:3] shift.
@ k_ra8_vin_mc_shift_clp
CLP[29:28] shift.
@ k_ra8_vin_mc_shift_dc
DC[15:14] shift.
@ k_ra8_vin_uds_bwidth_shift_v
BWIDTH_V[6:0] shift.
@ k_ra8_vin_uds_bwidth_shift_h
BWIDTH_H[22:16] shift.
@ k_ra8_vin_csce_shift_mul_hi
High multiplier shift.
@ k_ra8_vin_int_fme
[5] Frame memory write complete.
@ k_ra8_vin_ms_shift_fbs
FBS[4:3] shift.
@ k_ra8_vin_ms_shift_fms
FMS[20:19] shift.
@ k_ra8_vin_uds_clip_v
CL_VSIZE [11:0] .
@ k_ra8_vin_uds_clip_h
CL_HSIZE [27:16].
@ k_ra8_vin_csce1_ymul2
YMUL2 [13:0].
@ k_ra8_vin_csce1_round
ROUND [16].
@ k_ra8_vin_uds_clip_shift_v
CL_VSIZE shift.
@ k_ra8_vin_uds_clip_shift_h
CL_HSIZE shift.
@ k_ra8_vin_mc_lute
LUTE [20] LUT enable.
@ k_ra8_vin_mc_clp
CLP [29:28] Pixel data clipping.
@ k_ra8_vin_mc_dc2
DC2 [24] Dithering direction.
@ k_ra8_vin_mc_im
IM [4:3] Interlace mode.
@ k_ra8_vin_mc_yuv444
YUV444[25] YUV444 conversion.
@ k_ra8_vin_mc_bps
BPS [1] Colour-space bypass.
@ k_ra8_vin_mc_en
EN [6] Endian (1 = big).
@ k_ra8_vin_mc_st
ST [22] Init at startup (W).
@ k_ra8_vin_mc_scle
SCLE [26] UDS scaling enable.
@ k_ra8_vin_mc_inf
INF [18:16] Input interface format.
@ k_ra8_vin_mc_dc
DC [15:14] Dithering mode.
@ k_ra8_vin_mc_me
ME [0] Module Enable.
@ k_ra8_vin_stop_drain_max
Max OUTSTAND poll iterations.
@ k_ra8_vin_csifld_fld_num
FLD_NUM [16] Even-field number.
@ k_ra8_vin_csifld_fld_sel
FLD_SEL [5:4] Even-field select.
@ k_ra8_vin_csifld_fld_en
FLD_EN [0] Field detect.
@ k_ra8_vin_lutp_shift_ltcbpr
Cb pointer shift.
@ k_ra8_vin_lutp_shift_ltcrpr
Cr pointer shift.
@ k_ra8_vin_lutp_shift_ltypr
Y pointer shift.
void(* ra8_vin_frame_fn_t)(void *ctx, void *buf, uint32_t len)
Frame-end callback registered via ra8_vin_attach_frame_handler.
ra8_vin_capture_mode_t
Single frame vs.
@ k_ra8_vin_capture_continuous_field_skip
Continuous, honour IM mode.
@ k_ra8_vin_capture_continuous
Roll MB1 -> MB2 -> MB3 ->.
@ k_ra8_vin_capture_single
Capture one frame into MB1.
ra8_vin_input_fmt_t
Camera input format for the MC.INF[2:0] field.
@ k_ra8_vin_input_raw8
RAW8 user-defined data.
@ k_ra8_vin_input_rgb888
24-bit RGB888.
void(* ra8_vin_event_fn_t)(void *ctx, uint32_t status_mask)
VIN event callback (frame complete / overflow / VSYNC).
Initial configuration for ra8_vin_init.
bool bypass_csc
MC.BPS: skip colour conversion.
uint32_t framebuffer_addr_1
MB1 (must be 64-byte aligned).
uint8_t pixel_clip_mode
MC.CLP (ra8_vin_clp_value_t).
uint32_t interrupt_enable
IE register mask.
uint8_t interlace_mode
MC.IM (ra8_vin_im_value_t).
bool big_endian
MC.EN: pack big-endian to memory.
uint32_t framebuffer_addr_2
MB2 (continuous mode only).
uint16_t scanline_compare
SI register; 0 disables.
ra8_vin_input_fmt_t input_fmt
MC.INF: input format.
uint32_t framebuffer_addr_3
MB3 (continuous mode only).
uint16_t image_stride_px
IS register, in pixels.
Decoded view of the DMR (Data Mode) register.
bool alpha_bit
ABIT for ARGB-1555 alpha.
uint8_t alpha_byte
A8BIT ARGB-8888 alpha byte.
uint8_t y_mode
YMODE (ra8_vin_ymode_value_t).
bool extend_rgb
EXRGB pad RGB to 32 bits.
bool byte_swap
BPSM swap output bytes.
uint8_t conv_mode
DTMD (ra8_vin_dtmd_value_t).
bool yc_through
YC_THR YC pass-through mode.
uint8_t even_field_num
FLD_NUM (ra8_vin_field_polarity_t).
bool even_field_sel
FLD_SEL (bit-4 of FLD_SEL[5:4]).
Decoded snapshot of the MS (Module Status) register.
bool even_field
MS.FS (1 -> even).
bool capture_active
MS.CA.
uint8_t latest_frame_buffer
MS.FMS.
uint8_t frame_buffer_id
MS.FBS.
Pre-clip window (SLPRC / ELPRC / SPPRC / EPPRC).
uint16_t pixel_start
SPPRC: first pixel within each line.
uint16_t line_end
ELPRC: last line that survives the clip.
uint16_t pixel_end
EPPRC: last pixel within each line.
uint16_t line_start
SLPRC: first line that survives the clip.
One RGB-to-YC matrix row (Y, Cb, or Cr).
uint16_t b_coeff
Setting 2 B coefficient.
uint16_t r_coeff
Setting 1 R coefficient.
uint16_t add_offset
Setting 3 additive offset (LAP).
uint16_t g_coeff
Setting 2 G coefficient.
uint8_t shift_down
Setting 3 shift-down volume (LSFT, 5-bit).
bool enable_hen
Setting 3 round-off enable (LHEN).
UDS interpolation control bits.
bool r_cr_nearest
NE_RCR: 1 = nearest-neighbour for R/Cr.
bool advanced_bl
BLADV: advanced bilinear-mode tweak.
bool b_cb_nearest
NE_BCB: 1 = nearest-neighbour for B/Cb.
bool multitap
BC: 1 = multi-tap, 0 = bilinear/nearest.
bool advanced_amd
AMD: advanced pixel-count formula.
bool g_y_nearest
NE_GY: 1 = nearest-neighbour for G/Y.
UDS scaling factors for the V and H axes.
uint8_t v_mantissa
VMANT[3:0].
uint8_t h_mantissa
HMANT[3:0].
uint16_t v_fraction
VFRAC[11:0].
uint16_t h_fraction
HFRAC[11:0].
Coefficients for the YC -> RGB matrix (CSCEn).
uint16_t cb_mul_lo
CSCE4 low [13:0].
uint16_t cb_mul_hi
CSCE4 high[29:16].
bool enable_round
ROUND[16].
uint16_t cr_mul_hi
CSCE3 high[29:16].
uint16_t cr_mul_lo
CSCE3 low [13:0].
uint16_t y_multiplier
YMUL2[13:0].
uint16_t cbcr_sub
CSUB2[11:0].
uint16_t y_sub
YSUB2[27:16].