5,11 → 5,13 |
* |
*/ |
|
#include <drivers/bttv.h> |
#include <drivers/fg.h> |
#include <kernel/kern.h> |
#include <unistd.h> |
|
#include <linuxcomp.h> |
|
#include <drivers/bttv.h> |
#include <drivers/bttvp.h> |
|
extern void bttv_start(struct bttv *btv); |
extern int bttv_ioctl(struct bttv *btv, unsigned int cmg, void *arg); |
extern void bttv_close(struct bttv *btv); |
20,9 → 22,6 |
static struct video_mmap vmm; |
static void * fbuf_pointer; |
|
PID refresh_PID; |
HARD_TASK_MODEL ht_refresh; |
|
static void (*elaborate_frame_hook)(void * ptrframe); |
|
void dummy_elaborate_frame(void * ptrframe) |
29,7 → 28,7 |
{ |
} |
|
TASK FG_refresh(void) |
void FG_refresh(void) |
{ |
|
int err; |
38,27 → 37,23 |
|
if (vmm.frame == 0) { |
vmm.frame = 1; |
fbuf_pointer = btv.fbuffer; |
// fbuf_pointer = (void *)(btv.fbuffer); |
/* *(BYTE *)fbuf_pointer = 255; |
* *(BYTE *)(fbuf_pointer+1) = 0; |
*/ |
} else { |
vmm.frame = 0; |
fbuf_pointer = btv.fbuffer+gbufsize; |
//fbuf_pointer = btv.fbuffer+gbufsize; |
/* *(BYTE *)fbuf_pointer = 0; |
* *(BYTE *)(fbuf_pointer+1) = 255; |
*/ |
} |
|
task_testcancel(); |
|
err = bttv_ioctl(&btv, VIDIOCMCAPTURE, &vmm); |
if (err) kern_printf("(BTTV_IOCTL Error: %d)",err); |
if (err) //kern_printf("(BTTV_IOCTL Error: %d)",err); |
|
elaborate_frame_hook(fbuf_pointer); |
|
task_endcycle(); |
|
} |
|
} |
72,23 → 67,11 |
struct video_picture p; |
struct video_channel ch; |
|
hard_task_default_model(ht_refresh); |
hard_task_def_wcet(ht_refresh, wcet); |
hard_task_def_mit(ht_refresh, period); |
hard_task_def_ctrl_jet(ht_refresh); |
|
refresh_PID = task_create("FG_refresh", FG_refresh, &ht_refresh, NULL); |
if (refresh_PID == -1) { |
cprintf("could not create task, err no=%d\n",errno); |
sys_end(); |
} |
|
bttv_start(&btv); |
|
err = bttv_ioctl(&btv, VIDIOCGWIN, &vw); |
if (err) { |
kern_printf("(BTTV_IOCTL VIDIOCGWIN Error: %d)",err); |
sys_end(); |
//kern_printf("(BTTV_IOCTL VIDIOCGWIN Error: %d)",err); |
} |
vw.x = 0; |
vw.y = 0; |
96,14 → 79,14 |
vw.height = height; |
err = bttv_ioctl(&btv, VIDIOCSWIN, &vw); |
if (err) { |
kern_printf("(BTTV_IOCTL VIDIOCSWIN Error: %d)",err); |
sys_end(); |
//kern_printf("(BTTV_IOCTL VIDIOCSWIN Error: %d)",err); |
//sys_end(); |
} |
|
err = bttv_ioctl(&btv, VIDIOCGPICT, &p); |
if (err) { |
kern_printf("(BTTV_IOCTL VIDIOCGPICT Error: %d)",err); |
sys_end(); |
//kern_printf("(BTTV_IOCTL VIDIOCGPICT Error: %d)",err); |
//sys_end(); |
} |
|
if (color == FG_RGB24) { |
121,22 → 104,22 |
|
err = bttv_ioctl(&btv, VIDIOCSPICT, &p); |
if (err) { |
kern_printf("(BTTV_IOCTL VIDIOCSPICT Error: %d)",err); |
sys_end(); |
//kern_printf("(BTTV_IOCTL VIDIOCSPICT Error: %d)",err); |
//sys_end(); |
} |
|
ch.channel = channel; |
err = bttv_ioctl(&btv, VIDIOCGCHAN, &ch); |
if (err) { |
kern_printf("(BTTV_IOCTL VIDIOCGCHAN Error: %d)",err); |
sys_end(); |
//kern_printf("(BTTV_IOCTL VIDIOCGCHAN Error: %d)",err); |
//sys_end(); |
} |
ch.norm = VIDEO_MODE_PAL; |
ch.type = VIDEO_TYPE_CAMERA; |
err = bttv_ioctl(&btv, VIDIOCSCHAN, &ch); |
if (err) { |
kern_printf("(BTTV_IOCTL VIDIOCSCHAN Error: %d)",err); |
sys_end(); |
//kern_printf("(BTTV_IOCTL VIDIOCSCHAN Error: %d)",err); |
//sys_end(); |
} |
|
vmm.frame = 0; |
145,13 → 128,11 |
vmm.format = p.palette; |
err = bttv_ioctl(&btv, VIDIOCMCAPTURE, &vmm); |
if (err) { |
kern_printf("(BTTV_IOCTL VIDIOCMCAPTURE Error: %d)",err); |
sys_end(); |
//kern_printf("(BTTV_IOCTL VIDIOCMCAPTURE Error: %d)",err); |
//sys_end(); |
} |
elaborate_frame_hook = dummy_elaborate_frame; |
|
sleep(1); |
|
return 0; |
|
} |
159,7 → 140,6 |
void FG_start_grabbing(void) |
{ |
|
task_activate(refresh_PID); |
|
} |
|
166,9 → 146,6 |
void FG_close(void) |
{ |
|
task_kill(refresh_PID); |
/* sleep(1); |
*/ |
bttv_close(&btv); |
|
} |