Revision: 6868
http://playerstage.svn.sourceforge.net/playerstage/?rev=6868&view=rev
Author: rtv
Date: 2008-07-14 23:20:39 -0700 (Mon, 14 Jul 2008)
Log Message:
-----------
added blobfinder interface support to player plugin
Modified Paths:
--------------
code/stage/trunk/libstageplugin/CMakeLists.txt
code/stage/trunk/libstageplugin/p_blobfinder.cc
code/stage/trunk/libstageplugin/p_driver.cc
Modified: code/stage/trunk/libstageplugin/CMakeLists.txt
===================================================================
--- code/stage/trunk/libstageplugin/CMakeLists.txt 2008-07-15 06:19:11 UTC
(rev 6867)
+++ code/stage/trunk/libstageplugin/CMakeLists.txt 2008-07-15 06:20:39 UTC
(rev 6868)
@@ -4,6 +4,7 @@
add_library( stageplugin MODULE
p_driver.cc
+ p_blobfinder.cc
p_simulation.cc
p_laser.cc
p_fiducial.cc
@@ -13,7 +14,6 @@
)
# p_graphics3d.cc
-# p_blobfinder.cc
target_link_libraries( stageplugin
Modified: code/stage/trunk/libstageplugin/p_blobfinder.cc
===================================================================
--- code/stage/trunk/libstageplugin/p_blobfinder.cc 2008-07-15 06:19:11 UTC
(rev 6867)
+++ code/stage/trunk/libstageplugin/p_blobfinder.cc 2008-07-15 06:20:39 UTC
(rev 6868)
@@ -37,16 +37,11 @@
#include "p_driver.h"
-extern "C" {
-int blobfinder_init( stg_model_t* mod );
-}
-
-
InterfaceBlobfinder::InterfaceBlobfinder( player_devaddr_t addr,
StgDriver* driver,
ConfigFile* cf,
int section )
- : InterfaceModel( addr, driver, cf, section, blobfinder_init )
+ : InterfaceModel( addr, driver, cf, section, MODEL_TYPE_BLOBFINDER )
{
// nothing to do for now
}
@@ -54,25 +49,16 @@
void InterfaceBlobfinder::Publish( void )
{
- size_t len=0;
- stg_blobfinder_blob_t* blobs = (stg_blobfinder_blob_t*)mod->data;
+ StgModelBlobfinder* blobmod = (StgModelBlobfinder*)this->mod;
+ uint32_t bcount = 0;
+ stg_blobfinder_blob_t* blobs = blobmod->GetBlobs( &bcount );
- size_t bcount = mod->data_len / sizeof(stg_blobfinder_blob_t);
-
- // limit the number of samples to Player's maximum
- if( bcount > PLAYER_BLOBFINDER_MAX_BLOBS )
- bcount = PLAYER_BLOBFINDER_MAX_BLOBS;
-
player_blobfinder_data_t bfd;
- memset( &bfd, 0, sizeof(bfd) );
+ bzero( &bfd, sizeof(bfd) );
- // get the configuration
- stg_blobfinder_config_t *cfg = (stg_blobfinder_config_t*)mod->cfg;
- assert(cfg);
-
// and set the image width * height
- bfd.width = cfg->scan_width;
- bfd.height = cfg->scan_height;
+ bfd.width = blobmod->scan_width;
+ bfd.height = blobmod->scan_height;
bfd.blobs_count = bcount;
// now run through the blobs, packing them into the player buffer
@@ -81,10 +67,6 @@
unsigned int b;
for( b=0; b<bcount; b++ )
{
- // I'm not sure the ACTS-area is really just the area of the
- // bounding box, or if it is in fact the pixel count of the
- // actual blob. Here it's just the rectangular area.
-
// useful debug - leave in
/*
cout << "blob "
@@ -97,38 +79,42 @@
<< endl;
*/
- bfd.blobs[b].x = blobs[b].xpos;
- bfd.blobs[b].y = blobs[b].ypos;
+ int dx = blobs[b].right - blobs[b].left;
+ int dy = blobs[b].top - blobs[b].bottom;
+
+ bfd.blobs[b].x = blobs[b].left + dx/2;
+ bfd.blobs[b].y = blobs[b].bottom + dy/2;
+
bfd.blobs[b].left = blobs[b].left;
bfd.blobs[b].right = blobs[b].right;
bfd.blobs[b].top = blobs[b].top;
bfd.blobs[b].bottom = blobs[b].bottom;
bfd.blobs[b].color = blobs[b].color;
- bfd.blobs[b].area = blobs[b].area;
+ bfd.blobs[b].area = dx * dy;
bfd.blobs[b].range = blobs[b].range;
}
// should change player interface to support variable-lenght blob data
// size_t size = sizeof(bfd) - sizeof(bfd.blobs) + bcount *
sizeof(bfd.blobs[0]);
-
- this->driver->Publish( this->addr, NULL,
- PLAYER_MSGTYPE_DATA,
- PLAYER_BLOBFINDER_DATA_BLOBS,
- &bfd, sizeof(bfd), NULL);
+
+ this->driver->Publish( this->addr,
+
PLAYER_MSGTYPE_DATA,
+
PLAYER_BLOBFINDER_DATA_BLOBS,
+ &bfd,
sizeof(bfd), NULL);
}
-int InterfaceBlobfinder::ProcessMessage( MessageQueue* resp_queue,
- player_msghdr_t* hdr,
- void* data )
+int InterfaceBlobfinder::ProcessMessage( QueuePointer& resp_queue,
+
player_msghdr_t* hdr,
+
void* data )
{
// todo: handle configuration requests
//else
{
// Don't know how to handle this message.
- PRINT_WARN2( "stg_blobfindeer doesn't support msg with type/subtype %d/%d",
+ PRINT_WARN2( "stg_blobfinder doesn't support msg with type/subtype %d/%d",
hdr->type, hdr->subtype);
return(-1);
}
Modified: code/stage/trunk/libstageplugin/p_driver.cc
===================================================================
--- code/stage/trunk/libstageplugin/p_driver.cc 2008-07-15 06:19:11 UTC (rev
6867)
+++ code/stage/trunk/libstageplugin/p_driver.cc 2008-07-15 06:20:39 UTC (rev
6868)
@@ -307,10 +307,10 @@
switch( player_addr.interf )
{
- // case PLAYER_BLOBFINDER_CODE:
- //ifsrc = new InterfaceBlobfinder( player_addr, this, cf, section );
- //break;
-
+ case PLAYER_BLOBFINDER_CODE:
+ ifsrc = new InterfaceBlobfinder( player_addr, this, cf, section );
+ break;
+
case PLAYER_SIMULATION_CODE:
ifsrc = new InterfaceSimulation( player_addr, this, cf, section );
break;
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