Compare commits

...

3 Commits

Author SHA1 Message Date
tth
8990d1f9a9 we can now ADD or MUL two images 2019-09-11 13:56:38 +02:00
tth
342fc4a721 adding PRNG initialisation 2019-09-11 13:45:18 +02:00
tth
ee3c2c4cbc oups ! 2019-09-11 13:31:10 +02:00
4 changed files with 91 additions and 11 deletions

View File

@ -3,7 +3,7 @@
cp libfloatimg.a /usr/local/lib cp libfloatimg.a /usr/local/lib
cp floatimg.h /usr/local/include cp floatimg.h /usr/local/include
cp tools/mkfimg tools/fimg2pnm \ cp tools/mkfimg tools/fimg2pnm tools/fimgops \
tools/png2fimg tools/fimgstats \ tools/png2fimg tools/fimgstats \
/usr/local/bin /usr/local/bin

View File

@ -36,7 +36,7 @@ for (idx=0; idx<nbiter; idx++) {
d->B[idx] = a->B[idx] + b->B[idx]; d->B[idx] = a->B[idx] + b->B[idx];
} }
return -1; return 0;
} }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* /*
@ -63,7 +63,7 @@ for (idx=0; idx<nbiter; idx++) {
d->B[idx] = fabs(a->B[idx] - b->B[idx]); d->B[idx] = fabs(a->B[idx] - b->B[idx]);
} }
return -1; return 0;
} }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
@ -91,6 +91,6 @@ for (idx=0; idx<nbiter; idx++) {
d->B[idx] = a->B[idx] * b->B[idx]; d->B[idx] = a->B[idx] * b->B[idx];
} }
return -1; return 0;
} }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */

View File

@ -9,7 +9,8 @@ int verbosity;
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
#define OP_ADD 1 #define OP_ADD 1
#define OP_MUL 2 #define OP_SUB 2
#define OP_MUL 4
typedef struct { typedef struct {
int code; int code;
char *op; char *op;
@ -17,6 +18,7 @@ typedef struct {
Opcode opcodes[] = { Opcode opcodes[] = {
{ OP_ADD, "add" }, { OP_ADD, "add" },
{ OP_SUB, "sub" },
{ OP_MUL, "mul" }, { OP_MUL, "mul" },
{ 0, NULL } { 0, NULL }
}; };
@ -28,13 +30,17 @@ for (optr = opcodes; optr->code; optr++) {
printf("\t%-20s %d\n", optr->op, optr->code); printf("\t%-20s %d\n", optr->op, optr->code);
} }
} }
static int look_opcodes(char *txt) static int look_opcode(char *txt)
{ {
Opcode *optr; Opcode *optr;
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, txt);
#endif
for (optr = opcodes; optr->code; optr++) { for (optr = opcodes; optr->code; optr++) {
if (!strcmp(txt, optr->op)) { if (!strcmp(txt, optr->op)) {
printf("found %s as %d\n", optr->op, optr->code); // printf("found %s as %d\n", optr->op, optr->code);
return optr->code; return optr->code;
} }
} }
@ -50,12 +56,33 @@ if (verbosity) fimg_print_version(1);
exit(0); exit(0);
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */
int exec_operator(FloatImg *A, FloatImg *B, int action, FloatImg *D)
{
int foo;
switch (action) {
case OP_ADD:
foo = fimg_add(A, B, D); break;
case OP_SUB:
foo = fimg_sub(A, B, D); break;
case OP_MUL:
foo = fimg_add(A, B, D); break;
default:
foo = -99; break;
}
return foo;
}
/* --------------------------------------------------------------------- */
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int foo, opt; int foo, opt, action;
float fvalue; float fvalue;
char *operator;
FloatImg fimg; FloatImg srcA, srcB, dest;
while ((opt = getopt(argc, argv, "hk:v")) != -1) { while ((opt = getopt(argc, argv, "hk:v")) != -1) {
switch(opt) { switch(opt) {
@ -76,6 +103,53 @@ if (4 != argc-optind) {
exit(1); exit(1);
} }
operator = argv[optind+2];
action = look_opcode(operator);
if (action < 0) {
fprintf(stderr, "%s : opcode '%s' unknow\n", argv[0], operator);
exit(1);
}
/*
* load the two source files, and check comatibility
*/
if ((foo=fimg_create_from_dump(argv[optind], &srcA))) {
fprintf(stderr, "read error on '%s' is %d\n", argv[optind], foo);
exit(2);
}
if ((foo=fimg_create_from_dump(argv[optind+1], &srcB))) {
fprintf(stderr, "read error on '%s' is %d\n", argv[optind+1], foo);
exit(3);
}
if (verbosity) { /* please, debug me */
fimg_describe(&srcA, argv[optind]);
fimg_describe(&srcB, argv[optind+1]);
}
foo = fimg_images_compatible(&srcA, &srcB);
if (foo) {
fprintf(stderr, "images are not compatibles, %d\n", foo);
exit(4);
}
/*
* we can now create the resultant image, and going coredump...
*/
foo = fimg_create(&dest, srcA.width, srcA.height, srcA.type);
// fimg_describe(&dest, "destination");
foo = exec_operator(&srcA, &srcB, action, &dest);
if (foo) {
fprintf(stderr, "operator exec give us a %d\n", foo);
}
foo = fimg_dump_to_file(&dest, argv[optind+3], 0);
if (foo) {
fprintf(stderr, "dumping datas to file give us a %d\n", foo);
}
return 0; return 0;
} }
/* --------------------------------------------------------------------- */ /* --------------------------------------------------------------------- */

View File

@ -2,6 +2,7 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <time.h>
#include "../floatimg.h" #include "../floatimg.h"
@ -14,7 +15,9 @@ int verbosity;
static int get_type(char *name) static int get_type(char *name)
{ {
#if DEBUG_LEVEL
fprintf(stderr, ">>> %s ( '%s' )\n", __func__, name); fprintf(stderr, ">>> %s ( '%s' )\n", __func__, name);
#endif
#define TEST(str) ( ! strcmp(name, str) ) #define TEST(str) ( ! strcmp(name, str) )
if TEST("black") return T_BLACK; if TEST("black") return T_BLACK;
@ -38,14 +41,15 @@ int main(int argc, char *argv[])
int foo, opt; int foo, opt;
int width, height; int width, height;
char *fname; char *fname;
float fvalue; float fvalue = 0.00001;
int type = 0; int type = 0;
FloatImg fimg; FloatImg fimg;
while ((opt = getopt(argc, argv, "ht:v")) != -1) { while ((opt = getopt(argc, argv, "hk:t:v")) != -1) {
switch(opt) { switch(opt) {
case 'h': help(0); break; case 'h': help(0); break;
case 'k': fvalue = atof(optarg); break;
case 't': type = get_type(optarg); break; case 't': type = get_type(optarg); break;
case 'v': verbosity++; break; case 'v': verbosity++; break;
} }
@ -67,6 +71,8 @@ width = atoi(argv[optind+1]); height = atoi(argv[optind+2]);
if (verbosity) fprintf(stderr, "making '%s' %d x %d\n", fname, width, height); if (verbosity) fprintf(stderr, "making '%s' %d x %d\n", fname, width, height);
srand48(getpid() ^ time(NULL));
foo = fimg_create(&fimg, width, height, 3); foo = fimg_create(&fimg, width, height, 3);
if (foo) { if (foo) {
fprintf(stderr, "create floatimg -> %d\n", foo); fprintf(stderr, "create floatimg -> %d\n", foo);