--Apple-Mail-5--110567426
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed
> Has anyone successfully used any of the Point Grey high resolution
> cameras (1024x768, 1600x1200, etc.) with ARToolkit under Windows? I'd
> like to have more tracking range and accuracy than I currently get
> with a 640x480 Firewire camera, and thought that these would be a good
> fit. Do they work with DSVideoLib or does one need to use the Point
> Grey API?
There is no reason it wouldn't work, except you will have to go through
the code and fix various hardcoded variables (e.g., various things
assume you won't go above 512x512, 640x480 or 1024x1024 ... throughout
the code).
It will obviously be slower, but it should give better accuracy.
Finally, the DSVideoLib will probably not work because PtGrey cameras
are not directshow compatible. I would use their API, it's faster and
far more robust than any of the DirectShow-based stuff (less layers, no
need to support generality).
I've attached an implementation of one of the older variations of the
AR Toolkit video api's, implemented using the PtGrey API. Should be a
breeze to update to match whatever you have.
(Oh, if someone wants to include this with the ARToolkit, it's fine by
me).
--Apple-Mail-5--110567426
Content-Type: multipart/appledouble;
boundary=Apple-Mail-6--110567426
Content-Disposition: attachment
--Apple-Mail-6--110567426
Content-Transfer-Encoding: base64
Content-Type: application/applefile;
name="ff4ar.cpp"
Content-Disposition: attachment;
filename=ff4ar.cpp
AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAAAoAAAADAAAASAAAAAkAAAACAAAA
UQAAAZpURVhUQ1dJRQAAZmY0YXIuY3BwAAABAAAAAVQAAABUAAAARgAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQA
AQABAAAASAAJTW9uYWNvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAEADAABAHKAnoAMAAE
AcoCerfXQjQAAAAAAAAAAAAAF0wBAAAAAQAAAAFUAAAAVAAAAEYACB7kdTsAAAAcAEYAAU1XQkIA
AAASTVBTUgAAAB4D8P//AAAAAAAAAAAD7f//AAAACAAAAAA=
--Apple-Mail-6--110567426
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
x-mac-type=54455854;
x-unix-mode=0666;
x-mac-creator=43574945;
name="ff4ar.cpp"
Content-Disposition: attachment;
filename=ff4ar.cpp
#include <windows.h>=0D
#include <video.h>=0D
#include <stdio.h>=0D
#include "PGRFlyCapture.h"=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
FlyCaptureContext context;=0D
BYTE *ffp =3D NULL;=0D
=0D
FlyCaptureVideoMode ffFormat =3D FLYCAPTURE_VIDEOMODE_640x480RGB;=0D
FlyCaptureFrameRate ffSpeed =3D FLYCAPTURE_FRAMERATE_15;=0D
=0D
int bWantBGR =3D FALSE;=0D
int ffw =3D 640;=0D
int ffh =3D 480;=0D
int ffpitch =3D ffw*3;=0D
BYTE *buf =3D NULL;=0D
FlyCaptureVideoMode ffvm =3D ffFormat;=0D
int isopen =3D FALSE;=0D
=0D
//#define DOPRINTS=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
int arVideoOpen(char *config)=0D
{=0D
//printf("initializing ff video... (%s)\n", config);=0D
int iCam =3D 0;=0D
ffFormat =3D FLYCAPTURE_VIDEOMODE_640x480RGB;=0D
ffSpeed =3D FLYCAPTURE_FRAMERATE_15;=0D
=0D
isopen =3D FALSE;=0D
if (config)=0D
{=0D
// config string: "iCam# res rate type tobgr" =0D
char *p =3D strtok(config, " ");=0D
if (p) iCam =3D strtol(p, NULL, 10);=0D
=0D
p =3D strtok(NULL, " ");=0D
int res =3D strtol(p, NULL, 10);=0D
p =3D strtok(NULL, " ");=0D
int rate =3D strtol(p, NULL, 10);=0D
p =3D strtok(NULL, " ");=0D
int type =3D -1;=0D
if (strcmp(p, "RGB") || strcmp(p, "rgb")) type =3D 0;=0D
if (strcmp(p, "YUV") || strcmp(p, "yuv")) type =3D 1;=0D
if (strcmp(p, "GREY") || strcmp(p, "grey")) type =3D 2; =0D
p =3D strtok(NULL, " ");=0D
if (p) bWantBGR =3D strtol(p, NULL, 10);=0D
=0D
switch (res + type) {=0D
case 161: // 160x120 YUV444=0D
ffFormat =3D FLYCAPTURE_VIDEOMODE_160x120YUV444;=0D
break;=0D
case 321: // 320x240 YUV422=0D
ffFormat =3D FLYCAPTURE_VIDEOMODE_320x240YUV422;=0D
break;=0D
case 641: // 640x480 YUV422=0D
ffFormat =3D FLYCAPTURE_VIDEOMODE_640x480YUV422;=0D
break;=0D
case 640: // 640x480 24-bit RGB=0D
ffFormat =3D FLYCAPTURE_VIDEOMODE_640x480RGB;=0D
break;=0D
case 642: // 640x480 8-bit greyscale=0D
ffFormat =3D FLYCAPTURE_VIDEOMODE_640x480Y8;=0D
break;=0D
default:=0D
#ifdef DOPRINTS=0D
printf("Invalid size or type in config '%s'\n", =
config);=0D
#endif =0D
return -1;=0D
}=0D
=0D
switch (rate) {=0D
case 1:=0D
case 2: // 1.875 fps. (Frames per second)=0D
ffSpeed =3D FLYCAPTURE_FRAMERATE_1_875;=0D
break;=0D
case 3:=0D
case 4: // 3.75 fps.=0D
ffSpeed =3D FLYCAPTURE_FRAMERATE_3_75;=0D
break;=0D
case 7:=0D
case 8: // 7.5 fps.=0D
ffSpeed =3D FLYCAPTURE_FRAMERATE_7_5;=0D
break;=0D
case 15: // 15 fps.=0D
ffSpeed =3D FLYCAPTURE_FRAMERATE_15;=0D
break;=0D
case 30: // 30 fps.=0D
ffSpeed =3D FLYCAPTURE_FRAMERATE_30;=0D
break;=0D
default:=0D
#ifdef DOPRINTS=0D
printf("Invalid speed in config '%s'\n", config);=0D
#endif =0D
return -1;=0D
}=0D
=0D
#ifdef DOPRINTS=0D
printf("Config string: %s\n", config);=0D
printf("Video Setting:\n iCam: %d\n", iCam);=0D
printf(" format: %u\n", ffFormat);=0D
printf(" framerate: %u\n", ffSpeed);=0D
printf(" YUV/RGB -> BGR: %d\n", bWantBGR);=0D
#endif=0D
}=0D
=0D
// create FLYCAPTURE context=0D
if(flycaptureCreateContext(&context) !=3D FLYCAPTURE_OK)=0D
{=0D
#ifdef DOPRINTS=0D
printf("failed to create ff context\n");=0D
#endif=0D
goto finish3;=0D
}=0D
=0D
// initialize first camera on bus=0D
if(flycaptureInitialize(context, 0) !=3D FLYCAPTURE_OK)=0D
{ =0D
#ifdef DOPRINTS=0D
printf("failed to init cam 0\n");=0D
#endif=0D
goto finish2;=0D
}=0D
=0D
// start grabbing images...=0D
if(flycaptureStart(context, ffFormat, ffSpeed) !=3D FLYCAPTURE_OK)=0D
{=0D
#ifdef DOPRINTS=0D
printf("failed to start grabbing\n");=0D
#endif=0D
goto finish2;=0D
}=0D
=0D
if(flycaptureGrabImage(context, &ffp, &ffh, &ffw, &ffpitch, &ffvm) !=3D=
FLYCAPTURE_OK)=0D
{=0D
#ifdef DOPRINTS=0D
printf("failed to grab first image\n");=0D
#endif=0D
goto finish1;=0D
}=0D
=0D
isopen =3D TRUE;=0D
return 0;=0D
=0D
finish1:=0D
// stop grabbing images...=0D
if(flycaptureStop(context) !=3D FLYCAPTURE_OK)=0D
{=0D
#ifdef DOPRINTS=0D
printf("failed to stop grabbing\n");=0D
#endif=0D
}=0D
=0D
finish2:=0D
if(flycaptureDestroyContext(context) !=3D FLYCAPTURE_OK)=0D
{=0D
}=0D
=0D
finish3:=0D
isopen =3D FALSE;=0D
return -1;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
int arVideoClose()=0D
{=0D
if (isopen =3D=3D FALSE) return -1;=0D
isopen =3D FALSE;=0D
=0D
if (buf){ free(buf); buf =3D NULL; }=0D
=0D
// stop grabbing images...=0D
if(flycaptureStop(context) !=3D FLYCAPTURE_OK)=0D
{=0D
#ifdef DOPRINTS=0D
printf("failed to stop grabbing\n");=0D
#endif=0D
}=0D
=0D
if(flycaptureDestroyContext(context) !=3D FLYCAPTURE_OK)=0D
{=0D
return -1;=0D
}=0D
return 0;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
int arVideoDispOption()=0D
{=0D
return -1;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
int arVideoInqSize(long *x, long *y)=0D
{=0D
if (isopen =3D=3D FALSE) return -1;=0D
if (x) *x =3D ffw;=0D
if (y) *y =3D ffh;=0D
return 0;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
ARUint8 *arVideoGetImage()=0D
{=0D
if (isopen =3D=3D FALSE) return NULL;=0D
if(flycaptureGrabImage(context, &ffp, &ffh, &ffw, &ffpitch, &ffvm) !=3D=
FLYCAPTURE_OK)=0D
{=0D
return NULL;=0D
}=0D
=0D
// if they want BGR instead of the native format, convert =0D
if (bWantBGR)=0D
{=0D
switch(ffvm)=0D
{=0D
case FLYCAPTURE_VIDEOMODE_160x120YUV444:=0D
case FLYCAPTURE_VIDEOMODE_320x240YUV422:=0D
case FLYCAPTURE_VIDEOMODE_640x480YUV411:=0D
case FLYCAPTURE_VIDEOMODE_640x480YUV422:=0D
case FLYCAPTURE_VIDEOMODE_640x480Y8:=0D
case FLYCAPTURE_VIDEOMODE_640x480Y16:=0D
if (!buf) buf =3D (BYTE*)malloc(ffw*ffh*3);=0D
if (flycaptureConvertToBGR24(ffp, ffw*ffh, buf, ffvm) !=3D =
FLYCAPTURE_OK)=0D
{=0D
#ifdef DOPRINTS=0D
printf("Failed to convert YUV to BGR\n");=0D
#endif=0D
return NULL;=0D
}=0D
return buf; =0D
break;=0D
=0D
case FLYCAPTURE_VIDEOMODE_640x480RGB:=0D
if (flycaptureInplaceRGB24toBGR24(ffp, ffw*ffh) !=3D =
FLYCAPTURE_OK)=0D
{=0D
#ifdef DOPRINTS=0D
printf("Failed to convert RGB -> BGR\n");=0D
#endif=0D
return NULL;=0D
}=0D
=0D
return ffp;=0D
break;=0D
}=0D
=0D
}=0D
return (ARUint8*)ffp;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
int arVideoCapStart()=0D
{=0D
return 0;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
int arVideoCapStop()=0D
{=0D
return 0;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
=0D
int arVideoCapNext()=0D
{=0D
return 0;=0D
}=0D
=0D
///////////////////////////////////////////////////////////=0D
--Apple-Mail-6--110567426--
--Apple-Mail-5--110567426
Content-Type: multipart/appledouble;
boundary=Apple-Mail-7--110567425
Content-Disposition: attachment
--Apple-Mail-7--110567425
Content-Transfer-Encoding: base64
Content-Type: application/applefile;
name="video.h"
Content-Disposition: attachment;
filename=video.h
AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAAPgAAAAoAAAADAAAASAAAAAcAAAACAAAA
TwAAAZpURVhUQ1dJRQAAdmlkZW8uaAAAAQAAAAFUAAAAVAAAAEYAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAEA
AQAAAEgACU1vbmFjbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAAwAAQD8wICADAABAPz
AgK30hrWAAAAAAAAAAAAAAAAAQAAAAEAAAABVAAAAFQAAABGAAge5HVFAAAAHABGAAFNV0JCAAAA
Ek1QU1IAAAAeA/D//wAAAAAAAAAAA+3//wAAAAgAAAAA
--Apple-Mail-7--110567425
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
x-mac-type=54455854;
x-unix-mode=0666;
x-mac-creator=43574945;
name="video.h"
Content-Disposition: attachment;
filename=video.h
/*******************************************************=0D
*=0D
* Author: Hirokazu Kato, Atsishi Nakazawa=0D
*=0D
* kato@s ........................=0D
* nakazawa@i ..........................=0D
*=0D
* Revision: 4.1=0D
* Date: 99/07/16=0D
*=0D
*******************************************************/=0D
=0D
#ifndef AR_VIDEO_H=0D
#define AR_VIDEO_H=0D
#ifdef __cplusplus=0D
extern "C" {=0D
#endif=0D
=0D
//#define NOVIDEO=0D
#ifndef NOVIDEO=0D
=0D
int arVideoOpen(char *config);=0D
int arVideoClose( void );=0D
=0D
#define ARUint8 unsigned char=0D
=0D
#ifdef _WIN32=0D
int arVideoInqSize( long *x, long *y );=0D
ARUint8 *arVideoGetImage( void );=0D
#endif=0D
=0D
#endif=0D
=0D
#ifdef __cplusplus=0D
}=0D
#endif=0D
#endif=0D
--Apple-Mail-7--110567425--
--Apple-Mail-5--110567426--
|