one more step on the metadata road

This commit is contained in:
tth
2022-04-09 23:18:14 +02:00
parent 4b64330884
commit a5fac7effd
11 changed files with 254 additions and 33 deletions

View File

@@ -13,8 +13,12 @@ DEPS = ../floatimg.h ../libfloatimg.a Makefile
all: fimg2pnm mkfimg png2fimg fimgstats fimg2png \
fimg2tiff fimg2text fimg2fits \
addpnm2fimg cumulfimgs fimgops fimgfx \
fimgmetadata \
fimghalfsize
fimgmetadata: fimgmetadata.c $(DEPS)
gcc $(COPT) $< ../libfloatimg.a -lm -o $@
fimgstats: fimgstats.c $(DEPS)
gcc $(COPT) $< ../libfloatimg.a -lm -o $@

View File

@@ -10,7 +10,17 @@ Génération d'une image flottante avec des choses dedans.
Un [../scripts/demo-mkfimg.sh](script) permet de créer toutes
les images disponibles.
L'option `-m` rajoute des méta-données, cette option
**ne** doit **pas** encore être utilisée dans la vrai vie.
## fimgops
```
usage:
fimgops [options] A.fimg B.fimg operator D.fimg
options:
-k N.N set float value (def=0.500)
-v increase verbosity
```
## fimgfx
@@ -22,7 +32,7 @@ effects:
Compute some useless numbers...
## fimg2pnm - fimg2png - fimg2tiff
## fimg2pnm - fimg2png - fimg2tiff - fimg2fips
Exportation d'image flottante vers divers formats. Certains d'entre eux
ne sont gérés que de façon très rudimentaire.
@@ -32,3 +42,6 @@ ne sont gérés que de façon très rudimentaire.
Nouveau de l'année 2020+1 : exfiltrer toutes des données d'une image flottante
afin de les rendre machinables.
## fimgmetadata
Nouveau avril 2022. Need more doc...

69
tools/fimgmetadata.c Normal file
View File

@@ -0,0 +1,69 @@
/*
* FIMG METADATA TOOL
*/
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include "../floatimg.h"
int verbosity;
/* --------------------------------------------------------------------- */
int get_print_metadata(char *fname, char *command)
{
int foo;
FimgMetaData metadata;
// #if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' %s )\n", __func__, fname, command);
// #endif
foo = fimg_get_metadata_from_file(fname, &metadata);
if (foo) return foo;
/* switch on command here, please */
fimg_show_metadata(&metadata, fname, 0);
return 0;
}
/* --------------------------------------------------------------------- */
void help(void)
{
fprintf(stderr, "*** fimgmetadata (%s, %s)\n", __DATE__, __TIME__);
fimg_print_version(1);
exit(0);
}
/* --------------------------------------------------------------------- */
int main(int argc, char *argv[])
{
int foo, opt, nbargs;
char *fname;
while ((opt = getopt(argc, argv, "hv")) != -1) {
switch(opt) {
case 'h': help(); break;
case 'v': verbosity++; break;
}
}
nbargs = argc - optind;
// fprintf(stderr, "nbargs = %d\n", nbargs);
if (2 != nbargs) {
fprintf(stderr, "%s need two args: command & filename\n", argv[0]);
exit(1);
}
foo = get_print_metadata(argv[optind], argv[optind+1]);
if (foo) fprintf(stderr, "got a %d from job\n", foo);
return 0;
}
/* --------------------------------------------------------------------- */

View File

@@ -68,7 +68,7 @@ for (type = types; type->code; type++) {
exit(0);
}
/* --------------------------------------------------------------------- */
static void help(int lj)
static void help(void)
{
int foo, cc;
@@ -76,11 +76,11 @@ puts("Usage:\tmkfimg [options] quux.fimg width height");
puts("\t-k N.N\tgive a float parameter");
puts("\t-L\tlist howto make a pic");
fputs("\t-t bla\thowto make the pic :\n\t\t| ", stdout);
fputs("\t-t bla\thowto make the pic :\n\t\t | ", stdout);
for (foo=cc=0; types[foo].code; foo++) {
cc += printf("%s ", types[foo].name);
if (cc>42) { cc=0; printf("\n\t\t| "); }
if (cc>35) { cc=0; printf("\n\t\t | "); }
}
puts("\n\t-v\tincrease verbosity");
@@ -100,14 +100,17 @@ int width, height;
char *fname;
float fvalue = 1.0;
int type = T_BLACK;
int wrmdata = 0;
char *tname = "wtf?";
FloatImg fimg;
FimgMetaData metadata;
while ((opt = getopt(argc, argv, "hk:Lt:v")) != -1) {
while ((opt = getopt(argc, argv, "hk:Lmt:v")) != -1) {
switch(opt) {
case 'h': help(0); break;
case 'h': help(); break;
case 'k': fvalue = atof(optarg); break;
case 'm': wrmdata = 1; break;
case 't': type = get_type_by_name(tname=optarg);
break;
case 'L': list_types(); break;
@@ -147,8 +150,8 @@ switch (nbargs) {
fname = argv[optind];
if (verbosity>1) fprintf(stderr, "*** mkfimg *** %s %s\n",
__DATE__, __TIME__);
if (verbosity>1) fprintf(stderr, "*** mkfimg *** %s %s *** pid %ld\n",
__DATE__, __TIME__, (long)getpid());
if (verbosity) fprintf(stderr, "making '%s' %dx%d, type %d\n",
fname, width, height, type);
@@ -174,7 +177,18 @@ switch(type) {
case -1: exit(1);
}
foo = fimg_dump_to_file(&fimg, fname, 0);
if (wrmdata) {
fprintf(stderr, "%s: warning, metadata is bogus\n", argv[0]);
(void)fimg_default_metadata(&metadata);
sprintf(metadata.idcam, "mkfimg (libv %d)", FIMG_VERSION);
foo = fimg_dumpmd_to_file(&fimg, fname, &metadata, 0);
#if DEBUG_LEVEL
fprintf(stderr, "save w. metadata -> %d\n", foo);
#endif
}
else {
foo = fimg_dump_to_file(&fimg, fname, 0);
}
if (foo) {
fprintf(stderr, "dump fimg to %s -> %d\n", fname, foo);
exit(1);