blind

suckless command-line video editing utility
git clone git://git.suckless.org/blind
Log | Files | Refs | README | LICENSE

blind-next-frame.c (1158B)


      1 /* See LICENSE file for copyright and license details. */
      2 #include "common.h"
      3 
      4 NUSAGE(2, "[-f frames] width height pixel-format ...")
      5 
      6 int
      7 main(int argc, char *argv[])
      8 {
      9 	struct stream stream = { .frames = 1, .fd = STDIN_FILENO, .file = "<stdin>" };
     10 	size_t n;
     11 	int i;
     12 	char *p;
     13 
     14 	ARGBEGIN {
     15 	case 'f':
     16 		stream.frames = entozu_flag(2, 'f', UARGF(), 1, SIZE_MAX);
     17 		break;
     18 	default:
     19 		usage();
     20 	} ARGEND;
     21 
     22 	if (argc < 3)
     23 		usage();
     24 
     25 	stream.pixfmt[0] = '\0';
     26 	stream.width  = entozu_arg(2, "the width",  argv[0], 1, SIZE_MAX);
     27 	stream.height = entozu_arg(2, "the height", argv[1], 1, SIZE_MAX);
     28 	argv += 2, argc -= 2;
     29 
     30 	n = (size_t)argc - 1;
     31 	for (i = 0; i < argc; i++)
     32 		n += strlen(argv[i]);
     33 	if (n < sizeof(stream.pixfmt)) {
     34 		p = stpcpy(stream.pixfmt, argv[0]);
     35 		for (i = 1; i < argc; i++) {
     36 			*p++ = ' ';
     37 			p = stpcpy(p, argv[i]);
     38 		}
     39 	}
     40 	enset_pixel_format(2, &stream, NULL);
     41 
     42 	fprint_stream_head(stdout, &stream);
     43 	enfflush(2, stdout, "<stdout>");
     44 
     45 	n = ensend_frames(2, &stream, STDOUT_FILENO, stream.frames, "<stdout>");
     46 	if (!n)
     47 		return 1;
     48 	else if (n < stream.frames)
     49 		enprintf(2, "%s: is shorter than expected\n", stream.file);
     50 	return 0;
     51 }