?? grab-ng.h
字號:
/* * next generation[tm] xawtv capture interfaces * * (c) 2001-03 Gerd Knorr <kraxel@bytesex.org> * */#include <pthread.h>#include <sys/types.h>#include "devices.h"#include "list.h"extern int ng_debug;extern int ng_log_bad_stream;extern int ng_log_resync;extern int ng_chromakey;extern int ng_ratio_x;extern int ng_ratio_y;extern char ng_v4l_conf[256];extern int ng_jpeg_quality;extern int ng_mpeg_vpid;extern int ng_mpeg_apid;#undef BUG_ON#undef BUG#define BUG_ON(condition,message,arg...) if (condition) {\ fprintf(stderr,"BUG: " message " [%s:%s:%d]\n",\ ## arg, __FILE__, __FUNCTION__, __LINE__);\ abort();}#define BUG(message,arg...) if (1) {\ fprintf(stderr,"BUG: " message " [%s:%s:%d]\n",\ ## arg, __FILE__, __FUNCTION__, __LINE__);\ abort();}#define OOPS_ON(condition,message,arg...) if (condition) {\ fprintf(stderr,"Oops: " message " [%s:%s:%d]\n",\ ## arg, __FILE__, __FUNCTION__, __LINE__);}#define OOPS(message,arg...) if (1) {\ fprintf(stderr,"Oops: " message " [%s:%s:%d]\n",\ ## arg, __FILE__, __FUNCTION__, __LINE__);}#if !defined(__cplusplus) && __STDC_VERSION__ < 199901# undef bool# define bool int#endif#if __STDC_VERSION__ < 199901# define restrict#endif#define UNSET (-1U)#define DIMOF(array) (sizeof(array)/sizeof(array[0]))#define SDIMOF(array) ((signed int)(sizeof(array)/sizeof(array[0])))#define GETELEM(array,index,default) \ (index < sizeof(array)/sizeof(array[0]) ? array[index] : default)/* --------------------------------------------------------------------- *//* defines */#define VIDEO_NONE 0#define VIDEO_RGB08 1 /* bt848 dithered */#define VIDEO_GRAY 2#define VIDEO_RGB15_LE 3 /* 15 bpp little endian */#define VIDEO_RGB16_LE 4 /* 16 bpp little endian */#define VIDEO_RGB15_BE 5 /* 15 bpp big endian */#define VIDEO_RGB16_BE 6 /* 16 bpp big endian */#define VIDEO_BGR24 7 /* bgrbgrbgrbgr (LE) */#define VIDEO_BGR32 8 /* bgr-bgr-bgr- (LE) */#define VIDEO_RGB24 9 /* rgbrgbrgbrgb (BE) */#define VIDEO_RGB32 10 /* -rgb-rgb-rgb (BE) */#define VIDEO_LUT2 11 /* lookup-table 2 byte depth */#define VIDEO_LUT4 12 /* lookup-table 4 byte depth */#define VIDEO_YUYV 13 /* 4:2:2 */#define VIDEO_YUV422P 14 /* YUV 4:2:2 (planar) */#define VIDEO_YUV420P 15 /* YUV 4:2:0 (planar) */#define VIDEO_MJPEG 16 /* MJPEG (AVI) */#define VIDEO_JPEG 17 /* JPEG (JFIF) */#define VIDEO_UYVY 18 /* 4:2:2 */#define VIDEO_MPEG 19 /* MPEG1/2 */#define VIDEO_FMT_COUNT 20#define AUDIO_NONE 0#define AUDIO_U8_MONO 1#define AUDIO_U8_STEREO 2#define AUDIO_S16_LE_MONO 3#define AUDIO_S16_LE_STEREO 4#define AUDIO_S16_BE_MONO 5#define AUDIO_S16_BE_STEREO 6#define AUDIO_MP3 7#define AUDIO_FMT_COUNT 8#if BYTE_ORDER == BIG_ENDIAN# define AUDIO_S16_NATIVE_MONO AUDIO_S16_BE_MONO# define AUDIO_S16_NATIVE_STEREO AUDIO_S16_BE_STEREO# define VIDEO_RGB15_NATIVE VIDEO_RGB15_BE# define VIDEO_RGB16_NATIVE VIDEO_RGB16_BE#endif#if BYTE_ORDER == LITTLE_ENDIAN# define AUDIO_S16_NATIVE_MONO AUDIO_S16_LE_MONO# define AUDIO_S16_NATIVE_STEREO AUDIO_S16_LE_STEREO# define VIDEO_RGB15_NATIVE VIDEO_RGB15_LE# define VIDEO_RGB16_NATIVE VIDEO_RGB16_LE#endif#define ATTR_TYPE_INTEGER 1 /* range 0 - 65535 */#define ATTR_TYPE_CHOICE 2 /* multiple choice */#define ATTR_TYPE_BOOL 3 /* yes/no */#define ATTR_ID_NORM 1#define ATTR_ID_INPUT 2#define ATTR_ID_VOLUME 3#define ATTR_ID_MUTE 4#define ATTR_ID_AUDIO_MODE 5#define ATTR_ID_COLOR 6#define ATTR_ID_BRIGHT 7#define ATTR_ID_HUE 8#define ATTR_ID_CONTRAST 9#define ATTR_ID_COUNT 10#define CAN_OVERLAY 1#define CAN_CAPTURE 2#define CAN_TUNE 4#define NEEDS_CHROMAKEY 8#define CAN_MPEG_PS 16#define CAN_MPEG_TS 32#define MPEG_FLAGS_PS 1#define MPEG_FLAGS_TS 2/* --------------------------------------------------------------------- */extern const unsigned int ng_vfmt_to_depth[VIDEO_FMT_COUNT];extern const char* ng_vfmt_to_desc[VIDEO_FMT_COUNT];extern const unsigned int ng_afmt_to_channels[AUDIO_FMT_COUNT];extern const unsigned int ng_afmt_to_bits[AUDIO_FMT_COUNT];extern const char* ng_afmt_to_desc[AUDIO_FMT_COUNT];extern const char* ng_attr_to_desc[ATTR_ID_COUNT];/* --------------------------------------------------------------------- */struct STRTAB { long nr; char *str;};struct OVERLAY_CLIP { int x1,x2,y1,y2;};/* fwd decl */struct ng_devinfo;struct ng_devstate;/* --------------------------------------------------------------------- *//* video data structures */struct ng_video_fmt { unsigned int fmtid; /* VIDEO_* */ unsigned int width; unsigned int height; unsigned int bytesperline; /* zero for compressed formats */};enum ng_video_frame { NG_FRAME_UNKNOWN = 0, NG_FRAME_I_FRAME = 1, NG_FRAME_P_FRAME = 2, NG_FRAME_B_FRAME = 3,};enum ng_video_ratio { // same numbers mpeg2 uses NG_RATIO_UNSPEC = 0, NG_RATIO_SQUARE = 1, NG_RATIO_3_4 = 2, NG_RATIO_9_16 = 3, NG_RATIO_2dot21 = 4,};struct ng_video_buf { struct ng_video_fmt fmt; size_t size; unsigned char *data; /* meta info for frame */ struct { int64_t ts; /* time stamp */ int file_seq; int play_seq; int twice; enum ng_video_frame frame; enum ng_video_ratio ratio; int broken; int slowdown; } info; /* * the lock is for the reference counter. * if the reference counter goes down to zero release() * should be called. priv is for the owner of the * buffer (can be used by the release callback) */ pthread_mutex_t lock; pthread_cond_t cond; int refcount; void (*release)(struct ng_video_buf *buf); void *priv;};struct ng_video_fifo { struct list_head next; struct ng_video_buf *buf;};void ng_init_video_buf(struct ng_video_buf *buf);void ng_release_video_buf(struct ng_video_buf *buf);void ng_print_video_buf(char *tag, struct ng_video_buf *buf);void ng_copy_video_buf(struct ng_video_buf *dst, struct ng_video_buf *src);struct ng_video_buf* ng_malloc_video_buf(void *handle, struct ng_video_fmt *fmt);void ng_wakeup_video_buf(struct ng_video_buf *buf);void ng_waiton_video_buf(struct ng_video_buf *buf);/* --------------------------------------------------------------------- *//* audio data structures */struct ng_audio_fmt { unsigned int fmtid; /* AUDIO_* */ unsigned int rate;};struct ng_audio_buf { struct ng_audio_fmt fmt; int size; int written; /* for partial writes */ char *data; struct { int64_t ts; int broken; int slowdown; } info;};struct ng_audio_buf* ng_malloc_audio_buf(struct ng_audio_fmt *fmt, int size);void ng_free_audio_buf(struct ng_audio_buf *buf);/* --------------------------------------------------------------------- *//* someone who receives video and/or audio data (writeavi, ...) */struct ng_format_list { char *name; char *desc; /* if standard fmtid description doesn't work because it's converted somehow */ char *ext; unsigned int fmtid; void *priv;};struct ng_writer { const char *name; const char *desc; const struct ng_format_list *video; const struct ng_format_list *audio; const int combined; /* both audio + video in one file */ void* (*wr_open)(char *moviename, char *audioname, struct ng_video_fmt *video, const void *priv_video, int fps, struct ng_audio_fmt *audio, const void *priv_audio); int (*wr_video)(void *handle, struct ng_video_buf *buf); int (*wr_audio)(void *handle, struct ng_audio_buf *buf); int (*wr_close)(void *handle); struct list_head list;};struct ng_reader { const char *name; const char *desc; char *magic[8]; int moff[8]; int mlen[8]; void* (*rd_open)(char *moviename); struct ng_video_fmt* (*rd_vfmt)(void *handle, int *vfmt, int vn); struct ng_audio_fmt* (*rd_afmt)(void *handle); struct ng_video_buf* (*rd_vdata)(void *handle, unsigned int *drop); struct ng_audio_buf* (*rd_adata)(void *handle); int64_t (*frame_time)(void *handle); int (*rd_close)(void *handle); struct list_head list;};/* --------------------------------------------------------------------- *//* attributes */struct ng_attribute { /* attribute name + identity */ int id; int priority; const char *name; const char *group; /* attribute properties */ int type; int defval; struct STRTAB *choices; /* ATTR_TYPE_CHOICE */ int min,max; /* ATTR_TYPE_INTEGER */ int points; /* ATTR_TYPE_INTEGER -- fixed point */ int (*read)(struct ng_attribute*); void (*write)(struct ng_attribute*, int val); /* attribute owner's data */ void *handle; const void *priv; /* attribute user's data */ struct list_head device_list; struct ng_devstate *dev; struct list_head global_list; void *app;};struct ng_attribute* ng_attr_byid(struct ng_devstate *dev, int id);struct ng_attribute* ng_attr_byname(struct ng_devstate *dev, char *name);const char* ng_attr_getstr(struct ng_attribute *attr, int value);int ng_attr_getint(struct ng_attribute *attr, char *value);void ng_attr_listchoices(struct ng_attribute *attr);int ng_attr_int2percent(struct ng_attribute *attr, int value);int ng_attr_percent2int(struct ng_attribute *attr, int percent);int ng_attr_parse_int(struct ng_attribute *attr, char *str);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -