|
@@ -34,8 +34,9 @@ main(int argc, char *argv[])
|
|
|
int camera_id = 0;
|
|
|
long res;
|
|
|
char *end;
|
|
|
+ char *outfile = NULL;
|
|
|
|
|
|
- while ((c = getopt(argc, argv, "c:")) != -1) {
|
|
|
+ while ((c = getopt(argc, argv, "c:o:")) != -1) {
|
|
|
switch (c) {
|
|
|
case 'c':
|
|
|
res = strtol(optarg, &end, 10);
|
|
@@ -45,6 +46,9 @@ main(int argc, char *argv[])
|
|
|
}
|
|
|
camera_id = (int) res;
|
|
|
break;
|
|
|
+ case 'o':
|
|
|
+ outfile = optarg;
|
|
|
+ break;
|
|
|
case '?':
|
|
|
if (optopt == 'd' || optopt == 'l') {
|
|
|
fprintf(stderr, "Option -%c requires an argument.\n", optopt);
|
|
@@ -175,7 +179,24 @@ main(int argc, char *argv[])
|
|
|
fprintf(stderr, "VIDIOC_DQBUF failed\n");
|
|
|
return 1;
|
|
|
}
|
|
|
- fprintf(stderr, "GOT FRAME!\n");
|
|
|
+
|
|
|
+ fprintf(stderr, "received frame\n");
|
|
|
+
|
|
|
+ if (count == 1 && outfile != NULL) {
|
|
|
+ FILE *fp = fopen(outfile, "w");
|
|
|
+ fwrite(buffers[buf.index].start, buf.bytesused, 1, fp);
|
|
|
+ fclose(fp);
|
|
|
+ printf("Stored frame to: %s\n", outfile);
|
|
|
+ printf("Format: %dx%x\n", mode->width, mode->height);
|
|
|
+
|
|
|
+ char fourcc[5] = {0};
|
|
|
+ fourcc[0] = (char) (mode->v4l_pixfmt & 0xff);
|
|
|
+ fourcc[1] = (char) ((mode->v4l_pixfmt >> 8) & 0xff);
|
|
|
+ fourcc[2] = (char) ((mode->v4l_pixfmt >> 16) & 0xff);
|
|
|
+ fourcc[3] = (char) ((mode->v4l_pixfmt >> 24) & 0xff);
|
|
|
+ printf("Pixfmt: %s\n", fourcc);
|
|
|
+ }
|
|
|
+
|
|
|
if (xioctl(camera->video_fd, VIDIOC_QBUF, &buf) == -1) {
|
|
|
fprintf(stderr, "VIDIOC_DQBUF failed\n");
|
|
|
return 1;
|