after the suggestion of resample(1) some days ago
I've tried run it as a filter from another program.
this other program is non-threaded; for testing all
it does is call initdraw and read an image file
after which the resample routine is called.
in my resample routine it seems I need a call to sleep
to avoid the resample program to hang (in Pread).
(replacing the sleep by a fprint(2, "something\n") works too).
I'm just trying to understand what goes on -
is this the way to do this? if not, what am I missing?
I'm sorry if it is something obvious; I'm just trying to learn.
Axel.
Image*
resample(Image *from)
{
int p[2];
Image *img;
if(pipe(p) < 0){
fprint(2, "pipe fails: %r\n");
exits("Epipe");
}
switch(fork()){
case -1:
fprint(2, "fork fails: %r\n");
exits("Efork");
default:
if (writeimage(p[0], from, 0) < 0)
fprint(2, "error writeimage\n");
close(p[0]);
/* seems we need sleep to give up cpu so resample can run */
sleep(1);
img = readimage(display, p[1], 0);
close(p[1]);
waitpid();
return img;
case 0:
dup(p[1], 0);
dup(p[0], 1);
execl("/bin/resample", "resample", "-x50%", nil);
fprint(2, "execl fails: %r\n");
exits("Eexec");
}
return nil;
}