Просмотр исходного кода

Initialize memory before use

v2
Xerbo 1 год назад
Родитель
Сommit
b2b049f727
Не найден GPG ключ соответствующий данной подписи Идентификатор GPG ключа: 34103F6D8F11CEB0
5 измененных файлов: 39 добавлений и 37 удалений
  1. +20
    -20
      aptdec-cli/main.c
  2. +2
    -2
      aptdec-cli/pngio.c
  3. +7
    -5
      libaptdec/dsp.c
  4. +3
    -3
      libaptdec/effects.c
  5. +7
    -7
      libaptdec/image.c

+ 20
- 20
aptdec-cli/main.c Просмотреть файл

@@ -86,7 +86,7 @@ char *basename(const char *filename) {
#endif

int main(int argc, const char **argv) {
char version[128];
char version[128] = { 0 };
get_version(version);
printf("%s\n", version);
// clang-format off
@@ -166,7 +166,7 @@ int main(int argc, const char **argv) {
static int process_file(const char *path, options_t *opts) {
const char *path_basename = basename((char *)path);
const char *dot = strrchr(path_basename, '.');
char name[256];
char name[256] = { 0 };
if (dot == NULL) {
strncpy(name, path_basename, 255);
} else {
@@ -181,7 +181,7 @@ static int process_file(const char *path, options_t *opts) {

writer_t *realtime_png;
if (opts->realtime) {
char filename[269];
char filename[269] = { 0 };
sprintf(filename, "%s-decoding.png", name);
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
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;
for (rows = 0; rows < APTDEC_MAX_HEIGHT; rows++) {
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);
#pragma GCC diagnostic pop

char filename[269];
char filename[269] = { 0 };
sprintf(filename, "%s-decoding.png", name);
remove(filename);
}
@@ -294,9 +294,9 @@ static int process_file(const char *path, options_t *opts) {

if (strcmp(images[i], "thermal") == 0) {
if (img.ch[1] >= 4) {
char filename[269];
char filename[269] = { 0 };
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]]);

// Perform visible calibration
@@ -313,9 +313,9 @@ static int process_file(const char *path, options_t *opts) {
}
} else if (strcmp(images[i], "visible") == 0) {
if (img.ch[0] <= 2) {
char filename[269];
char filename[269] = { 0 };
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]]);

// Perform visible calibration
@@ -352,9 +352,9 @@ static int process_file(const char *path, options_t *opts) {
}

if (strcmp(images[i], "raw") == 0) {
char filename[269];
char filename[269] = { 0 };
sprintf(filename, "%s-raw.png", base);
char description[128];
char description[128] = { 0 };
sprintf(description,
"Raw image, channel %s - %s / %s - %s",
channel_name[img.ch[0]],
@@ -376,9 +376,9 @@ static int process_file(const char *path, options_t *opts) {
writer_free(writer);
} else if (strcmp(images[i], "lut") == 0) {
if (opts->lut != NULL && opts->lut[0] != '\0') {
char filename[269];
char filename[269] = { 0 };
sprintf(filename, "%s-lut.png", base);
char description[128];
char description[128] = { 0 };
sprintf(description,
"LUT image, channel %s - %s / %s - %s",
channel_name[img.ch[0]],
@@ -387,7 +387,7 @@ static int process_file(const char *path, options_t *opts) {
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)) {
writer_t *writer = writer_init(filename, APT_REGION_CHA, img.rows, PNG_COLOR_TYPE_RGB, description);
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");
}
} else if (strcmp(images[i], "a") == 0) {
char filename[269];
char filename[269] = { 0 };
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]]);

writer_t *writer;
@@ -415,9 +415,9 @@ static int process_file(const char *path, options_t *opts) {
}
writer_free(writer);
} else if (strcmp(images[i], "b") == 0) {
char filename[269];
char filename[269] = { 0 };
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]]);

writer_t *writer;
@@ -517,7 +517,7 @@ static void write_line(writer_t *png, float *row) {
}

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++) {
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);
@@ -534,4 +534,4 @@ int array_contains(char **array, char *value, size_t n) {
}
}
return 0;
}
}

+ 2
- 2
aptdec-cli/pngio.c Просмотреть файл

@@ -25,7 +25,7 @@
#include "util.h"

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;

// 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);

char version[128];
char version[128] = { 0 };
int version_len = get_version(version);

png_text text[] = {


+ 7
- 5
libaptdec/dsp.c Просмотреть файл

@@ -74,11 +74,11 @@ char *aptdec_get_version(void) {
}

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->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;
}

@@ -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 = (pll_t *)malloc(sizeof(pll_t));
pll_t *pll = calloc(1, sizeof(pll_t));
pll->alpha = alpha;
pll->beta = beta;
pll->min_freq = M_TAUf * min_freq / sample_rate;
@@ -104,9 +104,11 @@ aptdec_t *aptdec_init(float sample_rate) {
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->sync_frequency = 1.0f;
apt->interpolator_n = APTDEC_BUFFER_SIZE;
apt->interpolator_offset = 0.0f;

// PLL configuration
// https://www.trondeau.com/blog/2011/8/13/control-loop-gain-values.html


+ 3
- 3
libaptdec/effects.c Просмотреть файл

@@ -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) {
for (size_t y = 1; y < img->rows - 1; y++) {
for (size_t x = 1; x < region.width - 1; x++) {
float pixels[9];
float pixels[9] = { 0.0f };
int pixeln = 0;
for (int y2 = -1; y2 < 2; y2++) {
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,
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 endCrop = img->rows;

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++) {
temp[i] = img->data[y * APT_IMG_WIDTH + i];
}


+ 7
- 7
libaptdec/image.c Просмотреть файл

@@ -21,9 +21,9 @@
#include <stdlib.h>
#include <string.h>
#include <float.h>
#include <aptdec.h>

#include "algebra.h"
#include <aptdec.h>
#include "util.h"
#include "calibration.h"

@@ -31,14 +31,14 @@

apt_image_t apt_image_clone(apt_image_t 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);
return _img;
}

static void decode_telemetry(const float *data, size_t rows, size_t offset, float *wedges) {
// 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++) {
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)
float best_noise = FLT_MAX;
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;
for (size_t i = 0; i < APT_FRAME_WEDGES; i++) {
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) {
float *rows = (float *)malloc(img->rows * sizeof(float));
float *rows = calloc(img->rows, sizeof(float));
float average = 0.0f;
for (size_t y = 0; y < img->rows; y++) {
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;

// Compute PRT temperature
float T[4];
float T[4] = { 0.0f };
for (size_t n = 0; n < 4; 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;
}

float lut[256];
float lut[256] = { 0.0f };
make_thermal_lut(img, img->ch[1], img->satellite, lut);

for (size_t y = 0; y < img->rows; y++) {


Загрузка…
Отмена
Сохранить