This commit is contained in:
parent
4aa5420472
commit
795119af99
|
@ -0,0 +1,15 @@
|
|||
#include "camera.h"
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#define DEPTH 32
|
||||
|
||||
Camera::Camera(int width, int height)
|
||||
{
|
||||
//SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
|
||||
pixels = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, DEPTH, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
|
||||
}
|
||||
|
||||
Camera::~Camera( void )
|
||||
{
|
||||
SDL_FreeSurface(pixels);
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#ifndef _CAMERA_H_
|
||||
#define _CAMERA_H_
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
class Camera
|
||||
{
|
||||
public:
|
||||
Camera( int width, int height );
|
||||
virtual ~Camera(void);
|
||||
virtual void update( void ) = 0;
|
||||
SDL_Surface* getSurface ( void ) { return pixels; }
|
||||
|
||||
protected:
|
||||
SDL_Surface *pixels;
|
||||
|
||||
};
|
||||
|
||||
#endif /* ifndef _CAMERA_H_ */
|
|
@ -0,0 +1,9 @@
|
|||
#include "state.h"
|
||||
#include "settings.h"
|
||||
#include "quickcam.h"
|
||||
|
||||
int main( void )
|
||||
{
|
||||
Quickcam cam("/dev/video0");
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
#include "quickcam.h"
|
||||
|
||||
//linux specific
|
||||
#include <sys/ioctl.h>
|
||||
#include <linux/videodev.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define WIDTH 640
|
||||
#define HEIGHT 480
|
||||
|
||||
Quickcam::Quickcam( char *device )
|
||||
: Camera(WIDTH, HEIGHT),
|
||||
bytes(WIDTH*HEIGHT*4)
|
||||
{
|
||||
fd = open(device, O_RDWR);
|
||||
if (fd == -1) {
|
||||
fprintf(stderr, "failed to open video device %s: %s\n", device, strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
struct video_capability cap;
|
||||
if (ioctl(fd, VIDIOCGCAP, &cap) == -1) {
|
||||
fprintf(stderr, "(querycap) %s\n", strerror(errno));
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
*/
|
||||
|
||||
struct video_picture pict;
|
||||
doOrDie(ioctl(fd, VIDIOCGPICT, &pict), "getpict");
|
||||
|
||||
pict.palette = VIDEO_PALETTE_RGB32;
|
||||
doOrDie(ioctl(fd, VIDIOCSPICT, &pict), "setpict");
|
||||
|
||||
struct video_window win;
|
||||
|
||||
//get window info
|
||||
doOrDie(ioctl(fd, VIDIOCGWIN, &win), "getwin");
|
||||
|
||||
win.width = WIDTH;
|
||||
win.height = HEIGHT;
|
||||
|
||||
//set window info
|
||||
doOrDie(ioctl(fd, VIDIOCSWIN, &win), "error setting window size");
|
||||
|
||||
}
|
||||
|
||||
Quickcam::~Quickcam( void )
|
||||
{
|
||||
close(fd);
|
||||
}
|
||||
|
||||
void Quickcam::doOrDie(int retval, char *message)
|
||||
{
|
||||
if (retval == -1) {
|
||||
fprintf(stderr, "%s: %s\n", message, strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
void Quickcam::update( void )
|
||||
{
|
||||
int read_sz = read(fd, pixels->pixels, bytes);
|
||||
doOrDie(read_sz, "read failure");
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef _QUICKCAM_H_
|
||||
#define _QUICKCAM_H_
|
||||
|
||||
#include "camera.h"
|
||||
|
||||
class Quickcam : public Camera
|
||||
{
|
||||
public:
|
||||
Quickcam( char *device );
|
||||
virtual ~Quickcam( void );
|
||||
|
||||
void update( void );
|
||||
|
||||
private:
|
||||
void doOrDie(int retval, char *message);
|
||||
|
||||
int fd;
|
||||
const int bytes; //number of bytes to read (width*height*bpp)
|
||||
|
||||
};
|
||||
|
||||
#endif /* ifndef _QUICKCAM_H_ */
|
|
@ -0,0 +1,6 @@
|
|||
#include "settings.h"
|
||||
|
||||
Settings::Settings( void )
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef _SETTINGS_H_
|
||||
#define _SETTINGS_H_
|
||||
|
||||
struct point
|
||||
{
|
||||
int x, y;
|
||||
};
|
||||
|
||||
enum type
|
||||
{
|
||||
BLACK = 0, WHITE, BOARD ,
|
||||
NUMVALS
|
||||
};
|
||||
|
||||
class Settings
|
||||
{
|
||||
|
||||
public:
|
||||
Settings( void );
|
||||
|
||||
|
||||
private:
|
||||
//upper left, upper right etc...
|
||||
point ul, ur, bl, br;
|
||||
//threshold for white and black
|
||||
int colorThreshold[2];
|
||||
|
||||
};
|
||||
|
||||
#endif /* ifndef _SETTINGS_H_ */
|
|
@ -0,0 +1,13 @@
|
|||
#include "state.h"
|
||||
|
||||
int State::size = 19;
|
||||
|
||||
State::State( void )
|
||||
{
|
||||
//does nothing yet
|
||||
}
|
||||
|
||||
State generateState (SDL_Surface *board)
|
||||
{
|
||||
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#ifndef _STATE_H_
|
||||
#define _STATE_H_
|
||||
|
||||
#include "settings.h"
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
/**
|
||||
* Describes the current state of a go board.
|
||||
*/
|
||||
class State
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Standard constructor
|
||||
*/
|
||||
State( void );
|
||||
|
||||
void setSize(int size) { State::size = size; }
|
||||
|
||||
static State generateState( SDL_Surface *board, Settings settings);
|
||||
|
||||
|
||||
private:
|
||||
static int size;
|
||||
|
||||
};
|
||||
|
||||
#endif /* ifndef _STATE_H_ */
|
Reference in New Issue