@@ -86,7 +86,7 @@ char *basename(const char *filename) { | |||||
#endif | #endif | ||||
int main(int argc, const char **argv) { | int main(int argc, const char **argv) { | ||||
char version[128]; | |||||
char version[128] = { 0 }; | |||||
get_version(version); | get_version(version); | ||||
printf("%s\n", version); | printf("%s\n", version); | ||||
// clang-format off | // clang-format off | ||||
@@ -166,7 +166,7 @@ int main(int argc, const char **argv) { | |||||
static int process_file(const char *path, options_t *opts) { | static int process_file(const char *path, options_t *opts) { | ||||
const char *path_basename = basename((char *)path); | const char *path_basename = basename((char *)path); | ||||
const char *dot = strrchr(path_basename, '.'); | const char *dot = strrchr(path_basename, '.'); | ||||
char name[256]; | |||||
char name[256] = { 0 }; | |||||
if (dot == NULL) { | if (dot == NULL) { | ||||
strncpy(name, path_basename, 255); | strncpy(name, path_basename, 255); | ||||
} else { | } else { | ||||
@@ -181,7 +181,7 @@ static int process_file(const char *path, options_t *opts) { | |||||
writer_t *realtime_png; | writer_t *realtime_png; | ||||
if (opts->realtime) { | if (opts->realtime) { | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-decoding.png", name); | sprintf(filename, "%s-decoding.png", name); | ||||
realtime_png = writer_init(filename, APT_REGION_FULL, APTDEC_MAX_HEIGHT, PNG_COLOR_TYPE_GRAY, "Unknown"); | realtime_png = writer_init(filename, APT_REGION_FULL, APTDEC_MAX_HEIGHT, PNG_COLOR_TYPE_GRAY, "Unknown"); | ||||
@@ -209,7 +209,7 @@ static int process_file(const char *path, options_t *opts) { | |||||
} | } | ||||
// Decode image | // Decode image | ||||
float *data = (float *)malloc(APT_IMG_WIDTH * (APTDEC_MAX_HEIGHT+1) * sizeof(float)); | |||||
float *data = calloc(APT_IMG_WIDTH * (APTDEC_MAX_HEIGHT+1), sizeof(float)); | |||||
size_t rows; | size_t rows; | ||||
for (rows = 0; rows < APTDEC_MAX_HEIGHT; rows++) { | for (rows = 0; rows < APTDEC_MAX_HEIGHT; rows++) { | ||||
float *row = &data[rows * APT_IMG_WIDTH]; | float *row = &data[rows * APT_IMG_WIDTH]; | ||||
@@ -238,7 +238,7 @@ static int process_file(const char *path, options_t *opts) { | |||||
writer_free(realtime_png); | writer_free(realtime_png); | ||||
#pragma GCC diagnostic pop | #pragma GCC diagnostic pop | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-decoding.png", name); | sprintf(filename, "%s-decoding.png", name); | ||||
remove(filename); | remove(filename); | ||||
} | } | ||||
@@ -294,9 +294,9 @@ static int process_file(const char *path, options_t *opts) { | |||||
if (strcmp(images[i], "thermal") == 0) { | if (strcmp(images[i], "thermal") == 0) { | ||||
if (img.ch[1] >= 4) { | if (img.ch[1] >= 4) { | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-thermal.png", base); | sprintf(filename, "%s-thermal.png", base); | ||||
char description[128]; | |||||
char description[128] = { 0 }; | |||||
sprintf(description, "Calibrated thermal image, channel %s - %s", channel_name[img.ch[1]], channel_desc[img.ch[1]]); | sprintf(description, "Calibrated thermal image, channel %s - %s", channel_name[img.ch[1]], channel_desc[img.ch[1]]); | ||||
// Perform visible calibration | // Perform visible calibration | ||||
@@ -313,9 +313,9 @@ static int process_file(const char *path, options_t *opts) { | |||||
} | } | ||||
} else if (strcmp(images[i], "visible") == 0) { | } else if (strcmp(images[i], "visible") == 0) { | ||||
if (img.ch[0] <= 2) { | if (img.ch[0] <= 2) { | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-visible.png", base); | sprintf(filename, "%s-visible.png", base); | ||||
char description[128]; | |||||
char description[128] = { 0 }; | |||||
sprintf(description, "Calibrated visible image, channel %s - %s", channel_name[img.ch[0]], channel_desc[img.ch[0]]); | sprintf(description, "Calibrated visible image, channel %s - %s", channel_name[img.ch[0]], channel_desc[img.ch[0]]); | ||||
// Perform visible calibration | // Perform visible calibration | ||||
@@ -352,9 +352,9 @@ static int process_file(const char *path, options_t *opts) { | |||||
} | } | ||||
if (strcmp(images[i], "raw") == 0) { | if (strcmp(images[i], "raw") == 0) { | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-raw.png", base); | sprintf(filename, "%s-raw.png", base); | ||||
char description[128]; | |||||
char description[128] = { 0 }; | |||||
sprintf(description, | sprintf(description, | ||||
"Raw image, channel %s - %s / %s - %s", | "Raw image, channel %s - %s / %s - %s", | ||||
channel_name[img.ch[0]], | channel_name[img.ch[0]], | ||||
@@ -376,9 +376,9 @@ static int process_file(const char *path, options_t *opts) { | |||||
writer_free(writer); | writer_free(writer); | ||||
} else if (strcmp(images[i], "lut") == 0) { | } else if (strcmp(images[i], "lut") == 0) { | ||||
if (opts->lut != NULL && opts->lut[0] != '\0') { | if (opts->lut != NULL && opts->lut[0] != '\0') { | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-lut.png", base); | sprintf(filename, "%s-lut.png", base); | ||||
char description[128]; | |||||
char description[128] = { 0 }; | |||||
sprintf(description, | sprintf(description, | ||||
"LUT image, channel %s - %s / %s - %s", | "LUT image, channel %s - %s / %s - %s", | ||||
channel_name[img.ch[0]], | channel_name[img.ch[0]], | ||||
@@ -387,7 +387,7 @@ static int process_file(const char *path, options_t *opts) { | |||||
channel_desc[img.ch[1]] | channel_desc[img.ch[1]] | ||||
); | ); | ||||
png_colorp lut = (png_colorp)malloc(sizeof(png_color)*256*256); | |||||
png_colorp lut = calloc(256*256, sizeof(png_color)); | |||||
if (read_lut(opts->lut, lut)) { | if (read_lut(opts->lut, lut)) { | ||||
writer_t *writer = writer_init(filename, APT_REGION_CHA, img.rows, PNG_COLOR_TYPE_RGB, description); | writer_t *writer = writer_init(filename, APT_REGION_CHA, img.rows, PNG_COLOR_TYPE_RGB, description); | ||||
writer_write_image_lut(writer, &img, lut); | writer_write_image_lut(writer, &img, lut); | ||||
@@ -398,9 +398,9 @@ static int process_file(const char *path, options_t *opts) { | |||||
warning("Cannot create LUT image, missing -l/--lut"); | warning("Cannot create LUT image, missing -l/--lut"); | ||||
} | } | ||||
} else if (strcmp(images[i], "a") == 0) { | } else if (strcmp(images[i], "a") == 0) { | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-a.png", base); | sprintf(filename, "%s-a.png", base); | ||||
char description[128]; | |||||
char description[128] = { 0 }; | |||||
sprintf(description, "Channel A: %s - %s", channel_name[img.ch[0]], channel_desc[img.ch[0]]); | sprintf(description, "Channel A: %s - %s", channel_name[img.ch[0]], channel_desc[img.ch[0]]); | ||||
writer_t *writer; | writer_t *writer; | ||||
@@ -415,9 +415,9 @@ static int process_file(const char *path, options_t *opts) { | |||||
} | } | ||||
writer_free(writer); | writer_free(writer); | ||||
} else if (strcmp(images[i], "b") == 0) { | } else if (strcmp(images[i], "b") == 0) { | ||||
char filename[269]; | |||||
char filename[269] = { 0 }; | |||||
sprintf(filename, "%s-b.png", base); | sprintf(filename, "%s-b.png", base); | ||||
char description[128]; | |||||
char description[128] = { 0 }; | |||||
sprintf(description, "Channel B: %s - %s", channel_name[img.ch[1]], channel_desc[img.ch[1]]); | sprintf(description, "Channel B: %s - %s", channel_name[img.ch[1]], channel_desc[img.ch[1]]); | ||||
writer_t *writer; | writer_t *writer; | ||||
@@ -517,7 +517,7 @@ static void write_line(writer_t *png, float *row) { | |||||
} | } | ||||
apt_image_t strip(apt_image_t img) { | apt_image_t strip(apt_image_t img) { | ||||
uint8_t *data = (uint8_t *)malloc(img.rows * APT_IMG_WIDTH); | |||||
uint8_t *data = calloc(img.rows * APT_IMG_WIDTH, sizeof(uint8_t)); | |||||
for (size_t y = 0; y < img.rows; y++) { | for (size_t y = 0; y < img.rows; y++) { | ||||
memcpy(&data[y*APT_IMG_WIDTH], &img.data[y*APT_IMG_WIDTH + APT_CHA_OFFSET], APT_CH_WIDTH); | memcpy(&data[y*APT_IMG_WIDTH], &img.data[y*APT_IMG_WIDTH + APT_CHA_OFFSET], APT_CH_WIDTH); | ||||
memcpy(&data[y*APT_IMG_WIDTH + APT_CH_WIDTH], &img.data[y*APT_IMG_WIDTH + APT_CHB_OFFSET], APT_CH_WIDTH); | memcpy(&data[y*APT_IMG_WIDTH + APT_CH_WIDTH], &img.data[y*APT_IMG_WIDTH + APT_CHB_OFFSET], APT_CH_WIDTH); | ||||
@@ -534,4 +534,4 @@ int array_contains(char **array, char *value, size_t n) { | |||||
} | } | ||||
} | } | ||||
return 0; | return 0; | ||||
} | |||||
} |
@@ -25,7 +25,7 @@ | |||||
#include "util.h" | #include "util.h" | ||||
writer_t *writer_init(const char *filename, apt_region_t region, uint32_t height, int color, char *channel) { | writer_t *writer_init(const char *filename, apt_region_t region, uint32_t height, int color, char *channel) { | ||||
writer_t *png = (writer_t *)malloc(sizeof(writer_t)); | |||||
writer_t *png = calloc(1, sizeof(writer_t)); | |||||
png->region = region; | png->region = region; | ||||
// Create writer | // Create writer | ||||
@@ -43,7 +43,7 @@ writer_t *writer_init(const char *filename, apt_region_t region, uint32_t height | |||||
png_set_IHDR(png->png, png->info, png->region.width, height, 8, color, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); | png_set_IHDR(png->png, png->info, png->region.width, height, 8, color, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); | ||||
char version[128]; | |||||
char version[128] = { 0 }; | |||||
int version_len = get_version(version); | int version_len = get_version(version); | ||||
png_text text[] = { | png_text text[] = { | ||||
@@ -74,11 +74,11 @@ char *aptdec_get_version(void) { | |||||
} | } | ||||
fir_t *fir_init(size_t max_size, size_t ntaps) { | fir_t *fir_init(size_t max_size, size_t ntaps) { | ||||
fir_t *fir = (fir_t *)malloc(sizeof(fir_t)); | |||||
fir_t *fir = calloc(1, sizeof(fir_t)); | |||||
fir->ntaps = ntaps; | fir->ntaps = ntaps; | ||||
fir->ring_size = max_size + ntaps; | fir->ring_size = max_size + ntaps; | ||||
fir->taps = (float *)malloc(ntaps * sizeof(float)); | |||||
fir->ring_buffer = (float *)malloc((max_size + ntaps) * sizeof(float)); | |||||
fir->taps = calloc(ntaps, sizeof(float)); | |||||
fir->ring_buffer = calloc(max_size + ntaps, sizeof(float)); | |||||
return fir; | return fir; | ||||
} | } | ||||
@@ -89,7 +89,7 @@ void fir_free(fir_t *fir) { | |||||
} | } | ||||
pll_t *pll_init(float alpha, float beta, float min_freq, float max_freq, float sample_rate) { | pll_t *pll_init(float alpha, float beta, float min_freq, float max_freq, float sample_rate) { | ||||
pll_t *pll = (pll_t *)malloc(sizeof(pll_t)); | |||||
pll_t *pll = calloc(1, sizeof(pll_t)); | |||||
pll->alpha = alpha; | pll->alpha = alpha; | ||||
pll->beta = beta; | pll->beta = beta; | ||||
pll->min_freq = M_TAUf * min_freq / sample_rate; | pll->min_freq = M_TAUf * min_freq / sample_rate; | ||||
@@ -104,9 +104,11 @@ aptdec_t *aptdec_init(float sample_rate) { | |||||
return NULL; | return NULL; | ||||
} | } | ||||
aptdec_t *apt = (aptdec_t *)malloc(sizeof(aptdec_t)); | |||||
aptdec_t *apt = calloc(1, sizeof(aptdec_t)); | |||||
apt->sample_rate = sample_rate; | apt->sample_rate = sample_rate; | ||||
apt->sync_frequency = 1.0f; | apt->sync_frequency = 1.0f; | ||||
apt->interpolator_n = APTDEC_BUFFER_SIZE; | |||||
apt->interpolator_offset = 0.0f; | |||||
// PLL configuration | // PLL configuration | ||||
// https://www.trondeau.com/blog/2011/8/13/control-loop-gain-values.html | // https://www.trondeau.com/blog/2011/8/13/control-loop-gain-values.html | ||||
@@ -102,7 +102,7 @@ void apt_stretch(apt_image_t *img, apt_region_t region) { | |||||
void apt_denoise(apt_image_t *img, apt_region_t region) { | void apt_denoise(apt_image_t *img, apt_region_t region) { | ||||
for (size_t y = 1; y < img->rows - 1; y++) { | for (size_t y = 1; y < img->rows - 1; y++) { | ||||
for (size_t x = 1; x < region.width - 1; x++) { | for (size_t x = 1; x < region.width - 1; x++) { | ||||
float pixels[9]; | |||||
float pixels[9] = { 0.0f }; | |||||
int pixeln = 0; | int pixeln = 0; | ||||
for (int y2 = -1; y2 < 2; y2++) { | for (int y2 = -1; y2 < 2; y2++) { | ||||
for (int x2 = -1; x2 < 2; x2++) { | for (int x2 = -1; x2 < 2; x2++) { | ||||
@@ -139,12 +139,12 @@ int apt_crop(apt_image_t *img) { | |||||
const float sync_pattern[] = {-1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, | const float sync_pattern[] = {-1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, | ||||
1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 0}; | 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 0}; | ||||
float *spc_rows = (float *)malloc(img->rows * sizeof(float)); | |||||
float *spc_rows = calloc(img->rows, sizeof(float)); | |||||
int startCrop = 0; | int startCrop = 0; | ||||
int endCrop = img->rows; | int endCrop = img->rows; | ||||
for (size_t y = 0; y < img->rows; y++) { | for (size_t y = 0; y < img->rows; y++) { | ||||
float temp[39]; | |||||
float temp[39] = { 0.0f }; | |||||
for (size_t i = 0; i < 39; i++) { | for (size_t i = 0; i < 39; i++) { | ||||
temp[i] = img->data[y * APT_IMG_WIDTH + i]; | temp[i] = img->data[y * APT_IMG_WIDTH + i]; | ||||
} | } | ||||
@@ -21,9 +21,9 @@ | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | #include <string.h> | ||||
#include <float.h> | #include <float.h> | ||||
#include <aptdec.h> | |||||
#include "algebra.h" | #include "algebra.h" | ||||
#include <aptdec.h> | |||||
#include "util.h" | #include "util.h" | ||||
#include "calibration.h" | #include "calibration.h" | ||||
@@ -31,14 +31,14 @@ | |||||
apt_image_t apt_image_clone(apt_image_t img) { | apt_image_t apt_image_clone(apt_image_t img) { | ||||
apt_image_t _img = img; | apt_image_t _img = img; | ||||
_img.data = (uint8_t *)malloc(APT_IMG_WIDTH * img.rows); | |||||
_img.data = calloc(APT_IMG_WIDTH * img.rows, sizeof(uint8_t)); | |||||
memcpy(_img.data, img.data, APT_IMG_WIDTH * img.rows); | memcpy(_img.data, img.data, APT_IMG_WIDTH * img.rows); | ||||
return _img; | return _img; | ||||
} | } | ||||
static void decode_telemetry(const float *data, size_t rows, size_t offset, float *wedges) { | static void decode_telemetry(const float *data, size_t rows, size_t offset, float *wedges) { | ||||
// Calculate row average | // Calculate row average | ||||
float *telemetry_rows = (float *)malloc(rows * sizeof(float)); | |||||
float *telemetry_rows = calloc(rows, sizeof(float)); | |||||
for (size_t y = 0; y < rows; y++) { | for (size_t y = 0; y < rows; y++) { | ||||
telemetry_rows[y] = meanf(&data[y*APT_IMG_WIDTH + offset + APT_CH_WIDTH], APT_TELEMETRY_WIDTH); | telemetry_rows[y] = meanf(&data[y*APT_IMG_WIDTH + offset + APT_CH_WIDTH], APT_TELEMETRY_WIDTH); | ||||
} | } | ||||
@@ -59,7 +59,7 @@ static void decode_telemetry(const float *data, size_t rows, size_t offset, floa | |||||
// Find the least noisy frame (via standard deviation) | // Find the least noisy frame (via standard deviation) | ||||
float best_noise = FLT_MAX; | float best_noise = FLT_MAX; | ||||
size_t best_frame = 0; | size_t best_frame = 0; | ||||
for (size_t y = telemetry_offset; y < rows; y += APT_FRAME_LEN) { | |||||
for (size_t y = telemetry_offset; y < rows-APT_FRAME_LEN; y += APT_FRAME_LEN) { | |||||
float noise = 0.0f; | float noise = 0.0f; | ||||
for (size_t i = 0; i < APT_FRAME_WEDGES; i++) { | for (size_t i = 0; i < APT_FRAME_WEDGES; i++) { | ||||
noise += standard_deviation(&telemetry_rows[y + i*APT_WEDGE_HEIGHT], APT_WEDGE_HEIGHT); | noise += standard_deviation(&telemetry_rows[y + i*APT_WEDGE_HEIGHT], APT_WEDGE_HEIGHT); | ||||
@@ -79,7 +79,7 @@ static void decode_telemetry(const float *data, size_t rows, size_t offset, floa | |||||
} | } | ||||
static float average_spc(apt_image_t *img, size_t offset) { | static float average_spc(apt_image_t *img, size_t offset) { | ||||
float *rows = (float *)malloc(img->rows * sizeof(float)); | |||||
float *rows = calloc(img->rows, sizeof(float)); | |||||
float average = 0.0f; | float average = 0.0f; | ||||
for (size_t y = 0; y < img->rows; y++) { | for (size_t y = 0; y < img->rows; y++) { | ||||
float row_average = 0.0f; | float row_average = 0.0f; | ||||
@@ -170,7 +170,7 @@ static void make_thermal_lut(apt_image_t *img, avhrr_channel_t ch, int satellite | |||||
const float B = calibration.rad[ch].B; | const float B = calibration.rad[ch].B; | ||||
// Compute PRT temperature | // Compute PRT temperature | ||||
float T[4]; | |||||
float T[4] = { 0.0f }; | |||||
for (size_t n = 0; n < 4; n++) { | for (size_t n = 0; n < 4; n++) { | ||||
T[n] = quadratic_calc(img->telemetry[1][n + 9] * APT_COUNT_RATIO, calibration.prt[n]); | T[n] = quadratic_calc(img->telemetry[1][n + 9] * APT_COUNT_RATIO, calibration.prt[n]); | ||||
} | } | ||||
@@ -201,7 +201,7 @@ int apt_calibrate_thermal(apt_image_t *img, apt_region_t region) { | |||||
return 1; | return 1; | ||||
} | } | ||||
float lut[256]; | |||||
float lut[256] = { 0.0f }; | |||||
make_thermal_lut(img, img->ch[1], img->satellite, lut); | make_thermal_lut(img, img->ch[1], img->satellite, lut); | ||||
for (size_t y = 0; y < img->rows; y++) { | for (size_t y = 0; y < img->rows; y++) { | ||||