Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1422 → Rev 1423

/demos/trunk/bttvdemo/bttv.c
34,12 → 34,10
*/
 
#include "kernel/kern.h"
#include <drivers/fg.h>
#include <drivers/glib.h>
#include <drivers/keyb.h>
#include <unistd.h>
#include <stdlib.h>
 
#include "drivers/shark_keyb26.h"
#include "drivers/shark_videodev26.h"
 
#define WIDTH 640
#define HEIGHT 480
#define BYTES_PP 2
53,39 → 51,72
#define FG_W 320
#define FG_H 200
 
unsigned int color = FG_MONO;
void program_end(void *arg)
{
 
extern DWORD flbaddr;
sys_end();
}
 
static void screen()
{
TASK grab_task(void *arg) {
 
/* graphic card Initialization */
if (grx_init() < 1) {
sys_abort(1);
}
if (grx_open(640, 480, 16) < 0) {
cprintf("GRX Err\n");
sys_abort(1);
}
struct video_picture vpic;
struct video_buffer fbuf;
struct video_window win;
struct video_channel chan;
 
video_buf = (unsigned char *)flbaddr;
}
task_nopreempt();
 
void program_end(void *arg)
{
VIDEODEV26_open(0);
VIDEODEV26_ioctl(0,VIDIOCGCHAN,(unsigned long)&chan);
chan.channel = (int)(arg);
VIDEODEV26_ioctl(0,VIDIOCSCHAN,(unsigned long)&chan);
VIDEODEV26_ioctl(0,VIDIOCGPICT,(unsigned long)&vpic);
vpic.palette = VIDEO_PALETTE_RGB565;
VIDEODEV26_ioctl(0,VIDIOCSPICT,(unsigned long)&vpic);
fbuf.base = malloc(640*480*2);
fbuf.width = 320;
fbuf.height = 200;
fbuf.bytesperline = 640*2;
fbuf.depth = 16;
VIDEODEV26_ioctl(0,VIDIOCSFBUF,(unsigned long)&fbuf);
 
grx_close();
VIDEODEV26_ioctl(0,VIDIOCGWIN,(unsigned long)&win);
 
sys_end();
win.x = 0;
win.y = 0;
win.width = 320;
win.height = 200;
VIDEODEV26_ioctl(0,VIDIOCSWIN,(unsigned long)&win);
task_preempt();
while(1) {
task_nopreempt();
VIDEODEV26_ioctl(0,VIDIOCCAPTURE,NULL);
 
task_preempt();
 
task_endcycle();
 
}
 
}
 
void elaborate_image(void *imageptr)
{
 
/*
WORD x,y;
BYTE *col;
 
112,9 → 143,9
}
 
}
 
//printf_xy(0,0,WHITE,"Grabbed = %08lx",*(DWORD *)(imageptr + 50*FG_W + 50));
//printf_xy(0,1,WHITE,"Grabbed = %08lx",*(DWORD *)(imageptr + 51*FG_W + 50));
*/
printf_xy(0,0,WHITE,"Grabbed = %08lx",*(DWORD *)(imageptr + 50*FG_W + 50));
printf_xy(0,1,WHITE,"Grabbed = %08lx",*(DWORD *)(imageptr + 51*FG_W + 50));
}
 
121,33 → 152,27
int main(int argc, char **argv)
{
 
int channel = 0;
if (argc < 2) {
channel = 0;
} else {
channel = atoi(argv[1]);
}
sys_atrunlevel(program_end,NULL, RUNLEVEL_BEFORE_EXIT);
screen();
//video_buf = malloc(RGB565MEM);
SOFT_TASK_MODEL st;
PID grab_task_pid;
 
sleep(1);
soft_task_default_model(st);
soft_task_def_period(st,50000);
soft_task_def_met(st,10000);
soft_task_def_arg(st, (void *)(1));
soft_task_def_ctrl_jet(st);
FG_init(FG_PERIOD, FG_WCET, FG_W, FG_H, color, channel);
grab_task_pid = task_create("GrabTask",grab_task,&st,NULL);
if (grab_task_pid == NIL) {
cprintf("ERROR: Cannot create grab task\n");
sys_end();
}
 
FG_set_hook(elaborate_image);
task_activate(grab_task_pid);
 
FG_start_grabbing();
while(keyb_getch(BLOCK) != ESC);
 
FG_close();
sys_end();
 
sys_end();
return 0;
 
}