/* * This file is part of Aptdec. * Copyright (c) 2004-2009 Thierry Leconte (F4DWV), Xerbo (xerbo@protonmail.com) 2019-2022 * Copyright (c) 2021 Jon Beniston (M7RCE) * * Aptdec is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifndef APT_H #define APT_H #ifdef __cplusplus extern "C" { #endif #if defined(__GNUC__) && (__GNUC__ >= 4) #define APT_API __attribute__((visibility("default"))) #elif defined(_MSC_VER) #ifdef APT_API_EXPORT #define APT_API __declspec(dllexport) #elif APT_API_STATIC #define APT_API #else if #define APT_API __declspec(dllimport) #endif #else #define APT_API #endif // Maximum height of an APT image in number of rows #define APT_MAX_HEIGHT 3000 // Width in pixels of sync #define APT_SYNC_WIDTH 39 // Width in pixels of space #define APT_SPC_WIDTH 47 // Width in pixels of telemetry #define APT_TELE_WIDTH 45 // Width in pixels of a single channel image #define APT_CH_WIDTH 909 #define APT_FRAME_LEN 128 #define APT_CH_OFFSET (APT_SYNC_WIDTH + APT_SPC_WIDTH + APT_CH_WIDTH + APT_TELE_WIDTH) // Width in pixels of full frame, including sync, space, images and telemetry #define APT_IMG_WIDTH 2080 // Offset in pixels to channel A #define APT_CHA_OFFSET (APT_SYNC_WIDTH + APT_SPC_WIDTH) // Offset in pixels to channel B #define APT_CHB_OFFSET (APT_SYNC_WIDTH + APT_SPC_WIDTH + APT_CH_WIDTH + APT_TELE_WIDTH + APT_SYNC_WIDTH + APT_SPC_WIDTH) #define APT_TOTAL_TELE (APT_SYNC_WIDTH + APT_SPC_WIDTH + APT_TELE_WIDTH + APT_SYNC_WIDTH + APT_SPC_WIDTH + APT_TELE_WIDTH) // Number of rows required for apt_calibrate #define APT_CALIBRATION_ROWS 192 // Channel ID returned by apt_calibrate // NOAA-15: https://nssdc.gsfc.nasa.gov/nmc/experiment/display.action?id=1998-030A-01 // Channel 1: visible (0.58-0.68 um) // Channel 2: near-IR (0.725-1.0 um) // Channel 3A: near-IR (1.58-1.64 um) // Channel 3B: mid-infrared (3.55-3.93 um) // Channel 4: thermal-infrared (10.3-11.3 um) // Channel 5: thermal-infrared (11.5-12.5 um) typedef enum apt_channel { APT_CHANNEL_UNKNOWN, APT_CHANNEL_1, APT_CHANNEL_2, APT_CHANNEL_3A, APT_CHANNEL_4, APT_CHANNEL_5, APT_CHANNEL_3B } apt_channel_t; // Width in elements of apt_image_t.prow arrays #define APT_PROW_WIDTH 2150 // apt_getpixelrow callback function to get audio samples. // context is the same as passed to apt_getpixelrow. typedef int (*apt_getsamples_t)(void *context, float *samples, int count); typedef struct { float *prow[APT_MAX_HEIGHT]; // Row buffers int nrow; // Number of rows int zenith; // Row in image where satellite reaches peak elevation apt_channel_t chA, chB; // ID of each channel char name[256]; // Stripped filename char *palette; // Filename of palette } apt_image_t; typedef struct { float r, g, b; } apt_rgb_t; int APT_API apt_init(double sample_rate); int APT_API apt_getpixelrow(float *pixelv, int nrow, int *zenith, int reset, apt_getsamples_t getsamples, void *context); void APT_API apt_histogramEqualise(float **prow, int nrow, int offset, int width); void APT_API apt_linearEnhance(float **prow, int nrow, int offset, int width); apt_channel_t APT_API apt_calibrate(float **prow, int nrow, int offset, int width); void APT_API apt_denoise(float **prow, int nrow, int offset, int width); void APT_API apt_flipImage(apt_image_t *img, int width, int offset); int APT_API apt_cropNoise(apt_image_t *img); void APT_API apt_calibrate_thermal(int satnum, apt_image_t *img, int offset, int width); void APT_API apt_calibrate_visible(int satnum, apt_image_t *img, int offset, int width); // Moved to apt_calibrate_thermal #define apt_temperature apt_calibrate_thermal apt_rgb_t APT_API apt_applyPalette(char *palette, int val); apt_rgb_t APT_API apt_RGBcomposite(apt_rgb_t top, float top_a, apt_rgb_t bottom, float bottom_a); extern char APT_API apt_TempPalette[256 * 3]; extern char APT_API apt_PrecipPalette[58 * 3]; #ifdef __cplusplus } #endif #endif