summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/grab.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/tools/grab.c b/tools/grab.c
index 99fa6ee..b50cd4d 100644
--- a/tools/grab.c
+++ b/tools/grab.c
@@ -33,6 +33,7 @@
typedef struct {
gint n_frames;
gdouble duration;
+ gchar *filename;
} Options;
@@ -74,17 +75,21 @@ get_bytes_per_pixel (guint bits_per_pixel)
#ifdef HAVE_LIBTIFF
static void
write_tiff (RingBuffer *buffer,
+ Options *opts,
guint width,
guint height,
guint bits_per_pixel)
{
TIFF *tif;
guint32 rows_per_strip;
- gpointer data;
guint n_frames;
gsize bytes_per_pixel;
- tif = TIFFOpen ("frames.tif", "w");
+ if (opts->filename)
+ tif = TIFFOpen (opts->filename, "w");
+ else
+ tif = TIFFOpen ("frames.tif", "w");
+
n_frames = ring_buffer_get_num_blocks (buffer);
rows_per_strip = TIFFDefaultStripSize (tif, (guint32) - 1);
bytes_per_pixel = get_bytes_per_pixel (bits_per_pixel);
@@ -106,10 +111,6 @@ write_tiff (RingBuffer *buffer,
TIFFSetField (tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField (tif, TIFFTAG_ROWSPERSTRIP, rows_per_strip);
TIFFSetField (tif, TIFFTAG_PAGENUMBER, i, n_frames);
- /* start = ((gfloat *) data) + i * width * height; */
-
- /* for (guint y = 0; y < height; y++, start += width) */
- /* TIFFWriteScanline (tif, start, y, 0); */
for (guint y = 0; y < height; y++, offset += width * bytes_per_pixel)
TIFFWriteScanline (tif, data + offset, y, 0);
@@ -121,7 +122,8 @@ write_tiff (RingBuffer *buffer,
}
#else
static void
-write_raw (RingBuffer *buffer)
+write_raw (RingBuffer *buffer,
+ Options *opts)
{
guint n_frames;
gsize size;
@@ -134,7 +136,11 @@ write_raw (RingBuffer *buffer)
gchar *filename;
gpointer data;
- filename = g_strdup_printf ("frame-%08i.raw", i);
+ if (opts->filename)
+ filename = g_strdup_printf ("%s-%08i.raw", opts->filename, i);
+ else
+ filename = g_strdup_printf ("frame-%08i.raw", i);
+
fp = fopen(filename, "wb");
data = ring_buffer_get_pointer (buffer, i);
@@ -198,10 +204,10 @@ record_frames (UcaCamera *camera, Options *opts)
uca_camera_stop_recording (camera, &error);
#ifdef HAVE_LIBTIFF
- write_tiff (buffer, roi_width, roi_height, bits);
+ write_tiff (buffer, opts, roi_width, roi_height, bits);
g_print ("writing tiff\n");
#else
- write_raw (buffer);
+ write_raw (buffer, opts);
g_print ("writing raw\n");
#endif
@@ -222,12 +228,14 @@ main (int argc, char *argv[])
static Options opts = {
.n_frames = -1,
- .duration = -1.0
+ .duration = -1.0,
+ .filename = NULL
};
static GOptionEntry entries[] = {
{ "num-frames", 'n', 0, G_OPTION_ARG_INT, &opts.n_frames, "Number of frames to acquire", "N" },
{ "duration", 'd', 0, G_OPTION_ARG_DOUBLE, &opts.duration, "Duration in seconds", NULL },
+ { "output", 'o', 0, G_OPTION_ARG_STRING, &opts.filename, "Output file name", "FILE" },
{ NULL }
};
@@ -248,6 +256,11 @@ main (int argc, char *argv[])
exit (0);
}
+ if (opts.n_frames < 0 && opts.duration < 0.0) {
+ g_print ("You must specify at least one of --num-frames and --output.\n");
+ exit (1);
+ }
+
manager = uca_plugin_manager_new ();
camera = uca_plugin_manager_get_camera (manager, argv[1], &error, NULL);