亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? video-buf.h

?? 這是一個市場上常見電視卡的驅(qū)動程序源代碼
?? H
字號:
/*
 * generic helper functions for video4linux capture buffers, to handle
 * memory management and PCI DMA.  Right now bttv + saa7134 use it.
 *
 * The functions expect the hardware being able to scatter gatter
 * (i.e. the buffers are not linear in physical memory, but fragmented
 * into PAGE_SIZE chunks).  They also assume the driver does not need
 * to touch the video data (thus it is probably not useful for USB as
 * data often must be uncompressed by the drivers).
 * 
 * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 */

#include <linux/videodev.h>

/* --------------------------------------------------------------------- */

/*
 * Return a scatterlist for some page-aligned vmalloc()'ed memory
 * block (NULL on errors).  Memory for the scatterlist is allocated
 * using kmalloc.  The caller must free the memory.
 */
struct scatterlist* videobuf_vmalloc_to_sg(unsigned char *virt, int nr_pages);

/*
 * Return a scatterlist for a an array of userpages (NULL on errors).
 * Memory for the scatterlist is allocated using kmalloc.  The caller
 * must free the memory.
 */
struct scatterlist* videobuf_pages_to_sg(struct page **pages, int nr_pages,
					 int offset);
int videobuf_lock(struct page **pages, int nr_pages);
int videobuf_unlock(struct page **pages, int nr_pages);

/* --------------------------------------------------------------------- */

/*
 * A small set of helper functions to manage buffers (both userland
 * and kernel) for DMA.
 *
 * videobuf_dma_init_*()
 *	creates a buffer.  The userland version takes a userspace
 *	pointer + length.  The kernel version just wants the size and
 *	does memory allocation too using vmalloc_32().
 *
 * videobuf_dma_pci_*()
 *	see Documentation/DMA-mapping.txt, these functions to
 *	basically the same.  The map function does also build a
 *	scatterlist for the buffer (and unmap frees it ...)
 *
 * videobuf_dma_free()
 *	no comment ...
 *
 */

struct videobuf_dmabuf {
	/* for userland buffer */
	int                 offset;
	struct page         **pages;

	/* for kernel buffers */
	void                *vmalloc;

	/* for overlay buffers (pci-pci dma) */
	dma_addr_t          bus_addr;

	/* common */
	struct scatterlist  *sglist;
	int                 sglen;
	int                 nr_pages;
	int                 direction;
};

int videobuf_dma_init_user(struct videobuf_dmabuf *dma, int direction,
			   unsigned long data, unsigned long size);
int videobuf_dma_init_kernel(struct videobuf_dmabuf *dma, int direction,
			     int nr_pages);
int videobuf_dma_init_overlay(struct videobuf_dmabuf *dma, int direction,
			      dma_addr_t addr, int nr_pages);
int videobuf_dma_pci_map(struct pci_dev *dev, struct videobuf_dmabuf *dma);
int videobuf_dma_pci_sync(struct pci_dev *dev,
			  struct videobuf_dmabuf *dma);
int videobuf_dma_pci_unmap(struct pci_dev *dev, struct videobuf_dmabuf *dma);
int videobuf_dma_free(struct videobuf_dmabuf *dma);

/* --------------------------------------------------------------------- */

/*
 * A small set of helper functions to manage video4linux buffers.
 *
 * struct videobuf_buffer holds the data structures used by the helper
 * functions, additionally some commonly used fields for v4l buffers
 * (width, height, lists, waitqueue) are in there.  That struct should
 * be used as first element in the drivers buffer struct.
 * 
 * about the mmap helpers (videobuf_mmap_*):
 *
 * The mmaper function allows to map any subset of contingous buffers.
 * This includes one mmap() call for all buffers (which the original
 * video4linux API uses) as well as one mmap() for every single buffer
 * (which v4l2 uses).
 *
 * If there is a valid mapping for a buffer, buffer->baddr/bsize holds
 * userspace address + size which can be feeded into the
 * videobuf_dma_init_user function listed above.
 *
 */

