35,6 → 35,7 |
|
#include "kernel/kern.h" |
#include "stdlib.h" |
#include "unistd.h" |
|
#include "drivers/shark_keyb26.h" |
#include "drivers/shark_videodev26.h" |
44,10 → 45,6 |
#define HEIGHT 480 |
#define BYTES_PP 2 |
|
unsigned char *video_buf = NULL; //Video Buffer |
unsigned long int VMEMLONG = WIDTH * HEIGHT * BYTES_PP / 4; // Used by copy_videomem_16to16 |
unsigned long int RGB565MEM = WIDTH * HEIGHT * BYTES_PP; // Total video mem |
|
#define FG_PERIOD 40000 |
#define FG_WCET 30000 |
#define FG_W 320 |
72,13 → 69,14 |
|
task_nopreempt(); |
|
/* Select input channel */ |
VIDEODEV26_ioctl(0,VIDIOCGCHAN,(unsigned long)&chan); |
/* Init videodev driver */ |
VIDEODEV26_open(0); |
|
chan.channel = (int)(arg); |
chan.norm = VIDEO_TYPE_CAMERA; |
|
chan.channel = (int)(arg); |
|
VIDEODEV26_ioctl(0,VIDIOCSCHAN,(unsigned long)&chan); |
|
|
/* Select palette and depth */ |
VIDEODEV26_ioctl(0,VIDIOCGPICT,(unsigned long)&vpic); |
|
89,16 → 87,16 |
|
/* Double Buffering Strategy */ |
|
fbuf[0].base = malloc(320*200); |
fbuf[0].height = 200; |
fbuf[0].width = 320; |
fbuf[0].bytesperline = 320; |
fbuf[0].base = malloc(FG_W*FG_H); |
fbuf[0].height = FG_H; |
fbuf[0].width = FG_W; |
fbuf[0].bytesperline = FG_W; |
fbuf[0].depth = 8; |
|
fbuf[1].base = malloc(320*200); |
fbuf[1].height = 200; |
fbuf[1].width = 320; |
fbuf[1].bytesperline = 320; |
fbuf[1].base = malloc(FG_W*FG_H); |
fbuf[1].height = FG_H; |
fbuf[1].width = FG_W; |
fbuf[1].bytesperline = FG_W; |
fbuf[1].depth = 8; |
|
VIDEODEV26_ioctl(0,VIDIOCSFBUF,(unsigned long)&(fbuf[0])); |
109,8 → 107,8 |
|
win.x = 0; |
win.y = 0; |
win.width = 320; |
win.height = 200; |
win.width = FG_W; |
win.height = FG_H; |
|
VIDEODEV26_ioctl(0,VIDIOCSWIN,(unsigned long)&win); |
|
131,9 → 129,8 |
VIDEODEV26_ioctl(0,VIDIOCCAPTURE,(unsigned long)&on); |
|
task_preempt(); |
|
/* |
printf_xy(1,1,WHITE,"%08x%08x", |
printf_xy(1,20,WHITE,"%08x%08x", |
*(unsigned int *)(fbuf[display].base+50*320+50), |
*(unsigned int *)(fbuf[display].base+50*320+54)); |
*/ |
145,6 → 142,7 |
display = save; |
save = temp; |
|
task_testcancel(); |
task_endcycle(); |
|
} |
177,10 → 175,12 |
SOFT_TASK_MODEL st; |
PID grab_task_pid; |
|
if (argc < 2) return -1; |
|
soft_task_default_model(st); |
soft_task_def_period(st,40000); |
soft_task_def_met(st,30000); |
soft_task_def_arg(st, (void *)(1)); |
soft_task_def_arg(st, (void *)(atoi(argv[1]))); |
soft_task_def_ctrl_jet(st); |
|
grab_task_pid = task_create("GrabTask",grab_task,&st,NULL); |
193,6 → 193,10 |
|
while(keyb_getch(BLOCK) != ESC); |
|
task_kill(grab_task_pid); |
|
sleep(1); |
|
sys_end(); |
|
return 0; |