diff options
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/benchmark.c | 11 | ||||
| -rw-r--r-- | tools/gen-doc.c | 83 | ||||
| -rw-r--r-- | tools/grab-async.c | 2 | ||||
| -rw-r--r-- | tools/grab.c | 4 | ||||
| -rw-r--r-- | tools/gui/control.c | 30 | ||||
| -rw-r--r-- | tools/perf-overhead.c | 2 | 
6 files changed, 112 insertions, 20 deletions
| diff --git a/tools/benchmark.c b/tools/benchmark.c index bff8b50..0939d78 100644 --- a/tools/benchmark.c +++ b/tools/benchmark.c @@ -100,7 +100,8 @@ grab_frames_sync (UcaCamera *camera, gpointer buffer, guint n_frames)      uca_camera_start_recording (camera, &error);      for (guint i = 0; i < n_frames; i++) { -        uca_camera_grab(camera, &buffer, &error); +        if (!uca_camera_grab (camera, buffer, &error)) +            g_warning ("Data stream ended");          if (error != NULL) {              g_warning ("Error grabbing frame %02i/%i: `%s'", i, n_frames, error->message); @@ -115,8 +116,12 @@ grab_frames_sync (UcaCamera *camera, gpointer buffer, guint n_frames)  static void  grab_callback (gpointer data, gpointer user_data)  { +    static GStaticMutex mutex = G_STATIC_MUTEX_INIT;      guint *n_acquired_frames = user_data; + +    g_static_mutex_lock (&mutex);      *n_acquired_frames += 1; +    g_static_mutex_unlock (&mutex);  }  static void @@ -136,7 +141,6 @@ grab_frames_async (UcaCamera *camera, gpointer buffer, guint n_frames)          ;      uca_camera_stop_recording (camera, &error); -  }  static void @@ -204,6 +208,7 @@ benchmark (UcaCamera *camera)      g_print ("# Sensor size: %ix%i\n", sensor_width, sensor_height);      g_print ("# ROI size: %ix%i\n", roi_width, roi_height);      g_print ("# Exposure time: %fs\n", exposure); +    g_print ("# Bits: %i\n", bits);      /* Synchronous frame acquisition */      g_print ("# %-10s%-10s%-10s%-16s%-16s\n", "type", "n_frames", "n_runs", "frames/s", "MiB/s"); @@ -250,7 +255,7 @@ main (int argc, char *argv[])      g_log_set_handler (NULL, G_LOG_LEVEL_MASK, log_handler, log_channel);      manager = uca_plugin_manager_new (); -    camera = uca_plugin_manager_get_camera (manager, argv[1], &error); +    camera = uca_plugin_manager_get_camera (manager, argv[1], &error, NULL);      if (camera == NULL) {          g_error ("Initialization: %s", error->message); diff --git a/tools/gen-doc.c b/tools/gen-doc.c index f555a5f..d27bdd8 100644 --- a/tools/gen-doc.c +++ b/tools/gen-doc.c @@ -67,9 +67,9 @@ print_property_toc (GParamSpec **pspecs, guint n_props)      g_print ("<h2>Properties</h2><ul id=\"toc\">");      for (guint i = 0; i < n_props; i++) { -        GParamSpec *pspec = pspecs[i];  +        GParamSpec *pspec = pspecs[i];          const gchar *name = g_param_spec_get_name (pspec); -     +          g_print ("<li><code><a href=#%s>\"%s\"</a></code></li>", name, name);      } @@ -77,21 +77,90 @@ print_property_toc (GParamSpec **pspecs, guint n_props)  }  static void +print_value_info (GParamSpec *pspec) +{ +    gchar *default_value = NULL; +    GString *range = g_string_new(""); + +#define MAKE_RANGE(spec_type, fmt)              \ +    {                                           \ +        spec_type *spec = (spec_type *) pspec;  \ +        g_string_printf (range,                                     \ +                         fmt" ≤ <em>%s</em> ≤ "fmt,     \ +                         spec->minimum,                             \ +                         g_param_spec_get_name (pspec),             \ +                         spec->maximum);                            \ +        default_value = g_strdup_printf (fmt, spec->default_value); \ +    } + +    switch (pspec->value_type) { +        case G_TYPE_BOOLEAN: +            { +                GParamSpecBoolean *spec = (GParamSpecBoolean *) pspec; +                default_value = spec->default_value ? g_strdup ("<code>TRUE</code>") : g_strdup ("<code>FALSE</code>"); +            } +            break; + +        case G_TYPE_UINT: +            MAKE_RANGE (GParamSpecUInt, "%i"); +            break; + +        case G_TYPE_FLOAT: +            MAKE_RANGE (GParamSpecFloat, "%.1e"); +            break; + +        case G_TYPE_DOUBLE: +            MAKE_RANGE (GParamSpecDouble, "%.1e"); +            break; +    } + +#undef MAKE_RANGE + +    if (g_type_is_a (pspec->value_type, G_TYPE_ENUM)) { +        GParamSpecEnum *spec = (GParamSpecEnum *) pspec; + +        if (spec->enum_class->n_values > 0) { +            g_string_printf (range, "<table><tr><th>Enum name</th><th>Value</th>"); + +            for (guint i = 0; i < spec->enum_class->n_values; i++) { +                GEnumValue *v = &spec->enum_class->values[i]; +                g_string_append_printf (range, +                                        "<tr><td><code>%s</code></td><td>%i</td></tr>", +                                        v->value_name, v->value); +            } + +            g_string_append_printf (range, "</table>"); +        } +    } + +    if (range->len > 0) +        g_print ("<p>Possible values: %s</p>", range->str); + +    if (default_value != NULL) { +        g_print ("<p>Default value: %s</p>", default_value); +        g_free (default_value); +    } + +    g_string_free (range, TRUE); +} + +static void  print_property_descriptions (GParamSpec **pspecs, guint n_props)  {      g_print ("<h2>Details</h2><dl>");      for (guint i = 0; i < n_props; i++) { -        GParamSpec *pspec = pspecs[i];  +        GParamSpec *pspec = pspecs[i];          const gchar *name = g_param_spec_get_name (pspec);          g_print ("<dt id=\"%s\"><a href=\"#toc\">%s</a></dt>\n", name, name);          g_print ("<dd>"); -        g_print ("<pre><code class=\"prop-type\">\"%s\" : %s : %s</code></pre>\n",  -                 name,  +        g_print ("<pre><code class=\"prop-type\">\"%s\" : %s : %s</code></pre>\n", +                 name,                   g_type_name (pspec->value_type),                   get_flags_description (pspec));          g_print ("<p>%s</p>\n", g_param_spec_get_blurb (pspec)); +        print_value_info (pspec);          g_print ("</dd>");      } @@ -104,7 +173,7 @@ print_properties (UcaCamera *camera)      GObjectClass *oclass;      GParamSpec **pspecs;      guint n_props; -     +      oclass = G_OBJECT_GET_CLASS (camera);      pspecs = g_object_class_list_properties (oclass, &n_props); @@ -136,7 +205,7 @@ int main(int argc, char *argv[])      }      else {          name = argv[1]; -        camera = uca_plugin_manager_get_camera (manager, name, &error); +        camera = uca_plugin_manager_get_camera (manager, name, &error, NULL);      }      if (camera == NULL) { diff --git a/tools/grab-async.c b/tools/grab-async.c index 2c4bf04..00f2879 100644 --- a/tools/grab-async.c +++ b/tools/grab-async.c @@ -94,7 +94,7 @@ main(int argc, char *argv[])      }      manager = uca_plugin_manager_new (); -    camera = uca_plugin_manager_get_camera (manager, argv[1], &error); +    camera = uca_plugin_manager_get_camera (manager, argv[1], &error, NULL);      if (camera == NULL) {          g_print("Error during initialization: %s\n", error->message); diff --git a/tools/grab.c b/tools/grab.c index 1518997..e8e91be 100644 --- a/tools/grab.c +++ b/tools/grab.c @@ -75,7 +75,7 @@ int main(int argc, char *argv[])      }      manager = uca_plugin_manager_new (); -    camera = uca_plugin_manager_get_camera (manager, argv[1], &error); +    camera = uca_plugin_manager_get_camera (manager, argv[1], &error, NULL);      if (camera == NULL) {          g_print("Error during initialization: %s\n", error->message); @@ -127,7 +127,7 @@ int main(int argc, char *argv[])          while (counter < 5) {              g_print(" grab frame ... ");              g_timer_start(timer); -            uca_camera_grab(camera, &buffer, &error); +            uca_camera_grab(camera, buffer, &error);              if (error != NULL) {                  g_print("\nError: %s\n", error->message); diff --git a/tools/gui/control.c b/tools/gui/control.c index f74e0f1..c177f07 100644 --- a/tools/gui/control.c +++ b/tools/gui/control.c @@ -135,6 +135,8 @@ update_pixbuf_dimensions (ThreadData *data)      if (data->pixbuf != NULL)          g_object_unref (data->pixbuf); +    data->display_width = (gint) data->width * data->zoom_factor; +    data->display_height = (gint) data->height * data->zoom_factor;      data->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, data->display_width, data->display_height);      data->pixels = gdk_pixbuf_get_pixels (data->pixbuf);      gtk_image_set_from_pixbuf (GTK_IMAGE (data->image), data->pixbuf); @@ -159,7 +161,8 @@ preview_frames (void *args)          gpointer buffer;          buffer = ring_buffer_get_current_pointer (data->buffer); -        uca_camera_grab (data->camera, &buffer, &error); +        uca_camera_trigger (data->camera, &error); +        uca_camera_grab (data->camera, buffer, &error);          if (error == NULL) {              convert_grayscale_to_rgb (data, buffer); @@ -189,7 +192,7 @@ record_frames (gpointer args)      while (data->state == RECORDING) {          buffer = ring_buffer_get_current_pointer (data->buffer); -        uca_camera_grab (data->camera, &buffer, NULL); +        uca_camera_grab (data->camera, buffer, NULL);          if (error == NULL) {              ring_buffer_proceed (data->buffer); @@ -343,7 +346,7 @@ download_frames (ThreadData *data)      while (error == NULL) {          buffer = ring_buffer_get_current_pointer (data->buffer); -        uca_camera_grab (data->camera, &buffer, &error); +        uca_camera_grab (data->camera, buffer, &error);          ring_buffer_proceed (data->buffer);          gdk_threads_enter ();          gtk_adjustment_set_value (data->download_adjustment, current_frame++); @@ -415,13 +418,25 @@ on_zoom_changed (GtkComboBox *widget, ThreadData *data)      gtk_combo_box_get_active_iter (widget, &iter);      gtk_tree_model_get (model, &iter, FACTOR_COLUMN, &factor, -1); -    data->display_width = (gint) data->width * factor; -    data->display_height = (gint) data->height * factor;      data->zoom_factor = factor;      update_pixbuf_dimensions (data);  }  static void +on_roi_width_changed (GObject *object, GParamSpec *pspec, ThreadData *data) +{ +    g_object_get (object, "roi-width", &data->width, NULL); +    update_pixbuf_dimensions (data); +} + +static void +on_roi_height_changed (GObject *object, GParamSpec *pspec, ThreadData *data) +{ +    g_object_get (object, "roi-height", &data->height, NULL); +    update_pixbuf_dimensions (data); +} + +static void  create_main_window (GtkBuilder *builder, const gchar* camera_name)  {      static ThreadData td; @@ -442,7 +457,7 @@ create_main_window (GtkBuilder *builder, const gchar* camera_name)      guint width, height;      GError  *error = NULL; -    camera = uca_plugin_manager_get_camera (plugin_manager, camera_name, &error); +    camera = uca_plugin_manager_get_camera (plugin_manager, camera_name, &error, NULL);      if ((camera == NULL) || (error != NULL)) {          g_error ("%s\n", error->message); @@ -455,6 +470,9 @@ create_main_window (GtkBuilder *builder, const gchar* camera_name)                    "sensor-bitdepth", &bits_per_sample,                    NULL); +    g_signal_connect (camera, "notify::roi-width", (GCallback) on_roi_width_changed, &td); +    g_signal_connect (camera, "notify::roi-height", (GCallback) on_roi_height_changed, &td); +      histogram_view      = egg_histogram_view_new ();      property_tree_view  = egg_property_tree_view_new (G_OBJECT (camera));      property_window     = GTK_CONTAINER (gtk_builder_get_object (builder, "property-window")); diff --git a/tools/perf-overhead.c b/tools/perf-overhead.c index 6735e6f..7661dbc 100644 --- a/tools/perf-overhead.c +++ b/tools/perf-overhead.c @@ -163,7 +163,7 @@ main (int argc, char *argv[])      }      manager = uca_plugin_manager_new (); -    camera = uca_plugin_manager_get_camera (manager, argv[1], &error); +    camera = uca_plugin_manager_get_camera (manager, argv[1], &error, NULL);      if (camera == NULL) {          g_print ("Error during initialization: %s\n", error->message); | 
