diff --git a/main.c b/main.c index 003556f..8f8cce9 100644 --- a/main.c +++ b/main.c @@ -1,6 +1,6 @@ /* * Atpdec - * Copyright (c) 2003 by Thierry Leconte (F4DWV) + * Copyright (c) 2004 by Thierry Leconte (F4DWV) * * $Id$ * @@ -32,7 +32,7 @@ #include "version.h" -extern getpixelrow (float *pixelv); +extern int getpixelrow(float *pixelv); #define SYNC_WIDTH 39 #define SPC_WIDTH 47 @@ -42,438 +42,366 @@ extern getpixelrow (float *pixelv); #define IMG_WIDTH 2080 static SNDFILE *inwav; -static int -initsnd (char *filename) + +static int initsnd(char *filename) { - SF_INFO infwav; + SF_INFO infwav; /* open wav input file */ - infwav.format = 0; - inwav = sf_open (filename, SFM_READ, &infwav); - if (inwav == NULL) { - fprintf (stderr, "could not open %s\n", filename); - return (1); - } - if (infwav.samplerate != 11025) { - fprintf (stderr, "Bad Input File sample rate: %d. Must be 11025\n", - infwav.samplerate); - return (1); - } - if (infwav.channels != 1) { - fprintf (stderr, "Too many channels in input file : %d\n", - infwav.channels); - return (1); - } - - return (0); + infwav.format = 0; + inwav = sf_open(filename, SFM_READ, &infwav); + if (inwav == NULL) { + fprintf(stderr, "could not open %s\n", filename); + return (1); + } + if (infwav.samplerate != 11025) { + fprintf(stderr, "Bad Input File sample rate: %d. Must be 11025\n", + infwav.samplerate); + return (1); + } + if (infwav.channels != 1) { + fprintf(stderr, "Too many channels in input file : %d\n", + infwav.channels); + return (1); + } + + return (0); } -int -getsample (float *sample, int nb) +int getsample(float *sample, int nb) { - return (sf_read_float (inwav, sample, nb)); + return (sf_read_float(inwav, sample, nb)); } static png_text text_ptr[] = { - {PNG_TEXT_COMPRESSION_NONE, "Software", version, sizeof (version)} - , - {PNG_TEXT_COMPRESSION_NONE, "Channel", NULL, 0} - , - {PNG_TEXT_COMPRESSION_NONE, "Description", "NOAA POES satellite Image", 25} + {PNG_TEXT_COMPRESSION_NONE, "Software", version, sizeof(version)} + , + {PNG_TEXT_COMPRESSION_NONE, "Channel", NULL, 0} + , + {PNG_TEXT_COMPRESSION_NONE, "Description", "NOAA POES satellite Image", + 25} }; static int -ImageOut (char *filename, char *chid, float **prow, int nrow, int depth, - int width, int offset) +ImageOut(char *filename, char *chid, float **prow, int nrow, + int width, int offset) { - FILE *pngfile; - png_infop info_ptr; - png_structp png_ptr; - int n; + FILE *pngfile; + png_infop info_ptr; + png_structp png_ptr; + int n; /* init png lib */ - png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { - fprintf (stderr, "could not open create png_ptr\n"); - return (1); - } - - info_ptr = png_create_info_struct (png_ptr); - if (!info_ptr) { - png_destroy_write_struct (&png_ptr, (png_infopp) NULL); - fprintf (stderr, "could not open create info_ptr\n"); - return (1); - } - - png_set_IHDR (png_ptr, info_ptr, width, nrow, - depth, PNG_COLOR_TYPE_GRAY, PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - - text_ptr[1].text = chid; - text_ptr[1].text_length = strlen (chid); - png_set_text (png_ptr, info_ptr, text_ptr, 3); - png_set_pHYs (png_ptr, info_ptr, 4000, 4000, PNG_RESOLUTION_METER); - - printf ("Writing %s ... ", filename); - fflush (stdout); -#ifdef WIN32 - pngfile = fopen (filename, "wb"); -#else - pngfile = fopen (filename, "w"); -#endif - if (pngfile == NULL) { - fprintf (stderr, "could not open %s\n", filename); - return (1); - } - png_init_io (png_ptr, pngfile); - png_write_info (png_ptr, info_ptr); - - for (n = 0; n < nrow; n++) { - float *pixelv; - png_byte pixel[2 * IMG_WIDTH]; - int i; - - pixelv = prow[n]; - for (i = 0; i < width; i++) { - float pv; - - pv = pixelv[i + offset]; - switch (depth) { - case 8: - pixel[i] = floor (pv); - break; -#ifndef WIN32 - case 16: - ((unsigned short *) pixel)[i] = - htons ((unsigned short) floor (pv * 255.0)); - break; -#endif - } + png_ptr = + png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) { + fprintf(stderr, "could not open create png_ptr\n"); + return (1); + } + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + png_destroy_write_struct(&png_ptr, (png_infopp) NULL); + fprintf(stderr, "could not open create info_ptr\n"); + return (1); + } + + png_set_IHDR(png_ptr, info_ptr, width, nrow, + 8, PNG_COLOR_TYPE_GRAY, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + text_ptr[1].text = chid; + text_ptr[1].text_length = strlen(chid); + png_set_text(png_ptr, info_ptr, text_ptr, 3); + png_set_pHYs(png_ptr, info_ptr, 4000, 4000, PNG_RESOLUTION_METER); + + printf("Writing %s ... ", filename); + fflush(stdout); + pngfile = fopen(filename, "wb"); + if (pngfile == NULL) { + fprintf(stderr, "could not open %s\n", filename); + return (1); } - png_write_row (png_ptr, pixel); - } - png_write_end (png_ptr, info_ptr); - fclose (pngfile); - printf ("Done\n"); - png_destroy_write_struct (&png_ptr, &info_ptr); - return (0); + png_init_io(png_ptr, pngfile); + png_write_info(png_ptr, info_ptr); + + for (n = 0; n < nrow; n++) { + float *pixelv; + png_byte pixel[2*IMG_WIDTH]; + int i; + + pixelv = prow[n]; + for (i = 0; i < width; i++) { + pixel[i] = pixelv[i + offset]; + } + png_write_row(png_ptr, pixel); + } + png_write_end(png_ptr, info_ptr); + fclose(pngfile); + printf("Done\n"); + png_destroy_write_struct(&png_ptr, &info_ptr); + return (0); } -int -ImageColorOut (char *filename, float **prow, int nrow) +int ImageColorOut(char *filename, float **prow, int nrow) { - FILE *pngfile; - png_infop info_ptr; - png_structp png_ptr; - int n; - float *pixelc,*pixeln,*pixelp; - float pv[CH_WIDTH]; - float pt[CH_WIDTH]; - - extern void false_color (double v, double t, float *r, float *g, float *b); - extern void dres( - float av, float at, float bv, float bt, - float cv, float ct, float dv, float dt, - float *v , float *t); + FILE *pngfile; + png_infop info_ptr; + png_structp png_ptr; + int n; + float *pixelc, *pixeln; + + extern void falsecolor(double v, double t, float *r, float *g, + float *b); /* init png lib */ - png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) { - fprintf (stderr, "could not open create png_ptr\n"); - return (1); - } - - info_ptr = png_create_info_struct (png_ptr); - if (!info_ptr) { - png_destroy_write_struct (&png_ptr, (png_infopp) NULL); - fprintf (stderr, "could not open create info_ptr\n"); - return (1); - } - - png_set_IHDR (png_ptr, info_ptr, 2*CH_WIDTH-3, 2*nrow-3, - 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - - text_ptr[1].text = "False Colors"; - png_set_pHYs (png_ptr, info_ptr, 2000, 2000, PNG_RESOLUTION_METER); - - text_ptr[1].text_length = strlen (text_ptr[1].text); - png_set_text (png_ptr, info_ptr, text_ptr, 3); - - printf ("Computing False colors & writing : %s ...", filename); - fflush (stdout); -#ifdef WIN32 - pngfile = fopen (filename, "wb"); -#else - pngfile = fopen (filename, "w"); -#endif - if (pngfile == NULL) { - fprintf (stderr, "could not open %s\n", filename); - return (1); - } - png_init_io (png_ptr, pngfile); - png_write_info (png_ptr, info_ptr); - - pixelc=NULL;pixeln=prow[0]; - - for (n = 0; n < nrow-1; n++) { - png_color pixa[2*CH_WIDTH]; - png_color pixb[2*CH_WIDTH]; - int i; - - pixelp=pixelc;pixelc=pixeln;pixeln=prow[n+1]; - - for (i = 0; i < CH_WIDTH-1; i++) { - float av,bv,cv,dv; - float at,bt,ct,dt; - float pvc,ptc; - float v,t; - float r, g, b; - - av = pixelc[i+SYNC_WIDTH + SPC_WIDTH]; - bv = pixeln[i+SYNC_WIDTH + SPC_WIDTH]; - cv = pixelc[i+1+SYNC_WIDTH + SPC_WIDTH]; - dv = pixeln[i+1+SYNC_WIDTH + SPC_WIDTH]; - if(n!=0) { - at = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - bt = 0.667*pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - ct = 0.667*pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelp[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - dt = 0.667*pixeln[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - } else { - at = pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - bt = pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - ct = pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - dt = pixeln[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - } - - dres (av,at,bv,bt,cv,ct,dv,dt,&v,&t); - - falsecolor (v, t, &r, &g, &b); - pixb[2*i].red = (unsigned int) (255.0 * r); - pixb[2*i].green = (unsigned int) (255.0 * g); - pixb[2*i].blue = (unsigned int) (255.0 * b); - - pvc=v;ptc=t; - - if(n!=0) { - av = pv[i]; - bv = pixelc[i+SYNC_WIDTH + SPC_WIDTH]; - cv = pixelc[i+1+SYNC_WIDTH + SPC_WIDTH]; - dv = pvc; - at = pt[i]; - bt = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - ct = 0.667*pixelc[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelp[i+1+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - dt = ptc; - - dres (av,at,bv,bt,cv,ct,dv,dt,&v,&t); - - falsecolor (v, t, &r, &g, &b); - pixa[2*i].red = (unsigned int) (255.0 * r); - pixa[2*i].green = (unsigned int) (255.0 * g); - pixa[2*i].blue = (unsigned int) (255.0 * b); - } - pv[i]=pvc;pt[i]=ptc; - - if (i!=0) { - - if (n!=0) { - v = pixelc[i+SYNC_WIDTH + SPC_WIDTH]; - t = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - falsecolor (v, t, &r, &g, &b); - pixa[2*i-1].red = (unsigned int) (255.0 * r); - pixa[2*i-1].green = (unsigned int) (255.0 * g); - pixa[2*i-1].blue = (unsigned int) (255.0 * b); - } - - av = pixelc[i+SYNC_WIDTH + SPC_WIDTH]; - bv = pv[i-1]; - cv = pvc; - dv = pixeln[i+SYNC_WIDTH + SPC_WIDTH]; - if(n!=0) { - at = 0.667*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelp[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - dt = 0.667*pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] - + 0.333*pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - } else { - at = pixelc[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - dt = pixeln[i+SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; - } - bt = pt[i-1]; - ct = ptc; - - dres (av,at,bv,bt,cv,ct,dv,dt,&v,&t); - - falsecolor (v, t, &r, &g, &b); - pixb[2*i-1].red = (unsigned int) (255.0 * r); - pixb[2*i-1].green = (unsigned int) (255.0 * g); - pixb[2*i-1].blue = (unsigned int) (255.0 * b); - } + png_ptr = + png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (!png_ptr) { + fprintf(stderr, "could not open create png_ptr\n"); + return (1); + } + + info_ptr = png_create_info_struct(png_ptr); + if (!info_ptr) { + png_destroy_write_struct(&png_ptr, (png_infopp) NULL); + fprintf(stderr, "could not open create info_ptr\n"); + return (1); + } + + png_set_IHDR(png_ptr, info_ptr, 2 * (CH_WIDTH - 1), 2 * (nrow - 1), + 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + + png_set_pHYs(png_ptr, info_ptr, 2000, 2000, PNG_RESOLUTION_METER); + text_ptr[1].text = "False Colors"; + text_ptr[1].text_length = strlen(text_ptr[1].text); + png_set_text(png_ptr, info_ptr, text_ptr, 3); + + printf("Computing False colors & writing : %s ...", filename); + fflush(stdout); + pngfile = fopen(filename, "wb"); + if (pngfile == NULL) { + fprintf(stderr, "could not open %s\n", filename); + return (1); + } + png_init_io(png_ptr, pngfile); + png_write_info(png_ptr, info_ptr); + + for (n = 0; n < nrow - 1; n++) { + png_color pix[2 * CH_WIDTH]; + float r, g, b; + float v, vs, t, ts; + int i; + + pixelc = prow[n]; + pixeln = prow[n + 1]; + + v = (pixelc[SYNC_WIDTH + SPC_WIDTH] + + pixeln[SYNC_WIDTH + SPC_WIDTH]) / 2.0; + for (i = 0; i < CH_WIDTH - 1; i++) { + + t = pixelc[i + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]; + + falsecolor(v, t, &r, &g, &b); + pix[2 * i].red = 255.0 * r; + pix[2 * i].green = 255.0 * g; + pix[2 * i].blue = 255.0 * b; + + vs = (pixelc[i + 1 + SYNC_WIDTH + SPC_WIDTH] + + pixeln[i + 1 + SYNC_WIDTH + SPC_WIDTH]) / 2.0; + v = (v + vs) / 2.0; + t = (pixelc[i + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] + + pixelc[i + 1 + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]) / 2.0; + + falsecolor(v, t, &r, &g, &b); + pix[2 * i + 1].red = 255.0 * r; + pix[2 * i + 1].green = 255.0 * g; + pix[2 * i + 1].blue = 255.0 * b; + + v = vs; + } + png_write_row(png_ptr, (png_bytep) pix); + + t = (pixelc[SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] + + pixeln[SYNC_WIDTH + SPC_WIDTH + CH_OFFSET]) / 2.0; + for (i = 0; i < CH_WIDTH - 1; i++) { + + v = pixeln[i + SYNC_WIDTH + SPC_WIDTH]; + + falsecolor(v, t, &r, &g, &b); + pix[2 * i].red = 255.0 * r; + pix[2 * i].green = 255.0 * g; + pix[2 * i].blue = 255.0 * b; + + v = (pixeln[i + SYNC_WIDTH + SPC_WIDTH] + + pixeln[i + 1 + SYNC_WIDTH + SPC_WIDTH]) / 2.0; + ts = (pixelc[i + SYNC_WIDTH + SPC_WIDTH + CH_OFFSET] + + pixeln[i + 1 + SYNC_WIDTH + SPC_WIDTH + + CH_OFFSET]) / 2.0; + t = (t + ts) / 2.0; + falsecolor(v, t, &r, &g, &b); + pix[2 * i + 1].red = 255.0 * r; + pix[2 * i + 1].green = 255.0 * g; + pix[2 * i + 1].blue = 255.0 * b; + + t = ts; + } + png_write_row(png_ptr, (png_bytep) pix); } - if(n!=0) png_write_row (png_ptr, (png_bytep) pixa); - png_write_row (png_ptr, (png_bytep) pixb); - - } - png_write_end (png_ptr, info_ptr); - fclose (pngfile); - printf ("Done\n"); - png_destroy_write_struct (&png_ptr, &info_ptr); - return (0); + png_write_end(png_ptr, info_ptr); + fclose(pngfile); + printf("Done\n"); + png_destroy_write_struct(&png_ptr, &info_ptr); + return (0); } -extern int Calibrate (float **prow, int nrow, int offset); -extern int Temperature (float **prow, int nrow, int ch, int offset); -extern void readfconf (char *file); +extern int Calibrate(float **prow, int nrow, int offset); +extern void Temperature(float **prow, int nrow, int ch, int offset); +extern void readfconf(char *file); extern int optind, opterr; extern char *optarg; int satnum = 1; -static void -usage (void) +static void usage(void) { - fprintf (stderr, "atpdec [options] soundfiles ...\n"); - fprintf (stderr, - "options:\n-d