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

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

?? dv1394.h

?? 這個是uClinux下的ieee1394驅動
?? H
字號:
/* * dv1394.h - DV input/output over IEEE 1394 on OHCI chips *   Copyright (C)2001 Daniel Maas <dmaas@dcine.com> *     receive, proc_fs by Dan Dennedy <dan@dennedy.org> * * based on: *   video1394.h - driver for OHCI 1394 boards *   Copyright (C)1999,2000 Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au> *                          Peter Schlaile <udbz@rz.uni-karlsruhe.de> * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef _DV_1394_H#define _DV_1394_H/* This is the public user-space interface. Try not to break it. */#define DV1394_API_VERSION 0x20011127/* ********************   **                **   **   DV1394 API   **   **                **   ********************   There are two methods of operating the DV1394 DV output device.   1)   The simplest is an interface based on write(): simply write   full DV frames of data to the device, and they will be transmitted   as quickly as possible. The FD may be set for non-blocking I/O,   in which case you can use select() or poll() to wait for output   buffer space.   To set the DV output parameters (e.g. whether you want NTSC or PAL   video), use the DV1394_INIT ioctl, passing in the parameters you   want in a struct dv1394_init.    Example 1:         To play a raw .DV file:   cat foo.DV > /dev/dv1394	 (cat will use write() internally)   Example 2:           static struct dv1394_init init = {	      0x63,        (broadcast channel)              4,           (four-frame ringbuffer)	      DV1394_NTSC, (send NTSC video)	      0, 0         (default empty packet rate)           }	   ioctl(fd, DV1394_INIT, &init);	   while(1) {	          read( <a raw DV file>, buf, DV1394_NTSC_FRAME_SIZE );		  write( <the dv1394 FD>, buf, DV1394_NTSC_FRAME_SIZE );           }   2)   For more control over buffering, and to avoid unnecessary copies   of the DV data, you can use the more sophisticated the mmap() interface.    First, call the DV1394_INIT ioctl to specify your parameters,    including the number of frames in the ringbuffer. Then, calling mmap()    on the dv1394 device will give you direct access to the ringbuffer   from which the DV card reads your frame data.   The ringbuffer is simply one large, contiguous region of memory   containing two or more frames of packed DV data. Each frame of DV data   is 120000 bytes (NTSC) or 144000 bytes (PAL).   Fill one or more frames in the ringbuffer, then use the DV1394_SUBMIT_FRAMES   ioctl to begin I/O. You can use either the DV1394_WAIT_FRAMES ioctl   or select()/poll() to wait until the frames are transmitted. Next, you'll   need to call the DV1394_GET_STATUS ioctl to determine which ringbuffer   frames are clear (ready to be filled with new DV data). Finally, use   DV1394_SUBMIT_FRAMES again to send the new data to the DV output.   Example: here is what a four-frame ringbuffer might look like            during DV transmission:         frame 0   frame 1   frame 2   frame 3	*--------------------------------------*        | CLEAR   | DV data | DV data | CLEAR  |        *--------------------------------------*                   <ACTIVE> 	transmission goes in this direction --->>>   The DV hardware is currently transmitting the data in frame 1.   Once frame 1 is finished, it will automatically transmit frame 2.   (if frame 2 finishes before frame 3 is submitted, the device   will continue to transmit frame 2, and will increase the dropped_frames   counter each time it repeats the transmission).    If you called DV1394_GET_STATUS at this instant, you would   receive the following values:                     n_frames          = 4		  active_frame      = 1		  first_clear_frame = 3		  n_clear_frames    = 2   At this point, you should write new DV data into frame 3 and optionally   frame 0. Then call DV1394_SUBMIT_FRAMES to inform the device that   it may transmit the new frames.   ERROR HANDLING   An error (buffer underflow/overflow or a break in the DV stream due   to a 1394 bus reset) can be detected by checking the dropped_frames   field of struct dv1394_status (obtained through the   DV1394_GET_STATUS ioctl).   The best way to recover from such an error is to re-initialize   dv1394, either by using the DV1394_INIT ioctl call, or closing the   file descriptor and opening it again. (note that you must unmap all   ringbuffer mappings when closing the file descriptor, or else   dv1394 will still be considered 'in use').   MAIN LOOP   For maximum efficiency and robustness against bus errors, you are   advised to model the main loop of your application after the   following pseudo-code example:   (checks of system call return values omitted for brevity; always   check return values in your code!)      while( frames left ) {       struct pollfd *pfd = ...;    pfd->fd = dv1394_fd;    pfd->revents = 0;    pfd->events = POLLOUT | POLLIN; (OUT for transmit, IN for receive)    (add other sources of I/O here)        poll(pfd, 1, -1); (or select(); add a timeout if you want)    if(pfd->revents) {         struct dv1394_status status;	          ioctl(dv1394_fd, DV1394_GET_STATUS, &status);	 if(status.dropped_frames > 0) {	      reset_dv1394();         } else {              for(int i = 0; i < status.n_clear_frames; i++) {	          copy_DV_frame();              }         }    }   }   where copy_DV_frame() reads or writes on the dv1394 file descriptor   (read/write mode) or copies data to/from the mmap ringbuffer and   then calls ioctl(DV1394_SUBMIT_FRAMES) to notify dv1394 that new   frames are availble (mmap mode).   reset_dv1394() is called in the event of a buffer   underflow/overflow or a halt in the DV stream (e.g. due to a 1394   bus reset). To guarantee recovery from the error, this function   should close the dv1394 file descriptor (and munmap() all   ringbuffer mappings, if you are using them), then re-open the   dv1394 device (and re-map the ringbuffer).   *//* maximum number of frames in the ringbuffer */#define DV1394_MAX_FRAMES 32/* number of *full* isochronous packets per DV frame */#define DV1394_NTSC_PACKETS_PER_FRAME 250#define DV1394_PAL_PACKETS_PER_FRAME  300/* size of one frame's worth of DV data, in bytes */#define DV1394_NTSC_FRAME_SIZE (480 * DV1394_NTSC_PACKETS_PER_FRAME)#define DV1394_PAL_FRAME_SIZE  (480 * DV1394_PAL_PACKETS_PER_FRAME)/* ioctl() commands */enum {	/* I don't like using 0 as a valid ioctl() */	DV1394_INVALID = 0,	/* get the driver ready to transmit video.	   pass a struct dv1394_init* as the parameter (see below),	   or NULL to get default parameters */	DV1394_INIT,	/* stop transmitting video and free the ringbuffer */	DV1394_SHUTDOWN,	/* submit N new frames to be transmitted, where	   the index of the first new frame is first_clear_buffer,	   and the index of the last new frame is	   (first_clear_buffer + N) % n_frames */	DV1394_SUBMIT_FRAMES,	/* block until N buffers are clear (pass N as the parameter)	   Because we re-transmit the last frame on underrun, there	   will at most be n_frames - 1 clear frames at any time */	DV1394_WAIT_FRAMES,	/* capture new frames that have been received, where	   the index of the first new frame is first_clear_buffer,	   and the index of the last new frame is	   (first_clear_buffer + N) % n_frames */	DV1394_RECEIVE_FRAMES,	DV1394_START_RECEIVE,	/* pass a struct dv1394_status* as the parameter (see below) */	DV1394_GET_STATUS,};enum pal_or_ntsc {	DV1394_NTSC = 0,	DV1394_PAL};/* this is the argument to DV1394_INIT */struct dv1394_init {	/* DV1394_API_VERSION */	unsigned int api_version;		/* isochronous transmission channel to use */	unsigned int channel;	/* number of frames in the ringbuffer. Must be at least 2	   and at most DV1394_MAX_FRAMES. */	unsigned int n_frames;	/* send/receive PAL or NTSC video format */	enum pal_or_ntsc format;	/* the following are used only for transmission */ 	/* set these to zero unless you want a	   non-default empty packet rate (see below) */	unsigned long cip_n;	unsigned long cip_d;	/* set this to zero unless you want a	   non-default SYT cycle offset (default = 3 cycles) */	unsigned int syt_offset;};/* NOTE: you may only allocate the DV frame ringbuffer once each time   you open the dv1394 device. DV1394_INIT will fail if you call it a   second time with different 'n_frames' or 'format' arguments (which   would imply a different size for the ringbuffer). If you need a   different buffer size, simply close and re-open the device, then   initialize it with your new settings. */   /* Q: What are cip_n and cip_d? *//*  A: DV video streams do not utilize 100% of the potential bandwidth offered  by IEEE 1394 (FireWire). To achieve the correct rate of data transmission,  DV devices must periodically insert empty packets into the 1394 data stream.  Typically there is one empty packet per 14-16 data-carrying packets.  Some DV devices will accept a wide range of empty packet rates, while others  require a precise rate. If the dv1394 driver produces empty packets at  a rate that your device does not accept, you may see ugly patterns on the  DV output, or even no output at all.  The default empty packet insertion rate seems to work for many people; if  your DV output is stable, you can simply ignore this discussion. However,  we have exposed the empty packet rate as a parameter to support devices that  do not work with the default rate.   The decision to insert an empty packet is made with a numerator/denominator  algorithm. Empty packets are produced at an average rate of CIP_N / CIP_D.  You can alter the empty packet rate by passing non-zero values for cip_n  and cip_d to the INIT ioctl.   */struct dv1394_status {	/* this embedded init struct returns the current dv1394	   parameters in use */	struct dv1394_init init;	/* the ringbuffer frame that is currently being	   displayed. (-1 if the device is not transmitting anything) */	int active_frame;	/* index of the first buffer (ahead of active_frame) that	   is ready to be filled with data */	unsigned int first_clear_frame;	/* how many buffers, including first_clear_buffer, are	   ready to be filled with data */	unsigned int n_clear_frames;	/* how many times the DV stream has underflowed, overflowed,	   or otherwise encountered an error, since the previous call	   to DV1394_GET_STATUS */	unsigned int dropped_frames;	/* N.B. The dropped_frames counter is only a lower bound on the actual	   number of dropped frames, with the special case that if dropped_frames	   is zero, then it is guaranteed that NO frames have been dropped	   since the last call to DV1394_GET_STATUS.	*/};#endif /* _DV_1394_H */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久网站| 男女性色大片免费观看一区二区| 樱桃国产成人精品视频| 美国十次了思思久久精品导航| 成人三级伦理片| 日韩天堂在线观看| 亚洲第一在线综合网站| 成人自拍视频在线| 日韩精品一区二区三区在线观看| 亚洲欧美成aⅴ人在线观看| 国产精品99久久久久久宅男| 欧美一区二区三区播放老司机| 亚洲精品乱码久久久久| 成人va在线观看| 久久久蜜桃精品| 国产在线日韩欧美| 日韩女优视频免费观看| 亚洲123区在线观看| 色乱码一区二区三区88| 国产精品欧美一级免费| 国产成人丝袜美腿| 久久这里只有精品视频网| 日本欧美一区二区三区乱码| 欧美剧情片在线观看| 亚洲午夜一二三区视频| 在线看一区二区| 亚洲卡通欧美制服中文| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 91麻豆精品91久久久久久清纯| 亚洲日本乱码在线观看| 成人av先锋影音| 国产精品欧美一级免费| 白白色 亚洲乱淫| 中文字幕一区二区三| 99riav一区二区三区| 亚洲色图在线视频| 欧美在线一区二区| 亚洲成精国产精品女| 91精品婷婷国产综合久久竹菊| 天天亚洲美女在线视频| 91精品国产黑色紧身裤美女| 免费观看日韩电影| 久久久国产精华| bt7086福利一区国产| 亚洲激情在线激情| 欧美在线色视频| 欧美aaa在线| 久久综合色一综合色88| 福利电影一区二区三区| 亚洲免费大片在线观看| 欧美日韩一区在线观看| 美女www一区二区| 欧美激情一区二区三区四区| 99久久er热在这里只有精品15 | 日本乱人伦一区| 午夜婷婷国产麻豆精品| 精品处破学生在线二十三| 国产福利一区二区三区| 亚洲日本va午夜在线电影| 欧美亚洲另类激情小说| 激情综合一区二区三区| 国产精品乱人伦| 欧美日韩国产高清一区| 国产原创一区二区| 亚洲男同性恋视频| 精品国产乱码久久久久久久| 丁香啪啪综合成人亚洲小说 | 国产午夜精品在线观看| 色婷婷综合五月| 美女尤物国产一区| 亚洲乱码精品一二三四区日韩在线| 51久久夜色精品国产麻豆| 国产不卡视频一区| 日韩av一区二区三区| 国产精品久久三区| 精品国产免费一区二区三区四区 | www.一区二区| 欧美bbbbb| 一区二区三区日韩在线观看| 久久精品男人的天堂| 欧美日韩在线精品一区二区三区激情| 紧缚奴在线一区二区三区| 亚洲国产成人精品视频| 中文字幕免费观看一区| 日韩欧美国产麻豆| 在线免费观看日韩欧美| 成人国产电影网| 精品一区二区三区在线观看| 一区二区三区免费看视频| 久久精品免费在线观看| 日韩欧美一区在线观看| 欧美日韩在线观看一区二区 | 成人国产视频在线观看| 久久精品国产在热久久| 亚洲一线二线三线视频| 中文欧美字幕免费| 久久久久国产一区二区三区四区| 91精品国产丝袜白色高跟鞋| 欧美三级电影网| 91麻豆国产香蕉久久精品| 豆国产96在线|亚洲| 激情偷乱视频一区二区三区| 日韩av电影天堂| 丝袜美腿成人在线| 午夜精品一区二区三区免费视频| 亚洲乱码国产乱码精品精的特点| 综合色天天鬼久久鬼色| 国产精品久久久久影院| 国产精品欧美经典| 国产精品久久久久久久久免费樱桃 | 日韩精品福利网| 视频一区二区欧美| 天堂一区二区在线免费观看| 性做久久久久久免费观看| 亚洲午夜在线视频| 视频一区视频二区中文| 日韩国产精品91| 麻豆视频一区二区| 激情综合五月天| 国产精品77777| 成人一区在线看| 色婷婷亚洲婷婷| 欧美三级中文字幕在线观看| 69堂精品视频| 精品久久久网站| 中文成人av在线| 夜夜嗨av一区二区三区网页 | 色婷婷综合视频在线观看| 99re成人在线| 欧美色综合网站| 欧美一区二区三区系列电影| 日韩精品一区二区三区在线播放| 亚洲精品一区二区三区在线观看| 久久免费看少妇高潮| 中文字幕在线不卡| 亚洲黄一区二区三区| 日韩av一区二区三区四区| 国产剧情一区二区三区| 99久久国产综合色|国产精品| 色综合久久久网| 欧美一区二区成人6969| 国产精品―色哟哟| 一区二区三区在线播| 捆绑紧缚一区二区三区视频| 成人福利电影精品一区二区在线观看| 91蜜桃在线观看| 欧美一级欧美一级在线播放| 久久久久久久久一| 亚洲在线视频免费观看| 麻豆免费看一区二区三区| 成人午夜电影久久影院| 欧美日韩亚洲综合在线| 久久久亚洲精品一区二区三区 | 国产精品沙发午睡系列990531| 一区二区三区欧美久久| 国产在线播放一区二区三区| 欧美性做爰猛烈叫床潮| 国产视频911| 日本中文字幕不卡| 成人激情免费网站| 欧美电影免费观看完整版| 一区二区三区四区av| 国产一区二区三区综合| 欧美三级电影网站| 亚洲色图另类专区| 狠狠色伊人亚洲综合成人| 在线观看日韩精品| 国产精品毛片大码女人| 激情小说欧美图片| 欧美日韩一二三| 亚洲欧美偷拍三级| 成人中文字幕电影| 久久综合色一综合色88| 丝袜美腿亚洲色图| 色乱码一区二区三区88| 国产精品乱人伦| 国产成人亚洲精品青草天美| 日韩一区二区视频在线观看| 亚洲午夜免费福利视频| 99久久精品免费| 国产精品美女久久久久久久| 国产一区二区在线观看免费| 日韩一区二区三区四区| 午夜在线成人av| 欧美日韩精品一区视频| 亚洲女爱视频在线| av网站一区二区三区| 国产精品免费网站在线观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产欧美精品一区aⅴ影院| 久久国产尿小便嘘嘘| 欧美精选一区二区| 亚洲成精国产精品女| 欧美在线视频全部完| 一区二区三区精密机械公司| 91小视频在线免费看| 一区精品在线播放| 色综合久久综合网97色综合| 亚洲精品乱码久久久久久黑人| 在线亚洲一区观看|