diff options
author | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2012-03-06 16:57:36 +0100 |
---|---|---|
committer | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2012-03-06 16:57:36 +0100 |
commit | eae2ae49770bcbcdbac3997676c71820dd53fdcc (patch) | |
tree | f39b61f6ea2bd30620879595b0fa7c51093bc084 /test | |
parent | 09d05f26269799e643c171849f22d24c30836d00 (diff) | |
download | libuca-eae2ae49770bcbcdbac3997676c71820dd53fdcc.tar.gz libuca-eae2ae49770bcbcdbac3997676c71820dd53fdcc.tar.bz2 libuca-eae2ae49770bcbcdbac3997676c71820dd53fdcc.tar.xz libuca-eae2ae49770bcbcdbac3997676c71820dd53fdcc.zip |
Implement single frame grabbing
Diffstat (limited to 'test')
-rw-r--r-- | test/CMakeLists.txt | 3 | ||||
-rw-r--r-- | test/grab.c | 73 | ||||
-rw-r--r-- | test/test-all.c | 38 |
3 files changed, 57 insertions, 57 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6e2e0d5..c14e7ce 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -15,11 +15,12 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/run.py ${CMAKE_CURRENT_BINARY_DIR}) # --- Build targets ----------------------------------------------------------- #add_executable(enum enum.c) +add_executable(grab grab.c) #add_executable(grab-async grab-async.c) #add_executable(benchmark benchmark.c) #target_link_libraries(enum uca) -#target_link_libraries(grab uca) +target_link_libraries(grab uca-gobject) #target_link_libraries(grab-async uca) #target_link_libraries(benchmark uca) diff --git a/test/grab.c b/test/grab.c index 740522b..56b7cd6 100644 --- a/test/grab.c +++ b/test/grab.c @@ -15,80 +15,69 @@ with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA */ +#include <glib-object.h> +#include <signal.h> #include <stdio.h> #include <stdlib.h> -#include <signal.h> -#include <unistd.h> -#include "uca.h" +#include "uca-camera.h" #define handle_error(errno) {if ((errno) != UCA_NO_ERROR) printf("error at <%s:%i>\n", \ __FILE__, __LINE__);} -uca *u = NULL; +static UcaCamera *camera = NULL; void sigint_handler(int signal) { printf("Closing down libuca\n"); - handle_error(uca_cam_stop_recording(u->cameras)); - uca_destroy(u); + uca_camera_stop_recording(camera, NULL); + g_object_unref(camera); exit(signal); } int main(int argc, char *argv[]) { + GError *error = NULL; (void) signal(SIGINT, sigint_handler); - u = uca_init(NULL); - if (u == NULL) { - printf("Couldn't find a camera\n"); + g_type_init(); + camera = uca_camera_new("pco", &error); + + if (camera == NULL) { + g_print("Couldn't initialize camera\n"); return 1; } - /* take first camera */ - uca_camera *cam = u->cameras; - - uint32_t val = 5000; - handle_error(uca_cam_set_property(cam, UCA_PROP_EXPOSURE, &val)); - val = 0; - handle_error(uca_cam_set_property(cam, UCA_PROP_DELAY, &val)); - val = UCA_TIMESTAMP_ASCII | UCA_TIMESTAMP_BINARY; - handle_error(uca_cam_set_property(cam, UCA_PROP_TIMESTAMP_MODE, &val)); - val = 1; - handle_error(uca_cam_set_property(cam, UCA_PROP_GRAB_AUTO, &val)); - - uint32_t width, height, bits; - handle_error(uca_cam_get_property(cam, UCA_PROP_WIDTH, &width, 0)); - handle_error(uca_cam_get_property(cam, UCA_PROP_HEIGHT, &height, 0)); - handle_error(uca_cam_get_property(cam, UCA_PROP_BITDEPTH, &bits, 0)); - - handle_error(uca_cam_alloc(cam, 20)); + guint width, height, bits; + g_object_get(G_OBJECT(camera), + "sensor-width", &width, + "sensor-height", &height, + "sensor-bitdepth", &bits, + NULL); const int pixel_size = bits == 8 ? 1 : 2; - uint16_t *buffer = (uint16_t *) malloc(width * height * pixel_size); + gpointer buffer = g_malloc0(width * height * pixel_size); - handle_error(uca_cam_start_recording(cam)); - /* sleep(3); */ + uca_camera_start_recording(camera, &error); - uint32_t error = UCA_NO_ERROR; - char filename[FILENAME_MAX]; - int counter = 0; + gchar filename[FILENAME_MAX]; + gint counter = 0; - while ((error == UCA_NO_ERROR) && (counter < 20)) { - printf(" grab frame ... "); - error = uca_cam_grab(cam, (char *) buffer, NULL); - if (error != UCA_NO_ERROR) + while (counter < 20) { + g_print(" grab frame ... "); + uca_camera_grab(camera, &buffer, &error); + if (error != NULL) break; - printf("done\n"); + g_print("done\n"); snprintf(filename, FILENAME_MAX, "frame-%08i.raw", counter++); FILE *fp = fopen(filename, "wb"); fwrite(buffer, width*height, pixel_size, fp); fclose(fp); } - handle_error(uca_cam_stop_recording(cam)); - uca_destroy(u); - free(buffer); + uca_camera_stop_recording(camera, &error); + g_object_unref(camera); + g_free(buffer); - return error != UCA_NO_ERROR ? 1 : 0; + return error != NULL ? 1 : 0; } diff --git a/test/test-all.c b/test/test-all.c index 3fb81e7..f6e3002 100644 --- a/test/test-all.c +++ b/test/test-all.c @@ -47,24 +47,16 @@ static void test_recording(Fixture *fixture, gconstpointer data) g_error_free(error); error = NULL; - uca_camera_start_recording(camera, &error); - g_assert_no_error(error); - uca_camera_stop_recording(camera, &error); - g_assert_no_error(error); -} - -static void test_recording_signal(Fixture *fixture, gconstpointer data) -{ - UcaCamera *camera = UCA_CAMERA(fixture->camera); gboolean success = FALSE; g_signal_connect(G_OBJECT(camera), "notify::is-recording", (GCallback) on_property_change, &success); - - uca_camera_start_recording(camera, NULL); + uca_camera_start_recording(camera, &error); + g_assert_no_error(error); g_assert(success == TRUE); success = FALSE; - uca_camera_stop_recording(camera, NULL); + uca_camera_stop_recording(camera, &error); + g_assert_no_error(error); g_assert(success == TRUE); } @@ -99,6 +91,24 @@ static void test_recording_async(Fixture *fixture, gconstpointer data) uca_camera_stop_recording(camera, &error); g_assert_no_error(error); + g_assert(success == TRUE); +} + +static void test_recording_grab(Fixture *fixture, gconstpointer data) +{ + UcaCamera *camera = UCA_CAMERA(fixture->camera); + GError *error = NULL; + gpointer frame = NULL; + + uca_camera_start_recording(camera, &error); + g_assert_no_error(error); + + uca_camera_grab(camera, &frame, &error); + g_assert_no_error(error); + g_assert(frame != NULL); + + uca_camera_stop_recording(camera, &error); + g_assert_no_error(error); } static void test_recording_property(Fixture *fixture, gconstpointer data) @@ -165,7 +175,7 @@ int main(int argc, char *argv[]) */ static const gchar *paths[] = { "/recording", - "/recording/signal", + "/recording/grab", "/recording/asynchronous", "/properties/base", "/properties/recording", @@ -175,7 +185,7 @@ int main(int argc, char *argv[]) static UcaFixtureFunc test_funcs[] = { test_recording, - test_recording_signal, + test_recording_grab, test_recording_async, test_base_properties, test_recording_property, |