togif: -E flag to read animation from stdin
This commit is contained in:
parent
a00b6bdbfa
commit
e73a9eb9e8
2 changed files with 41 additions and 3 deletions
|
@ -105,6 +105,8 @@ jpg, gif, png, tif, ppm, bmp, v210, yuv, ico, tga, tojpg, togeordi, togif, toppm
|
||||||
.I msec
|
.I msec
|
||||||
]
|
]
|
||||||
.I file ...
|
.I file ...
|
||||||
|
|
|
||||||
|
.B -E
|
||||||
]
|
]
|
||||||
.br
|
.br
|
||||||
.B toppm
|
.B toppm
|
||||||
|
@ -351,6 +353,11 @@ By default, the images are displayed as fast as they can be rendered.
|
||||||
This option specifies the time, in milliseconds, to pause while
|
This option specifies the time, in milliseconds, to pause while
|
||||||
displaying the next named
|
displaying the next named
|
||||||
.IR file .
|
.IR file .
|
||||||
|
.TP
|
||||||
|
.B -E
|
||||||
|
Specifying this option instead of a list of files will read the frames from a pipe on fd 0.
|
||||||
|
Each frame is terminated with EOF.
|
||||||
|
End of the animation is specified by an extra EOF.
|
||||||
.PP
|
.PP
|
||||||
.I Gif
|
.I Gif
|
||||||
translates files that contain a `transparency' index by attaching
|
translates files that contain a `transparency' index by attaching
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
void
|
void
|
||||||
usage(void)
|
usage(void)
|
||||||
{
|
{
|
||||||
fprint(2, "usage: togif [-l loopcount] [-c 'comment'] [-d Δt (ms)] [-t transparency-index] [file ... [-d Δt] file ...]\n");
|
fprint(2, "usage: togif [-l loopcount] [-c 'comment'] [-d Δt (ms)] [-t transparency-index] [file ... [-d Δt] file ... | -E]\n");
|
||||||
exits("usage");
|
exits("usage");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
Biobuf bout;
|
Biobuf bout;
|
||||||
Memimage *i, *ni;
|
Memimage *i, *ni;
|
||||||
int fd, j, dt, trans, loop;
|
int fd, j, dt, trans, loop, eof;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
char *err, *comment, *s;
|
char *err, *comment, *s;
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ main(int argc, char *argv[])
|
||||||
dt = -1;
|
dt = -1;
|
||||||
trans = -1;
|
trans = -1;
|
||||||
loop = UNSET;
|
loop = UNSET;
|
||||||
|
eof = 0;
|
||||||
ARGBEGIN{
|
ARGBEGIN{
|
||||||
case 'l':
|
case 'l':
|
||||||
s = ARGF();
|
s = ARGF();
|
||||||
|
@ -54,6 +55,9 @@ main(int argc, char *argv[])
|
||||||
if(trans > 255)
|
if(trans > 255)
|
||||||
usage();
|
usage();
|
||||||
break;
|
break;
|
||||||
|
case 'E':
|
||||||
|
eof++;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
}ARGEND
|
}ARGEND
|
||||||
|
@ -65,7 +69,34 @@ main(int argc, char *argv[])
|
||||||
|
|
||||||
err = nil;
|
err = nil;
|
||||||
|
|
||||||
if(argc == 0){
|
if(eof){
|
||||||
|
if(argc != 0) usage();
|
||||||
|
for(j = 0;;j++){
|
||||||
|
i = readmemimage(0);
|
||||||
|
if(i == nil) break;
|
||||||
|
ni = memonechan(i);
|
||||||
|
if(ni == nil)
|
||||||
|
sysfatal("converting image to RGBV: %r");
|
||||||
|
if(i != nil){
|
||||||
|
freememimage(i);
|
||||||
|
i = ni;
|
||||||
|
}
|
||||||
|
if(j == 0){
|
||||||
|
err = memstartgif(&bout, i, loop);
|
||||||
|
if(err != nil)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(comment)
|
||||||
|
err = memwritegif(&bout, i, comment, dt, trans);
|
||||||
|
else{
|
||||||
|
snprint(buf, sizeof buf, "Converted by Plan 9 from <stdin>");
|
||||||
|
err = memwritegif(&bout, i, buf, dt, trans);
|
||||||
|
}
|
||||||
|
if(err != nil) break;
|
||||||
|
freememimage(i);
|
||||||
|
comment = nil;
|
||||||
|
}
|
||||||
|
}else if(argc == 0){
|
||||||
i = readmemimage(0);
|
i = readmemimage(0);
|
||||||
if(i == nil)
|
if(i == nil)
|
||||||
sysfatal("reading input: %r");
|
sysfatal("reading input: %r");
|
||||||
|
|
Loading…
Reference in a new issue