2026-03-13 22:42:57 +08:00

75 lines
2.4 KiB
C

/**
* @file qdx_preprocess.h
* @brief Zero-Copy Image Preprocessing for Thermal Imaging
*
* Includes Sliding Window Maximum/Average ROI search,
* Temperature filtering, and Data extraction.
*/
#ifndef QDX_PREPROCESS_H
#define QDX_PREPROCESS_H
#include "qdx_protocol.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Initialize static memory resources for sliding window calculations.
*
* Called once during system boot. Pre-allocates column accumulation arrays
* to prevent dynamic allocation during runtime.
*
* @param maxWidth The maximum supported width of the 2D input matrix
* @param maxHeight The maximum supported height of the 2D input matrix
* @return 0 on success, < 0 on failure.
*/
int8_t Preprocess_Init(uint16_t maxWidth, uint16_t maxHeight);
/**
* @brief Execute the preprocessing pipeline on a raw frame.
*
* High-performance processing logic that reads `input`, applies thresholds,
* finds the best `TargetWidth x TargetHeight` ROI using sliding window arrays,
* and extracts that region into `out_buffer` starting precisely at
* `HeadOffset`.
*
* @param input Raw thermal image array
* @param out_buffer Pre-allocated transmission buffer wrapper
* @param output_meta Struct to fill with process results/metadata
* @return 0 if successful, < 0 if aborted (e.g., config invalid)
*/
int8_t Preprocess_Execute(const RawImageBuffer_t *input,
TcpTxBuffer_t *out_buffer,
PreprocessResult_t *output_meta);
/**
* @brief Safely update internal preprocessing shadow parameters.
*
* @param newConfig2D Partial Configuration Update
* @param newConfig1D Partial Configuration Update
* @param newCommon General System Setup
* @return 0 on success.
*/
int8_t Preprocess_Settings_Change(const Config2D_t *newConfig2D,
const Config1D_t *newConfig1D,
const ConfigCommon_t *newCommon);
/**
* @brief Check if the current frame triggers the internal 2D capture condition
*
* Evaluates the specified TriggerRoi region using either Max or Average
* temperature against the TriggerTemperatureThreshold.
*
* @param input Raw thermal image array
* @return 1 if trigger condition is met, 0 if not met, < 0 on error.
*/
int8_t Preprocess_CheckInternalTrigger2D(const RawImageBuffer_t *input);
#ifdef __cplusplus
}
#endif
#endif /* QDX_PREPROCESS_H */