struct videobuf_buffer;
struct videobuf_queue;

struct videobuf_mapping {
	unsigned int count;
	int highmem_ok;
	unsigned long start;
	unsigned long end;
	struct videobuf_queue *q;
};

enum videobuf_state {
	STATE_NEEDS_INIT = 0,
	STATE_PREPARED   = 1,
	STATE_QUEUED     = 2,
	STATE_ACTIVE     = 3,
	STATE_DONE       = 4,
	STATE_ERROR      = 5,
	STATE_IDLE       = 6,
};

struct videobuf_buffer {
	unsigned int            i;

	/* info about the buffer */
	unsigned int            width;
	unsigned int            height;
	unsigned int            bytesperline; /* use only if != 0 */
	unsigned long           size;
	enum v4l2_field         field;
	enum videobuf_state     state;
	struct videobuf_dmabuf  dma;
	struct list_head        stream;  /* QBUF/DQBUF list */

	/* for mmap'ed buffers */
	enum v4l2_memory        memory;
	size_t                  boff;    /* buffer offset (mmap + overlay) */
	size_t                  bsize;   /* buffer size */
	unsigned long           baddr;   /* buffer addr (userland ptr!) */
	struct videobuf_mapping *map;

	/* touched by irq handler */
	struct list_head        queue;
	wait_queue_head_t       done;
	unsigned int            field_count;
	struct timeval          ts;
};

struct videobuf_queue_ops {
	int (*buf_setup)(struct file *file,
			 unsigned int *count, unsigned int *size);
	int (*buf_prepare)(struct file *file,struct videobuf_buffer *vb,
			   enum v4l2_field field);
	void (*buf_queue)(struct file *file,struct videobuf_buffer *vb);
	void (*buf_release)(struct file *file,struct videobuf_buffer *vb);
};

struct videobuf_queue {
        struct semaphore           lock;
	spinlock_t                 *irqlock;
	struct pci_dev             *pci;

	enum v4l2_buf_type         type;
	unsigned int               msize;
	enum v4l2_field            field;
	enum v4l2_field            last; /* for field=V4L2_FIELD_ALTERNATE */
	struct videobuf_buffer     *bufs[VIDEO_MAX_FRAME];
	struct videobuf_queue_ops  *ops;

	/* capture via mmap() + ioctl(QBUF/DQBUF) */
	unsigned int               streaming;
	struct list_head           stream;

	/* capture via read() */
	unsigned int               reading;
	unsigned int               read_off;
	struct videobuf_buffer     *read_buf;
};

void* videobuf_alloc(unsigned int size);
int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr);
int videobuf_iolock(struct pci_dev *pci, struct videobuf_buffer *vb,
		    struct v4l2_framebuffer *fbuf);

void videobuf_queue_init(struct videobuf_queue *q,
			 struct videobuf_queue_ops *ops,
			 struct pci_dev *pci, spinlock_t *irqlock,
			 enum v4l2_buf_type type,
			 enum v4l2_field field,
			 unsigned int msize);
int  videobuf_queue_is_busy(struct videobuf_queue *q);
void videobuf_queue_cancel(struct file *file, struct videobuf_queue *q);

enum v4l2_field videobuf_next_field(struct videobuf_queue *q);
void videobuf_status(struct v4l2_buffer *b, struct videobuf_buffer *vb,
		     enum v4l2_buf_type type);
int videobuf_reqbufs(struct file *file, struct videobuf_queue *q,
		     struct v4l2_requestbuffers *req);
int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b);
int videobuf_qbuf(struct file *file, struct videobuf_queue *q,
		  struct v4l2_buffer *b);
int videobuf_dqbuf(struct file *file, struct videobuf_queue *q,
		   struct v4l2_buffer *b);
int videobuf_streamon(struct file *file, struct videobuf_queue *q);
int videobuf_streamoff(struct file *file, struct videobuf_queue *q);

