Mercurial > mplayer.hg
changeset 5039:da65bafd5e99
very obsoleted...
author | arpi |
---|---|
date | Mon, 11 Mar 2002 00:58:32 +0000 |
parents | 09f8dcbfa731 |
children | 568ca851a05b |
files | tvision.c videodev.h |
diffstat | 2 files changed, 0 insertions(+), 476 deletions(-) [+] |
line wrap: on
line diff
--- a/tvision.c Mon Mar 11 00:49:52 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,193 +0,0 @@ -// testing only, not finished!!!!!!! - -// little TeleVision program by A'rpi/ESP-team -// based on streamer-old.c video capture util (part of xawtv) by -// (c) 1998 Gerd Knorr <kraxel@goldbach.in-berlin.de> - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <math.h> -#include <errno.h> -#include <fcntl.h> -#include <string.h> -#include <ctype.h> -#include <signal.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <sys/time.h> -#include <sys/ioctl.h> -#include <sys/stat.h> -#include <sys/mman.h> -#include <sys/shm.h> -#include <sys/ipc.h> -#include <sys/wait.h> - - -#include <asm/types.h> /* XXX glibc */ -#include "videodev.h" - -#include "libvo/video_out.h" - -#define DEVNAME "/dev/video" - -static struct video_mmap gb1,gb2; -static struct video_capability capability; -static struct video_channel channel; -static struct video_mbuf gb_buffers = { 2*0x151000, 0, {0,0x151000 }}; -static unsigned char *map = NULL; - - -int main(int argc,char* argv[]){ -vo_functions_t *video_out=NULL; -char* video_driver=NULL; //"mga"; // default -int i; -int fd=-1; -char* frame=NULL; -int count=0; -unsigned char* tmpframe=NULL; -unsigned char* tmpframe2=NULL; -unsigned char* planes[3]; -unsigned int stride[3]; -unsigned char* planes2[3]; -unsigned int stride2[3]; - -// if(argc>1) video_driver=argv[1]; - -// check video_out driver name: - if(!video_driver) - video_out=video_out_drivers[0]; - else - for (i=0; video_out_drivers[i] != NULL; i++){ - const vo_info_t *info = video_out_drivers[i]->get_info (); - if(strcmp(info->short_name,video_driver) == 0){ - video_out = video_out_drivers[i];break; - } - } - if(!video_out){ - printf("Invalid video output driver name: %s\n",video_driver); - return 0; - } - - - /* open */ - if (-1 == fd && -1 == (fd = open(DEVNAME,O_RDWR))) { - fprintf(stderr,"open %s: %s\n",DEVNAME,strerror(errno)); - exit(1); - } - - /* get settings */ - if (-1 == ioctl(fd,VIDIOCGCAP,&capability)) { - perror("ioctl VIDIOCGCAP"); - exit(1); - } - if (-1 == ioctl(fd,VIDIOCGCHAN,&channel)) - perror("ioctl VIDIOCGCHAN"); - - /* mmap() buffer */ - if (-1 == ioctl(fd,VIDIOCGMBUF,&gb_buffers)) { - perror("ioctl VIDIOCGMBUF"); - } - map = mmap(0,gb_buffers.size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); - if ((unsigned char*)-1 == map) { - perror("mmap"); - } else { - fprintf(stderr,"v4l: mmap()'ed buffer size = 0x%x\n", - gb_buffers.size); - } - - /* prepare for grabbing */ - gb1.format = (argc>1) ? atoi(argv[1]) : VIDEO_PALETTE_YUV422; -// gb1.format = VIDEO_PALETTE_YUV420; -// gb1.format = VIDEO_PALETTE_RGB24; - gb1.frame = 0; - gb1.width = 704;//640;//320; - gb1.height = 576;//480;//240; - - gb2.format = gb1.format; - gb2.frame = 1; - gb2.width = gb1.width; - gb2.height = gb1.height; - - // video_out->preinit() LOST here ? - - video_out->config(gb1.width,gb1.height,1024,768,0,0,IMGFMT_YV12,NULL); -// video_out->config(gb1.width,gb1.height,1024,768,0,0,IMGFMT_UYVY,NULL); -// video_out->config(gb1.width,gb1.height,1024,768,0,0,IMGFMT_YUY2,NULL); -// video_out->config(gb1.width,gb1.height,1024,768,0,0,IMGFMT_RGB|24,NULL); - - tmpframe=malloc(gb1.width*gb1.height*3/2); - stride[0]=(gb1.width+15)&(~15); - stride[1]=stride[2]=stride[0]/2; - planes[0]=tmpframe; - planes[1]=planes[0]+stride[0]*gb1.height; - planes[2]=planes[1]+stride[0]*gb1.height/4; - - tmpframe2=malloc(gb1.width*gb1.height*3/2); - stride2[0]=(gb1.width+15)&(~15); - stride2[1]=stride2[2]=stride2[0]/2; - planes2[0]=tmpframe2; - planes2[1]=planes2[0]+stride2[0]*gb1.height; - planes2[2]=planes2[1]+stride2[0]*gb1.height/4; - - if (-1 == ioctl(fd,VIDIOCMCAPTURE,&gb1)) { - if (errno == EAGAIN) - fprintf(stderr,"grabber chip can't sync (no station tuned in?)\n"); - else - perror("ioctl VIDIOCMCAPTURE"); - exit(1); - } - count++; - while(1){ - // MAIN LOOP - if (-1 == ioctl(fd,VIDIOCMCAPTURE,(count%2) ? &gb2 : &gb1)) { - if (errno == EAGAIN) - fprintf(stderr,"grabber chip can't sync (no station tuned in?)\n"); - else - perror("ioctl VIDIOCMCAPTURE"); - exit(1); - } - - if (-1 == ioctl(fd,VIDIOCSYNC,(count%2) ? &gb1.frame : &gb2.frame)) { - perror("ioctl VIDIOCSYNC"); - exit(1); - } - frame=map + gb_buffers.offsets[(count%2) ? 0 : 1]; -#if 0 - video_out->draw_frame((unsigned char**)&frame); -#else - { - uyvytoyv12(frame,planes[0],planes[1],planes[2], - gb1.width,gb1.height, - stride[0],stride[1],gb1.width*2); - - - postprocess(planes,stride[0], - planes2,stride2[0], - gb1.width,gb1.height, - planes[0],0, 0x20000); - - video_out->draw_slice(planes2,stride2,gb1.width,gb1.height,0,0); - } -#endif - video_out->flip_page(); - - count++; - } - -#if 0 - { FILE *f=fopen("frame.yuv","wb"); - fwrite(map,320*240*2,1,f); - fclose(f); - } - video_out->config(320,240,800,600,0,0,IMGFMT_YUY2,NULL); - video_out->draw_frame(count?map1:map2); - video_out->flip_page(); - - getchar(); -#endif - - - -} -
--- a/videodev.h Mon Mar 11 00:49:52 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -#ifndef __LINUX_VIDEODEV_H -#define __LINUX_VIDEODEV_H - -#include <linux/types.h> - -#ifdef __KERNEL__ - -#if LINUX_VERSION_CODE >= 0x020100 -#include <linux/poll.h> -#endif - -struct video_device -{ - char name[32]; - int type; - int hardware; - - int (*open)(struct video_device *, int mode); - void (*close)(struct video_device *); - long (*read)(struct video_device *, char *, unsigned long, int noblock); - /* Do we need a write method ? */ - long (*write)(struct video_device *, const char *, unsigned long, int noblock); -#if LINUX_VERSION_CODE >= 0x020100 - unsigned int (*poll)(struct video_device *, struct file *, poll_table *); -#endif - int (*ioctl)(struct video_device *, unsigned int , void *); - int (*mmap)(struct video_device *, const char *, unsigned long); - int (*initialize)(struct video_device *); - void *priv; /* Used to be 'private' but that upsets C++ */ - int busy; - int minor; -}; - -extern int videodev_init(void); -#define VIDEO_MAJOR 81 -extern int video_register_device(struct video_device *, int type); - -#define VFL_TYPE_GRABBER 0 -#define VFL_TYPE_VBI 1 -#define VFL_TYPE_RADIO 2 -#define VFL_TYPE_VTX 3 - -extern void video_unregister_device(struct video_device *); -#endif - - -#define VID_TYPE_CAPTURE 1 /* Can capture */ -#define VID_TYPE_TUNER 2 /* Can tune */ -#define VID_TYPE_TELETEXT 4 /* Does teletext */ -#define VID_TYPE_OVERLAY 8 /* Overlay onto frame buffer */ -#define VID_TYPE_CHROMAKEY 16 /* Overlay by chromakey */ -#define VID_TYPE_CLIPPING 32 /* Can clip */ -#define VID_TYPE_FRAMERAM 64 /* Uses the frame buffer memory */ -#define VID_TYPE_SCALES 128 /* Scalable */ -#define VID_TYPE_MONOCHROME 256 /* Monochrome only */ -#define VID_TYPE_SUBCAPTURE 512 /* Can capture subareas of the image */ - -struct video_capability -{ - char name[32]; - int type; - int channels; /* Num channels */ - int audios; /* Num audio devices */ - int maxwidth; /* Supported width */ - int maxheight; /* And height */ - int minwidth; /* Supported width */ - int minheight; /* And height */ -}; - - -struct video_channel -{ - int channel; - char name[32]; - int tuners; - __u32 flags; -#define VIDEO_VC_TUNER 1 /* Channel has a tuner */ -#define VIDEO_VC_AUDIO 2 /* Channel has audio */ - __u16 type; -#define VIDEO_TYPE_TV 1 -#define VIDEO_TYPE_CAMERA 2 - __u16 norm; /* Norm set by channel */ -}; - -struct video_tuner -{ - int tuner; - char name[32]; - ulong rangelow, rangehigh; /* Tuner range */ - __u32 flags; -#define VIDEO_TUNER_PAL 1 -#define VIDEO_TUNER_NTSC 2 -#define VIDEO_TUNER_SECAM 4 -#define VIDEO_TUNER_LOW 8 /* Uses KHz not MHz */ -#define VIDEO_TUNER_NORM 16 /* Tuner can set norm */ -#define VIDEO_TUNER_STEREO_ON 128 /* Tuner is seeing stereo */ - __u16 mode; /* PAL/NTSC/SECAM/OTHER */ -#define VIDEO_MODE_PAL 0 -#define VIDEO_MODE_NTSC 1 -#define VIDEO_MODE_SECAM 2 -#define VIDEO_MODE_AUTO 3 - __u16 signal; /* Signal strength 16bit scale */ -}; - -struct video_picture -{ - __u16 brightness; - __u16 hue; - __u16 colour; - __u16 contrast; - __u16 whiteness; /* Black and white only */ - __u16 depth; /* Capture depth */ - __u16 palette; /* Palette in use */ -#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */ -#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */ -#define VIDEO_PALETTE_RGB565 3 /* 565 16 bit RGB */ -#define VIDEO_PALETTE_RGB24 4 /* 24bit RGB */ -#define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */ -#define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */ -#define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */ -#define VIDEO_PALETTE_YUYV 8 -#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */ -#define VIDEO_PALETTE_YUV420 10 -#define VIDEO_PALETTE_YUV411 11 /* YUV411 capture */ -#define VIDEO_PALETTE_RAW 12 /* RAW capture (BT848) */ -#define VIDEO_PALETTE_YUV422P 13 /* YUV 4:2:2 Planar */ -#define VIDEO_PALETTE_YUV411P 14 /* YUV 4:1:1 Planar */ -#define VIDEO_PALETTE_YUV420P 15 /* YUV 4:2:0 Planar */ -#define VIDEO_PALETTE_YUV410P 16 /* YUV 4:1:0 Planar */ -#define VIDEO_PALETTE_PLANAR 13 /* start of planar entries */ -#define VIDEO_PALETTE_COMPONENT 7 /* start of component entries */ -}; - -struct video_audio -{ - int audio; /* Audio channel */ - __u16 volume; /* If settable */ - __u16 bass, treble; - __u32 flags; -#define VIDEO_AUDIO_MUTE 1 -#define VIDEO_AUDIO_MUTABLE 2 -#define VIDEO_AUDIO_VOLUME 4 -#define VIDEO_AUDIO_BASS 8 -#define VIDEO_AUDIO_TREBLE 16 - char name[16]; -#define VIDEO_SOUND_MONO 1 -#define VIDEO_SOUND_STEREO 2 -#define VIDEO_SOUND_LANG1 4 -#define VIDEO_SOUND_LANG2 8 - __u16 mode; /* detected audio carriers or one to set */ - __u16 balance; /* Stereo balance */ - __u16 step; /* Step actual volume uses */ -}; - -struct video_clip -{ - __s32 x,y; - __s32 width, height; - struct video_clip *next; /* For user use/driver use only */ -}; - -struct video_window -{ - __u32 x,y; /* Position of window */ - __u32 width,height; /* Its size */ - __u32 chromakey; - __u32 flags; - struct video_clip *clips; /* Set only */ - int clipcount; -#define VIDEO_WINDOW_INTERLACE 1 -#define VIDEO_CLIP_BITMAP -1 -/* bitmap is 1024x625, a '1' bit represents a clipped pixel */ -#define VIDEO_CLIPMAP_SIZE (128 * 625) -}; - -struct video_capture -{ - __u32 x,y; /* Offsets into image */ - __u32 width, height; /* Area to capture */ - __u16 decimation; /* Decimation divder */ - __u16 flags; /* Flags for capture */ -#define VIDEO_CAPTURE_ODD 0 /* Temporal */ -#define VIDEO_CAPTURE_EVEN 1 -}; - -struct video_buffer -{ - void *base; - int height,width; - int depth; - int bytesperline; -}; - -struct video_mmap -{ - unsigned int frame; /* Frame (0 - n) for double buffer */ - int height,width; - unsigned int format; /* should be VIDEO_PALETTE_* */ -}; - -struct video_key -{ - __u8 key[8]; - __u32 flags; -}; - - -#define VIDEO_MAX_FRAME 32 - -struct video_mbuf -{ - int size; /* Total memory to map */ - int frames; /* Frames */ - int offsets[VIDEO_MAX_FRAME]; -}; - - -#define VIDEO_NO_UNIT (-1) - - -struct video_unit -{ - int video; /* Video minor */ - int vbi; /* VBI minor */ - int radio; /* Radio minor */ - int audio; /* Audio minor */ - int teletext; /* Teletext minor */ -}; - -#define VIDIOCGCAP _IOR('v',1,struct video_capability) /* Get capabilities */ -#define VIDIOCGCHAN _IOWR('v',2,struct video_channel) /* Get channel info (sources) */ -#define VIDIOCSCHAN _IOW('v',3,struct video_channel) /* Set channel */ -#define VIDIOCGTUNER _IOWR('v',4,struct video_tuner) /* Get tuner abilities */ -#define VIDIOCSTUNER _IOW('v',5,struct video_tuner) /* Tune the tuner for the current channel */ -#define VIDIOCGPICT _IOR('v',6,struct video_picture) /* Get picture properties */ -#define VIDIOCSPICT _IOW('v',7,struct video_picture) /* Set picture properties */ -#define VIDIOCCAPTURE _IOW('v',8,int) /* Start, end capture */ -#define VIDIOCGWIN _IOR('v',9, struct video_window) /* Set the video overlay window */ -#define VIDIOCSWIN _IOW('v',10, struct video_window) /* Set the video overlay window - passes clip list for hardware smarts , chromakey etc */ -#define VIDIOCGFBUF _IOR('v',11, struct video_buffer) /* Get frame buffer */ -#define VIDIOCSFBUF _IOW('v',12, struct video_buffer) /* Set frame buffer - root only */ -#define VIDIOCKEY _IOR('v',13, struct video_key) /* Video key event - to dev 255 is to all - cuts capture on all DMA windows with this key (0xFFFFFFFF == all) */ -#define VIDIOCGFREQ _IOR('v',14, unsigned long) /* Set tuner */ -#define VIDIOCSFREQ _IOW('v',15, unsigned long) /* Set tuner */ -#define VIDIOCGAUDIO _IOR('v',16, struct video_audio) /* Get audio info */ -#define VIDIOCSAUDIO _IOW('v',17, struct video_audio) /* Audio source, mute etc */ -#define VIDIOCSYNC _IOW('v',18, int) /* Sync with mmap grabbing */ -#define VIDIOCMCAPTURE _IOW('v',19, struct video_mmap) /* Grab frames */ -#define VIDIOCGMBUF _IOR('v', 20, struct video_mbuf) /* Memory map buffer info */ -#define VIDIOCGUNIT _IOR('v', 21, struct video_unit) /* Get attached units */ -#define VIDIOCGCAPTURE _IOR('v',22, struct video_capture) /* Get frame buffer */ -#define VIDIOCSCAPTURE _IOW('v',23, struct video_capture) /* Set frame buffer - root only */ - -#define BASE_VIDIOCPRIVATE 192 /* 192-255 are private */ - - -#define VID_HARDWARE_BT848 1 -#define VID_HARDWARE_QCAM_BW 2 -#define VID_HARDWARE_PMS 3 -#define VID_HARDWARE_QCAM_C 4 -#define VID_HARDWARE_PSEUDO 5 -#define VID_HARDWARE_SAA5249 6 -#define VID_HARDWARE_AZTECH 7 -#define VID_HARDWARE_SF16MI 8 -#define VID_HARDWARE_RTRACK 9 -#define VID_HARDWARE_ZOLTRIX 10 -#define VID_HARDWARE_SAA7146 11 -#define VID_HARDWARE_VIDEUM 12 /* Reserved for Winnov videum */ -#define VID_HARDWARE_RTRACK2 13 -#define VID_HARDWARE_PERMEDIA2 14 /* Reserved for Permedia2 */ -#define VID_HARDWARE_RIVA128 15 /* Reserved for RIVA 128 */ - -/* - * Initialiser list - */ - -struct video_init -{ - char *name; - int (*init)(struct video_init *); -}; - -#endif