Revision: 7093
http://playerstage.svn.sourceforge.net/playerstage/?rev=7093&view=rev
Author: veedee
Date: 2008-10-10 16:18:50 +0000 (Fri, 10 Oct 2008)
Log Message:
-----------
client code supporting the new stereo interface
Modified Paths:
--------------
code/player/trunk/client_libs/libplayerc/CMakeLists.txt
code/player/trunk/client_libs/libplayerc/client.c
code/player/trunk/client_libs/libplayerc/playerc.h
Added Paths:
-----------
code/player/trunk/client_libs/libplayerc/dev_stereo.c
Modified: code/player/trunk/client_libs/libplayerc/CMakeLists.txt
===================================================================
--- code/player/trunk/client_libs/libplayerc/CMakeLists.txt 2008-10-10
16:15:16 UTC (rev 7092)
+++ code/player/trunk/client_libs/libplayerc/CMakeLists.txt 2008-10-10
16:18:50 UTC (rev 7093)
@@ -46,6 +46,7 @@
dev_sonar.c
dev_speech.c
dev_speech_recognition.c
+ dev_stereo.c
dev_vectormap.c
dev_wifi.c
dev_wsn.c)
Modified: code/player/trunk/client_libs/libplayerc/client.c
===================================================================
--- code/player/trunk/client_libs/libplayerc/client.c 2008-10-10 16:15:16 UTC
(rev 7092)
+++ code/player/trunk/client_libs/libplayerc/client.c 2008-10-10 16:18:50 UTC
(rev 7093)
@@ -663,7 +663,6 @@
if((ret = playerc_client_readpacket (client, &header, client->data)) < 0)
return ret;
}
-
// One way or another, we got a new packet into (header,client->data),
// so process it
switch(header.type)
Added: code/player/trunk/client_libs/libplayerc/dev_stereo.c
===================================================================
--- code/player/trunk/client_libs/libplayerc/dev_stereo.c
(rev 0)
+++ code/player/trunk/client_libs/libplayerc/dev_stereo.c 2008-10-10
16:18:50 UTC (rev 7093)
@@ -0,0 +1,142 @@
+/*
+ * libplayerc : a Player client library
+ * Copyright (C) Andrew Howard 2002-2003
+ * *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+/***************************************************************************
+ * Desc: Stereo device proxy
+ * Author: Radu Bogdan Rusu
+ * Date: 5 June 2008
+ **************************************************************************/
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "playerc.h"
+#include "error.h"
+
+// Process incoming data
+void playerc_stereo_putmsg (playerc_stereo_t *device,
+ player_msghdr_t *header,
+ void *data);
+
+// Create a new stereo proxy
+playerc_stereo_t *playerc_stereo_create (playerc_client_t *client, int index)
+{
+ playerc_stereo_t *device;
+
+ device = malloc (sizeof (playerc_stereo_t));
+ memset (device, 0, sizeof (playerc_stereo_t));
+
+ playerc_device_init (&device->info, client, PLAYER_STEREO_CODE, index,
+ (playerc_putmsg_fn_t) playerc_stereo_putmsg);
+
+ return device;
+}
+
+// Destroy a stereo proxy
+void playerc_stereo_destroy (playerc_stereo_t *device)
+{
+ playerc_device_term (&device->info);
+ free (device->left_channel.image);
+ free (device->right_channel.image);
+ free (device->disparity.image);
+// free (device->pointcloud.points);
+ free (device->points);
+ free (device);
+
+ return;
+}
+
+// Subscribe to the stereo device
+int playerc_stereo_subscribe (playerc_stereo_t *device, int access)
+{
+ return playerc_device_subscribe (&device->info, access);
+}
+
+
+// Un-subscribe from the stereo device
+int playerc_stereo_unsubscribe (playerc_stereo_t *device)
+{
+ return playerc_device_unsubscribe (&device->info);
+}
+
+// Process incoming data
+void playerc_stereo_putmsg (playerc_stereo_t *device,
+ player_msghdr_t *header,
+ void *data)
+{
+ if((header->type == PLAYER_MSGTYPE_DATA) &&
+ (header->subtype == PLAYER_STEREO_DATA_STATE))
+ {
+ player_stereo_data_t* s_data = (player_stereo_data_t*)data;
+
+ device->left_channel.width = s_data->left_channel.width;
+ device->left_channel.height = s_data->left_channel.height;
+ device->left_channel.bpp = s_data->left_channel.bpp;
+ device->left_channel.format = s_data->left_channel.format;
+ device->left_channel.fdiv = s_data->left_channel.fdiv;
+ device->left_channel.compression = s_data->left_channel.compression;
+ device->left_channel.image_count = s_data->left_channel.image_count;
+ device->left_channel.image = realloc (device->left_channel.image,
sizeof (device->left_channel.image[0]) * device->left_channel.image_count);
+
+ device->right_channel.width = s_data->right_channel.width;
+ device->right_channel.height = s_data->right_channel.height;
+ device->right_channel.bpp = s_data->right_channel.bpp;
+ device->right_channel.format = s_data->right_channel.format;
+ device->right_channel.fdiv = s_data->right_channel.fdiv;
+ device->right_channel.compression = s_data->right_channel.compression;
+ device->right_channel.image_count = s_data->right_channel.image_count;
+ device->right_channel.image = realloc (device->right_channel.image,
sizeof (device->right_channel.image[0]) * device->right_channel.image_count);
+
+ device->disparity.width = s_data->disparity.width;
+ device->disparity.height = s_data->disparity.height;
+ device->disparity.bpp = s_data->disparity.bpp;
+ device->disparity.format = s_data->disparity.format;
+ device->disparity.fdiv = s_data->disparity.fdiv;
+ device->disparity.compression = s_data->disparity.compression;
+ device->disparity.image_count = s_data->disparity.image_count;
+ device->disparity.image = realloc (device->disparity.image, sizeof
(device->disparity.image[0]) * device->disparity.image_count);
+
+ if (device->left_channel.image)
+ memcpy (device->left_channel.image, s_data->left_channel.image,
device->left_channel.image_count);
+ else if (device->left_channel.image_count != 0)
+ PLAYERC_ERR1 ("failed to allocate memory for left image, needed %d
bytes\n", sizeof (device->left_channel.image[0]) *
device->left_channel.image_count);
+
+ if (device->right_channel.image)
+ memcpy (device->right_channel.image, s_data->right_channel.image,
device->right_channel.image_count);
+ else if (device->right_channel.image_count != 0)
+ PLAYERC_ERR1 ("failed to allocate memory for right image, needed %d
bytes\n", sizeof (device->right_channel.image[0]) *
device->right_channel.image_count);
+
+ if (device->disparity.image)
+ memcpy (device->disparity.image, s_data->disparity.image,
device->disparity.image_count);
+ else if (device->disparity.image_count != 0)
+ PLAYERC_ERR1 ("failed to allocate memory for disparity image, needed %d
bytes\n", sizeof (device->disparity.image[0]) * device->disparity.image_count);
+
+/* device->pointcloud.points_count = s_data->pointcloud.points_count;
+ device->pointcloud.points = realloc (device->pointcloud.points,
device->pointcloud.points_count * sizeof (device->pointcloud.points[0]));
+ if (device->pointcloud.points)
+ memcpy (device->pointcloud.points, s_data->pointcloud.points, sizeof
(player_pointcloud3d_element_t)*device->pointcloud.points_count);*/
+ device->points_count = s_data->points_count;
+ device->points = realloc (device->points, device->points_count * sizeof
(device->points[0]));
+ if (device->points)
+ memcpy (device->points, s_data->points, sizeof
(playerc_pointcloud3d_stereo_element_t)*device->points_count);
+ }
+ else
+ PLAYERC_WARN2 ("skipping stereo message with unknown type/subtype:
%s/%d\n",
+ msgtype_to_str(header->type), header->subtype);
+}
Modified: code/player/trunk/client_libs/libplayerc/playerc.h
===================================================================
--- code/player/trunk/client_libs/libplayerc/playerc.h 2008-10-10 16:15:16 UTC
(rev 7092)
+++ code/player/trunk/client_libs/libplayerc/playerc.h 2008-10-10 16:18:50 UTC
(rev 7093)
@@ -3413,6 +3413,53 @@
/**************************************************************************/
/** @ingroup playerc_proxies
+ @defgroup playerc_proxy_stereo stereo
+
+The stereo proxy provides an interface to a stereo device.
+
[EMAIL PROTECTED]
+*/
+/** @brief Structure describing a single 3D pointcloud element. */
+typedef player_pointcloud3d_stereo_element_t
playerc_pointcloud3d_stereo_element_t;
+
+/** @brief stereo proxy data. */
+typedef struct
+{
+ /** Device info; must be at the start of all device structures. */
+ playerc_device_t info;
+
+ /* Left channel image */
+ playerc_camera_t left_channel;
+ /* Right channel image */
+ playerc_camera_t right_channel;
+
+ /* Disparity image */
+ playerc_camera_t disparity;
+
+ /* 3-D stereo point cloud */
+ uint32_t points_count;
+ playerc_pointcloud3d_stereo_element_t *points;
+// player_pointcloud3d_data_t pointcloud;
+} playerc_stereo_t;
+
+
+/** @brief Create a stereo proxy. */
+playerc_stereo_t *playerc_stereo_create (playerc_client_t *client, int index);
+
+/** @brief Destroy a stereo proxy. */
+void playerc_stereo_destroy (playerc_stereo_t *device);
+
+/** @brief Subscribe to the stereo device. */
+int playerc_stereo_subscribe (playerc_stereo_t *device, int access);
+
+/** @brief Un-subscribe from the stereo device. */
+int playerc_stereo_unsubscribe (playerc_stereo_t *device);
+
+/** @} */
+/***************************************************************************/
+
+/**************************************************************************/
+/** @ingroup playerc_proxies
@defgroup playerc_proxy_imu imu
The imu proxy provides an interface to an Inertial Measurement Unit.
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit