annotate dv1394.h @ 2065:64bd1b09cef2 libavformat

patch so that the deprecated items show up correctly when building doxygen docs patch by mark cox melbournemark plus ffmpeg minus devel chez gmail dot com
author benoit
date Wed, 02 May 2007 09:13:47 +0000
parents 0899bfe4105c
children 06083249909c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
1 /*
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
2 * dv1394.h - DV input/output over IEEE 1394 on OHCI chips
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
3 * Copyright (C)2001 Daniel Maas <dmaas@dcine.com>
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
4 * receive, proc_fs by Dan Dennedy <dan@dennedy.org>
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
5 *
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
6 * based on:
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
7 * video1394.h - driver for OHCI 1394 boards
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
8 * Copyright (C)1999,2000 Sebastien Rougeaux <sebastien.rougeaux@anu.edu.au>
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
9 * Peter Schlaile <udbz@rz.uni-karlsruhe.de>
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
10 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1288
diff changeset
11 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1288
diff changeset
12 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1288
diff changeset
13 * FFmpeg is free software; you can redistribute it and/or
1288
2c9aa272e75d Switch license from GPL to LGPL, this file originates from libdv, which
diego
parents: 896
diff changeset
14 * modify it under the terms of the GNU Lesser General Public
2c9aa272e75d Switch license from GPL to LGPL, this file originates from libdv, which
diego
parents: 896
diff changeset
15 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1288
diff changeset
16 * version 2.1 of the License, or (at your option) any later version.
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
17 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1288
diff changeset
18 * FFmpeg is distributed in the hope that it will be useful,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1288
2c9aa272e75d Switch license from GPL to LGPL, this file originates from libdv, which
diego
parents: 896
diff changeset
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2c9aa272e75d Switch license from GPL to LGPL, this file originates from libdv, which
diego
parents: 896
diff changeset
21 * Lesser General Public License for more details.
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
22 *
1288
2c9aa272e75d Switch license from GPL to LGPL, this file originates from libdv, which
diego
parents: 896
diff changeset
23 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1288
diff changeset
24 * License along with FFmpeg; if not, write to the Free Software
1288
2c9aa272e75d Switch license from GPL to LGPL, this file originates from libdv, which
diego
parents: 896
diff changeset
25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
896
edbe5c3717f9 Update licensing information: The FSF changed postal address.
diego
parents: 887
diff changeset
26 *
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
27 */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
28
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
29 #ifndef _DV_1394_H
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
30 #define _DV_1394_H
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
31
185
d98ed04d62a6 patch for DV capturing by Dan Dennedy <dan at dennedy dot org>
romansh
parents: 156
diff changeset
32 #define DV1394_DEFAULT_CHANNEL 63
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
33 #define DV1394_DEFAULT_CARD 0
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
34 #define DV1394_RING_FRAMES 20
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
35
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
36 #define DV1394_WIDTH 720
156
al3x
parents: 155
diff changeset
37 #define DV1394_NTSC_HEIGHT 480
al3x
parents: 155
diff changeset
38 #define DV1394_PAL_HEIGHT 576
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
39
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
40 /* This is the public user-space interface. Try not to break it. */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
41
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
42 #define DV1394_API_VERSION 0x20011127
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
43
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
44 /* ********************
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
45 ** **
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
46 ** DV1394 API **
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
47 ** **
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
48 ********************
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
49
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
50 There are two methods of operating the DV1394 DV output device.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
51
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
52 1)
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
53
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
54 The simplest is an interface based on write(): simply write
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
55 full DV frames of data to the device, and they will be transmitted
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
56 as quickly as possible. The FD may be set for non-blocking I/O,
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
57 in which case you can use select() or poll() to wait for output
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
58 buffer space.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
59
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
60 To set the DV output parameters (e.g. whether you want NTSC or PAL
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
61 video), use the DV1394_INIT ioctl, passing in the parameters you
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
62 want in a struct dv1394_init.
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
63
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
64 Example 1:
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
65 To play a raw .DV file: cat foo.DV > /dev/dv1394
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
66 (cat will use write() internally)
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
67
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
68 Example 2:
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
69 static struct dv1394_init init = {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
70 0x63, (broadcast channel)
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
71 4, (four-frame ringbuffer)
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
72 DV1394_NTSC, (send NTSC video)
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
73 0, 0 (default empty packet rate)
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
74 }
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
75
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
76 ioctl(fd, DV1394_INIT, &init);
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
77
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
78 while(1) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
79 read( <a raw DV file>, buf, DV1394_NTSC_FRAME_SIZE );
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
80 write( <the dv1394 FD>, buf, DV1394_NTSC_FRAME_SIZE );
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
81 }
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
82
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
83 2)
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
84
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
85 For more control over buffering, and to avoid unnecessary copies
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
86 of the DV data, you can use the more sophisticated the mmap() interface.
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
87 First, call the DV1394_INIT ioctl to specify your parameters,
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
88 including the number of frames in the ringbuffer. Then, calling mmap()
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
89 on the dv1394 device will give you direct access to the ringbuffer
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
90 from which the DV card reads your frame data.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
91
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
92 The ringbuffer is simply one large, contiguous region of memory
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
93 containing two or more frames of packed DV data. Each frame of DV data
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
94 is 120000 bytes (NTSC) or 144000 bytes (PAL).
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
95
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
96 Fill one or more frames in the ringbuffer, then use the DV1394_SUBMIT_FRAMES
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
97 ioctl to begin I/O. You can use either the DV1394_WAIT_FRAMES ioctl
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
98 or select()/poll() to wait until the frames are transmitted. Next, you'll
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
99 need to call the DV1394_GET_STATUS ioctl to determine which ringbuffer
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
100 frames are clear (ready to be filled with new DV data). Finally, use
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
101 DV1394_SUBMIT_FRAMES again to send the new data to the DV output.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
102
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
103
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
104 Example: here is what a four-frame ringbuffer might look like
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
105 during DV transmission:
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
106
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
107
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
108 frame 0 frame 1 frame 2 frame 3
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
109
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
110 *--------------------------------------*
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
111 | CLEAR | DV data | DV data | CLEAR |
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
112 *--------------------------------------*
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
113 <ACTIVE>
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
114
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
115 transmission goes in this direction --->>>
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
116
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
117
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
118 The DV hardware is currently transmitting the data in frame 1.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
119 Once frame 1 is finished, it will automatically transmit frame 2.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
120 (if frame 2 finishes before frame 3 is submitted, the device
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
121 will continue to transmit frame 2, and will increase the dropped_frames
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
122 counter each time it repeats the transmission).
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
123
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
124
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
125 If you called DV1394_GET_STATUS at this instant, you would
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
126 receive the following values:
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
127
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
128 n_frames = 4
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
129 active_frame = 1
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
130 first_clear_frame = 3
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
131 n_clear_frames = 2
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
132
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
133 At this point, you should write new DV data into frame 3 and optionally
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
134 frame 0. Then call DV1394_SUBMIT_FRAMES to inform the device that
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
135 it may transmit the new frames.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
136
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
137 ERROR HANDLING
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
138
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
139 An error (buffer underflow/overflow or a break in the DV stream due
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
140 to a 1394 bus reset) can be detected by checking the dropped_frames
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
141 field of struct dv1394_status (obtained through the
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
142 DV1394_GET_STATUS ioctl).
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
143
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
144 The best way to recover from such an error is to re-initialize
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
145 dv1394, either by using the DV1394_INIT ioctl call, or closing the
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
146 file descriptor and opening it again. (note that you must unmap all
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
147 ringbuffer mappings when closing the file descriptor, or else
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
148 dv1394 will still be considered 'in use').
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
149
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
150 MAIN LOOP
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
151
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
152 For maximum efficiency and robustness against bus errors, you are
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
153 advised to model the main loop of your application after the
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
154 following pseudo-code example:
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
155
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
156 (checks of system call return values omitted for brevity; always
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
157 check return values in your code!)
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
158
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
159 while( frames left ) {
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
160
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
161 struct pollfd *pfd = ...;
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
162
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
163 pfd->fd = dv1394_fd;
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
164 pfd->revents = 0;
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
165 pfd->events = POLLOUT | POLLIN; (OUT for transmit, IN for receive)
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
166
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
167 (add other sources of I/O here)
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
168
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
169 poll(pfd, 1, -1); (or select(); add a timeout if you want)
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
170
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
171 if(pfd->revents) {
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
172 struct dv1394_status status;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
173
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
174 ioctl(dv1394_fd, DV1394_GET_STATUS, &status);
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
175
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
176 if(status.dropped_frames > 0) {
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
177 reset_dv1394();
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
178 } else {
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
179 for(int i = 0; i < status.n_clear_frames; i++) {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
180 copy_DV_frame();
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
181 }
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
182 }
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
183 }
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
184 }
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
185
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
186 where copy_DV_frame() reads or writes on the dv1394 file descriptor
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
187 (read/write mode) or copies data to/from the mmap ringbuffer and
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
188 then calls ioctl(DV1394_SUBMIT_FRAMES) to notify dv1394 that new
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
189 frames are availble (mmap mode).
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
190
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
191 reset_dv1394() is called in the event of a buffer
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
192 underflow/overflow or a halt in the DV stream (e.g. due to a 1394
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
193 bus reset). To guarantee recovery from the error, this function
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
194 should close the dv1394 file descriptor (and munmap() all
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
195 ringbuffer mappings, if you are using them), then re-open the
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
196 dv1394 device (and re-map the ringbuffer).
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
197
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
198 */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
199
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
200
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
201 /* maximum number of frames in the ringbuffer */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
202 #define DV1394_MAX_FRAMES 32
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
203
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
204 /* number of *full* isochronous packets per DV frame */
185
d98ed04d62a6 patch for DV capturing by Dan Dennedy <dan at dennedy dot org>
romansh
parents: 156
diff changeset
205 #define DV1394_NTSC_PACKETS_PER_FRAME 250
d98ed04d62a6 patch for DV capturing by Dan Dennedy <dan at dennedy dot org>
romansh
parents: 156
diff changeset
206 #define DV1394_PAL_PACKETS_PER_FRAME 300
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
207
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
208 /* size of one frame's worth of DV data, in bytes */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
209 #define DV1394_NTSC_FRAME_SIZE (480 * DV1394_NTSC_PACKETS_PER_FRAME)
185
d98ed04d62a6 patch for DV capturing by Dan Dennedy <dan at dennedy dot org>
romansh
parents: 156
diff changeset
210 #define DV1394_PAL_FRAME_SIZE (480 * DV1394_PAL_PACKETS_PER_FRAME)
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
211
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
212
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
213 /* ioctl() commands */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
214
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
215 enum {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
216 /* I don't like using 0 as a valid ioctl() */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
217 DV1394_INVALID = 0,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
218
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
219
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
220 /* get the driver ready to transmit video.
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
221 pass a struct dv1394_init* as the parameter (see below),
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
222 or NULL to get default parameters */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
223 DV1394_INIT,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
224
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
225
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
226 /* stop transmitting video and free the ringbuffer */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
227 DV1394_SHUTDOWN,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
228
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
229
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
230 /* submit N new frames to be transmitted, where
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
231 the index of the first new frame is first_clear_buffer,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
232 and the index of the last new frame is
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
233 (first_clear_buffer + N) % n_frames */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
234 DV1394_SUBMIT_FRAMES,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
235
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
236
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
237 /* block until N buffers are clear (pass N as the parameter)
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
238 Because we re-transmit the last frame on underrun, there
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
239 will at most be n_frames - 1 clear frames at any time */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
240 DV1394_WAIT_FRAMES,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
241
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
242 /* capture new frames that have been received, where
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
243 the index of the first new frame is first_clear_buffer,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
244 and the index of the last new frame is
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
245 (first_clear_buffer + N) % n_frames */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
246 DV1394_RECEIVE_FRAMES,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
247
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
248
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
249 DV1394_START_RECEIVE,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
250
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
251
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
252 /* pass a struct dv1394_status* as the parameter (see below) */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
253 DV1394_GET_STATUS,
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
254 };
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
255
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
256
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
257
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
258 enum pal_or_ntsc {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
259 DV1394_NTSC = 0,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
260 DV1394_PAL
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
261 };
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
262
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
263
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
264
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
265
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
266 /* this is the argument to DV1394_INIT */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
267 struct dv1394_init {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
268 /* DV1394_API_VERSION */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
269 unsigned int api_version;
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
270
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
271 /* isochronous transmission channel to use */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
272 unsigned int channel;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
273
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
274 /* number of frames in the ringbuffer. Must be at least 2
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
275 and at most DV1394_MAX_FRAMES. */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
276 unsigned int n_frames;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
277
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
278 /* send/receive PAL or NTSC video format */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
279 enum pal_or_ntsc format;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
280
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
281 /* the following are used only for transmission */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
282
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
283 /* set these to zero unless you want a
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
284 non-default empty packet rate (see below) */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
285 unsigned long cip_n;
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
286 unsigned long cip_d;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
287
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
288 /* set this to zero unless you want a
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
289 non-default SYT cycle offset (default = 3 cycles) */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
290 unsigned int syt_offset;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
291 };
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
292
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
293 /* NOTE: you may only allocate the DV frame ringbuffer once each time
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
294 you open the dv1394 device. DV1394_INIT will fail if you call it a
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
295 second time with different 'n_frames' or 'format' arguments (which
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
296 would imply a different size for the ringbuffer). If you need a
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
297 different buffer size, simply close and re-open the device, then
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
298 initialize it with your new settings. */
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
299
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
300 /* Q: What are cip_n and cip_d? */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
301
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
302 /*
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
303 A: DV video streams do not utilize 100% of the potential bandwidth offered
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
304 by IEEE 1394 (FireWire). To achieve the correct rate of data transmission,
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
305 DV devices must periodically insert empty packets into the 1394 data stream.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
306 Typically there is one empty packet per 14-16 data-carrying packets.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
307
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
308 Some DV devices will accept a wide range of empty packet rates, while others
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
309 require a precise rate. If the dv1394 driver produces empty packets at
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
310 a rate that your device does not accept, you may see ugly patterns on the
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
311 DV output, or even no output at all.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
312
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
313 The default empty packet insertion rate seems to work for many people; if
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
314 your DV output is stable, you can simply ignore this discussion. However,
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
315 we have exposed the empty packet rate as a parameter to support devices that
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
316 do not work with the default rate.
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
317
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
318 The decision to insert an empty packet is made with a numerator/denominator
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
319 algorithm. Empty packets are produced at an average rate of CIP_N / CIP_D.
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
320 You can alter the empty packet rate by passing non-zero values for cip_n
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
321 and cip_d to the INIT ioctl.
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 185
diff changeset
322
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
323 */
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
324
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
325
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
326
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
327 struct dv1394_status {
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
328 /* this embedded init struct returns the current dv1394
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
329 parameters in use */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
330 struct dv1394_init init;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
331
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
332 /* the ringbuffer frame that is currently being
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
333 displayed. (-1 if the device is not transmitting anything) */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
334 int active_frame;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
335
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
336 /* index of the first buffer (ahead of active_frame) that
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
337 is ready to be filled with data */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
338 unsigned int first_clear_frame;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
339
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
340 /* how many buffers, including first_clear_buffer, are
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
341 ready to be filled with data */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
342 unsigned int n_clear_frames;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
343
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
344 /* how many times the DV stream has underflowed, overflowed,
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
345 or otherwise encountered an error, since the previous call
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
346 to DV1394_GET_STATUS */
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
347 unsigned int dropped_frames;
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
348
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
349 /* N.B. The dropped_frames counter is only a lower bound on the actual
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
350 number of dropped frames, with the special case that if dropped_frames
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
351 is zero, then it is guaranteed that NO frames have been dropped
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
352 since the last call to DV1394_GET_STATUS.
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
353 */
27
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
354 };
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
355
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
356
fcdea3df94fe dv patch by Max Krasnyansky (maxk at qualcomm dot com)
bellard
parents:
diff changeset
357 #endif /* _DV_1394_H */