int videobuf_read_start(struct file *file, struct videobuf_queue *q);
void videobuf_read_stop(struct file *file, struct videobuf_queue *q);
ssize_t videobuf_read_stream(struct file *file, struct videobuf_queue *q,
			     char *data, size_t count, loff_t *ppos,
			     int vbihack);
ssize_t videobuf_read_one(struct file *file, struct videobuf_queue *q,
			  char *data, size_t count, loff_t *ppos);
unsigned int videobuf_poll_stream(struct file *file,
				  struct videobuf_queue *q,
				  poll_table *wait);

int videobuf_mmap_setup(struct file *file, struct videobuf_queue *q,
			unsigned int bcount, unsigned int bsize,
			enum v4l2_memory memory);
int videobuf_mmap_free(struct file *file, struct videobuf_queue *q);
int videobuf_mmap_mapper(struct vm_area_struct *vma,
			 struct videobuf_queue *q);

/* --------------------------------------------------------------------- */

/*
 * Local variables:
 * c-basic-offset: 8
 * End:
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲mv在线观看| 亚洲国产成人av好男人在线观看| 555夜色666亚洲国产免| 色婷婷激情综合| 在线观看视频91| 欧美三级视频在线观看| 欧美一区二区三区视频免费播放 | 日韩—二三区免费观看av| 亚洲乱码精品一二三四区日韩在线 | 中文字幕一区二区不卡| 中文文精品字幕一区二区| **欧美大码日韩| 一区二区三区在线观看国产| 亚洲.国产.中文慕字在线| 免费在线欧美视频| 国产精品小仙女| 91视频国产观看| 欧美精三区欧美精三区| 精品久久久久久久久久久院品网| 久久蜜桃av一区二区天堂| 国产精品午夜久久| 日本不卡视频在线观看| 国产一区二区三区蝌蚪| heyzo一本久久综合| 日本韩国视频一区二区| 91精品国产乱| 国产精品无人区| 一区二区视频免费在线观看| 奇米精品一区二区三区在线观看 | 91精品国产综合久久蜜臀| 精品国产91乱码一区二区三区 | 国产精品成人免费| 亚洲国产精品天堂| 国产资源在线一区| 91福利视频在线| 精品少妇一区二区三区免费观看| 国产精品污污网站在线观看| 日本色综合中文字幕| 99久久99久久精品免费观看| 91精品国产91久久久久久最新毛片 | 国产精品嫩草久久久久| 三级影片在线观看欧美日韩一区二区 | 日本一区二区免费在线| 亚洲国产日韩综合久久精品| 懂色一区二区三区免费观看| 欧美日韩国产高清一区二区| 国产精品欧美久久久久无广告| 日本系列欧美系列| 欧美午夜精品一区| 国产精品免费视频一区| 国模无码大尺度一区二区三区| 欧美午夜免费电影| 亚洲欧美日韩中文字幕一区二区三区 | 国产精品久久久久永久免费观看| 日本欧美肥老太交大片| 日本伦理一区二区| 国产精品伦理在线| 国产精品白丝jk白祙喷水网站 | 久久久久国产精品人| 三级不卡在线观看| 欧美在线啊v一区| 国产精品电影一区二区| 国产伦精品一区二区三区免费| 欧美精品久久天天躁| 亚洲18女电影在线观看| 欧美色倩网站大全免费| 亚洲免费高清视频在线| 91亚洲男人天堂| ●精品国产综合乱码久久久久| www.久久精品| 肉肉av福利一精品导航| 91九色02白丝porn| 亚洲黄色尤物视频| 欧美影院一区二区三区| 亚洲自拍偷拍麻豆| 欧美色偷偷大香| 午夜欧美电影在线观看| 欧美日本在线观看| 日本成人在线网站| 欧美zozo另类异族| 国产乱人伦偷精品视频免下载| 精品国产露脸精彩对白| 国产一区二区在线电影| 久久久99免费| av成人免费在线| 亚洲综合一二三区| 91精品婷婷国产综合久久性色 | 国产精品伦理一区二区| av电影天堂一区二区在线观看| 亚洲免费高清视频在线| 欧美日韩国产在线播放网站| 免费欧美高清视频| 国产亚洲精品bt天堂精选| 99re热视频这里只精品| 亚洲国产日韩在线一区模特| 精品噜噜噜噜久久久久久久久试看 | 日本久久一区二区| 亚洲a一区二区| 精品国产凹凸成av人导航| 成人黄色国产精品网站大全在线免费观看| 国产精品初高中害羞小美女文| 91网站黄www| 免费av网站大全久久| 国产偷国产偷精品高清尤物| 91麻豆国产香蕉久久精品| 日韩激情一二三区| 亚洲一区免费在线观看| 日韩精品一区二区三区在线观看 | 午夜精品久久久久久久99樱桃| 欧美一区二区三区视频在线 | 成人涩涩免费视频| 亚洲在线视频网站| 亚洲精品在线电影| 在线免费不卡视频| 国产精品88888| 亚洲成人精品影院| 中文字幕免费不卡| 欧美电影免费观看高清完整版在线观看 | 欧美午夜精品电影| 国产精品一区二区黑丝| 视频一区视频二区中文字幕| 国产精品电影一区二区三区| 日韩免费成人网| 欧美日韩一区二区电影| 成人av免费在线观看| 狠狠色狠狠色综合| 亚洲国产成人高清精品| 亚洲国产精品成人综合| 国产精品色哟哟网站| 2020国产精品久久精品美国| 欧美性大战久久久久久久蜜臀 | 91久久精品一区二区| 国产精品白丝jk黑袜喷水| 日韩av二区在线播放| 亚洲午夜一二三区视频| 亚洲免费三区一区二区| 国产精品美日韩| 久久久99久久| 国产三区在线成人av| 精品欧美久久久| 欧美电影免费观看高清完整版在线| 欧美在线高清视频| 欧美性色欧美a在线播放| 91亚洲精品久久久蜜桃| 91一区一区三区| 99久久久久免费精品国产| 成人av在线电影| 成人午夜电影网站| 国产成人av影院| 丁香一区二区三区| 成人福利视频在线看| 国产sm精品调教视频网站| 从欧美一区二区三区| 成人一级视频在线观看| 97se亚洲国产综合在线| 色综合视频一区二区三区高清| av在线不卡电影| 91看片淫黄大片一级在线观看| 色综合色综合色综合| 欧美丝袜丝交足nylons图片| 欧美日韩国产精品自在自线| 日韩一二三区不卡| 精品国产一区二区三区av性色| 欧美成人a∨高清免费观看| 久久午夜老司机| 国产精品素人一区二区| 一区二区三区中文字幕在线观看| 一区二区成人在线观看| 午夜精品福利一区二区三区av| 日韩精品一级中文字幕精品视频免费观看 | 精品久久久久香蕉网| 国产亚洲精品超碰| 亚洲摸摸操操av| 日韩 欧美一区二区三区| 韩国三级中文字幕hd久久精品| 成人毛片老司机大片| 欧美主播一区二区三区美女| 欧美成人在线直播| 中文字幕一区二区三| 午夜电影久久久| 国产福利一区二区三区视频 | 日韩成人免费在线| 国产一区二区免费在线| 色综合久久久久综合99| 日韩三级伦理片妻子的秘密按摩| 中文字幕第一区第二区| 亚洲二区视频在线| 国产美女在线观看一区| 欧美三级中文字幕在线观看| 国产日产欧美一区二区视频| 亚洲午夜国产一区99re久久| 国产老女人精品毛片久久| 在线观看亚洲一区| 日本一区二区三区dvd视频在线| 亚洲国产aⅴ天堂久久| 国产成人亚洲精品青草天美 | 99久久精品免费精品国产| 日韩午夜激情视频| 亚洲色大成网站www久久九九| 人人精品人人爱|