1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
|
libv4l-0.6.0
------------
* Recognize disabled controls and replace with fake equivalents where
available
* Add support for decompressing ov511 and ov518 "JPEG", by piping data through
an external helper as I've failed to contact Mark W. McClelland to get
permission to relicense the code. If you know a working email address for
Mark W. McClelland, please let me know.
* Fix a bug in the always report widths which are a multiple of 8 code added
in 0.5.97
libv4l-0.5.99
-------------
* Link libv4lconvert with -lm for powf by Gregor Jasny
* Fix black screen on devices with hardware gamma control
* Fix crash with devices on which we do not emulate fake controls
* Add a patch by Hans Petter Selasky <hselasky@freebsd.org>, which should
lead to allowing use of libv4l (and the Linux webcam drivers ported
to userspace usb drivers) on FreeBSD, this is a work in progress
libv4l-0.5.98
-------------
* Add software gamma correction
* Add software auto gain / exposure
* Add support for separate vflipping and hflipping
* Add fake controls controlling the software h- and v-flipping
* Add ability to determine upside down cams based on DMI info
* Add the capability to provide 320x240 to apps if the cam can only
do 320x232 (some zc3xx cams) by adding black borders
* Rewrite video processing code to make it easier to add more video filters
(and with little extra processing cost). As part of this the normalize
filter has been removed as it wasn't functioning satisfactory anyways
* Support V4L2_CTRL_FLAG_NEXT_CTRL for fake controls by Adam Baker
* Some makefile improvements by Gregor Jasny
* Various small bugfixes and tweaks
* The V4L2_ENABLE_ENUM_FMT_EMULATION v4l2_fd_open flag is obsolete, libv4l2
now *always* reports emulated formats through the ENUM_FMT ioctl
libv4l-0.5.97
-------------
* As the version number shows this is a beta release of the 0.6.x series,
the big change here is the addition of video processing to libv4l
currently this only does whitebalance and normalizing (which turns out
to be useless for most cams) but the basic framework for doing video
processing, and being able to control it through fake v4l2 controls using
for example v4l2ucp is there.
The initial version of this code was written by 3 of my computer science
students: Elmar Kleijn, Sjoerd Piepenbrink and Radjnies Bhansingh
* Currently whitebalancing gets enabled based on USB-ID's and it only gets
enabled for Pixart webcam's. You can force it being enabled with other
webcams by setting the environment variable LIBV4LCONTROL_CONTROLS, this
sets a bitmask enabling certain v4l2 controls which control the video
processing set it to 15 to enable both whitebalancing and normalize. You
can then change the settings using a v4l2 control panel like v4l2ucp
* Only report / allow supported destination formats in enum_fmt / try_fmt /
g_fmt / s_fmt when processing, rotating or flipping.
* Some applications / libs (*cough* gstreamer *cough*) will not work
correctly with planar YUV formats when the width is not a multiple of 8,
so crop widths which are not a multiple of 8 to the nearest multiple of 8
when converting to planar YUV
* Add dependency generation to libv4l by: Gilles Gigan <gilles.gigan@gmail.com>
* Add support to use orientation from VIDIOC_ENUMINPUT by:
Adam Baker <linux@baker-net.org.uk>
* sn9c20x cams have occasional bad jpeg frames, drop these to avoid the
flickering effect they cause, by: Brian Johnson <brijohn@gmail.com>
* adjust libv4l's upside down cam detection to also work with devices
which have the usb interface as parent instead of the usb device
* fix libv4l upside down detection for the new v4l minor numbering scheme
* fix reading outside of the source memory when doing yuv420->rgb conversion
libv4l-0.5.9
------------
* Add support for MR97310A decompression by Kyle Guinn <elyk03@gmail.com>
* Add support for sq905c decompression by Theodore Kilgore
<kilgota@auburn.edu>
* Add hm12 support for the cx2341x MPEG encoder devices by Hans Verkuil
<hverkuil@xs4all.nl>
libv4l-0.5.8
------------
* Add support for UYVY (for USB Apple iSight) patch by Julien BLACHE
<jb@jblache.org>
* Remove v4lconvert_yvyu_to_yuv420 function as its functionality is
duplicate with v4lconvert_yuyv_to_yuv420
* Use Requires.private where appropiate in .pc files (patch by Gregor Jasny)
* Switch to using USB-id's instead of USB product string, as not all devices
set a unique product string. This fixes the upside down issues with
genius e-messenger 112 cams
* Add support for sn9c20x-i420 format patch by Vasily Khoruzhick
<anarsoul@gmail.com>
libv4l-0.5.7
------------
* Fix a nasty (and stupid) bug in the special try_fmt handling for UVC cams
* Add some more verbose logging of various calls when asking libv4l to log
calls to a file, to assist in (future) debugging
libv4l-0.5.6
------------
* Always do a s_fmt on uvc cams even if this changes nothing, as not doing
the s_fmt triggers a bug in the uvcvideo driver in kernel <= 2.6.28
(with certain cams)
libv4l-0.5.5
------------
* Avoid the use of try_fmt as much as possible on UVC cams, instead use the
results of the enum_framesizes ioctl. This is because:
1) try_fmt actually causes IO with UVC cams making apps which do lot of
querrying of device capabilities slow (cheese)
2) some buggy cams don't like getting lots of UVC video probes and crash
when they do
libv4l-0.5.4
------------
* Don't report DQBUF errors when errno is EAGAIN, this fixes flooding the
screen with errors when applications use non blocking mode
* Add support for downscaling to make apps which want low resolutions
(skype, spcaview) happy when used with cams which can only do high
resolutions (by Lukáš Karas <lukas.karas@centrum.cz>).
* Add support for converting to YV12 planar (next to the already supported
YU12 / I420)
* Implement RGB/BGR24 -> YU/YV12 conversion
libv4l-0.5.3
------------
* When conversion requires multiple passes don't alloc the needed temporary
buffer on the stack, as some apps (ekiga) use so much stack themselves
this causes us to run out of stack space
libv4l-0.5.2
------------
* Add Philips SPC210NC to list of cams with upside down sensor, reported by
Rieker Flaik
* Work around some drivers (pwc) not properly reflecting what one gets after a
s_fmt in their try_fmt answer
* Check that s_fmt atleast gives us the width, height and pixelformat try_fmt
promised us, and if not disable conversion
* Only check width, height and pixelformat when checking if we are doing
conversion, instead of doing a memcmp, as that are the only things which
the convert code checks
* Take into account that the buffers only contain half of the lines when
field is V4L2_FIELD_ALTERNATE
libv4l-0.5.1
------------
* Add support for software cropping from 352x288 -> 320x240 / 176x144 ->
160x120, so that apps which will only work with vga resolutions like
320x240 (Skype!) will work with cams/drivers which do not support cropping
CIF resolutions to VGA resolutions in hardware. This makes all 2.6.27 gspca
supported cams, except for the pac7302 which only does 640x480 (and skype
wants 320x240), work with skype
* The v4lconvert_convert function was becoming a bit of a mess, so split the
functionailiy into separate v4lconvert_convert_pixfmt, v4lconvert_rotate and
v4lconvert_crop functions, and make v4lconvert_convert a frontend to
these
* Do not link the wrapper libs against libpthread (patch from Gregor Jasny)
libv4l-0.5.0
------------
* Add support for enumerating framesizes and frameintervals of emulated
formats when the driver supports it for the real format
* Make sure the video device always gets opened RW even if the application
asks for RO
* Add Genius E-Messenger 112 (093a:2476) to list of cams which have their
sensor upside down
libv4l-0.4.3
------------
* Add suport for YUYV and YVYU packed pixel formats (Jean-Francois Moine)
* Prefer compressed pixformats for resolutions > 176x144
libv4l-0.4.2
------------
* The bayer pixel order in gspca's sonixb driver was different from that in
the sn9c102 driver from the mainline kernel, a recent gspca patch fixes
this, adjust libv4l to match (and make it work properly with the sn9c102
driver).
libv4l-0.4.1
------------
* When the driver supports read() and we are not converting let the driver
handle read() instead of emulating it with mmap mode
* Fix errors and warnings when compiling with ICC (Gregor Jasny)
* Add support to libv4lconvert for rotating images 90 (for Pixart 7302 cams)
or 180 (Philips SPC200NC / Philips SPC300NC) degrees
* Add support for Pixart custom JPEG format
* Hide non public symbols (Gregor Jasny)
* Fix and enable x86_64 asm jpeg decompress helper functions (Gregor Jasny)
libv4l-0.4.0
------------
* Be more relaxed in our checks for mixing read and mmap access, we were
being more strict in this then certain kernel drivers (bttv) making xawtv
unhappy
* With some drivers the buffers must be mapped before queuing, so when
converting map the (real) buffers before calling the qbuf ioctl
* Add support for conversion to RGB24 (before we only supported BGR24) based
on a patch by Jean-Francois Moine
* When the hardware supports a format natively prefer using the native
version over converting from another supported format
* Various Makefile and pkgconfig file improvements by Gregor Jasny (Debian)
* Drop the appl-patches dir, all application patches are now available and
tracked here: http://linuxtv.org/v4lwiki/index.php/Libv4l_Progress
libv4l-0.3.9
------------
* Not only see /dev/video* but also /dev/v4l/* as video devices
(only affects libv4l1 and the wrappers) patch from Brandon Philips
* Silence the creation of the .pc files in the Makefiles (Brandon Philips)
* Part of the copyright headers refered GPL instead of LGPL due to a copy
and paste error (Brandon Philips)
libv4l-0.3.8
------------
* work around wrong REQUEST_BUFFERS ioctl return code from certain drivers
* add pkg-config (.pc) files for easier detection if libv4l is available
* check capabilities for streaming, if the driver cannot do streaming don't
insert ourselves between the application and the driver
* intercept get capabilites and report read capability (which we always offer)
* query buffer: indicate the mapping state of our (fake) buffer in the flags
libv4l-0.3.7
------------
* Add spca505/6 and spca508 cam specific formats (YUYV per line variations)
libv4l-0.3.6
------------
* Add missing COPYING.LIB file
libv4l-0.3.5
------------
* Make JPEG decoding more robust
libv4l-0.3.4 (the brownpaperbag release)
----------------------------------------
* The mmap64 support in 0.3.3, has caused a bug in libv4l1 when running on
32 bit systems (who uses those now a days?), this bug caused v4l1
compatibility to not work at all, this release fixes this
* Some apps (xawtv, kopete) use an ioctl wrapper internally for various
reasons. This wrappers request argument is an int, but the real ioctl's
request argument is an unsigned long. Passing the VIDIOC_xxx defines through
to the wrapper, and then to the real ioctl, causes the request to get sign
extended on 64 bit args. The kernel seems to ignore the upper 32 bits,
causing the sign extension to not make a difference. libv4l now also
ignores the upper 32 bits of the libv4lx_ioctl request argument on 64 bit
archs
* Add a bugfix patch for kopete in the appl-patches dir, currently it assumes
that it got the width and height it asked for when doing a S_FMT, which is a
wrong assumption
libv4l-0.3.3
------------
* Add open64 and mmap64 wrappers to the LD_PRELOAD wrapper libs, so that
they also work for applications compiled with FILE_OFFSET_BITS=64, this
fixes using them with v4l-info
* While looking at xawtv in general, found a few bugs in xawtv itself, added
a patch to fix those to the appl-patches dir
* Talking about the appl-patches dir, restore that as it accidentally got
dropped from 0.3.2
* Be more verbose in various places when it comes to logging (esp errors)
* Change v4lconvert_enum_fmt code a bit, so that it is easier to add more
supported destination formats to libv4lconvert
* Don't return -EINVAL from try_fmt when we cannot convert because the cam
doesn't have any formats we know. Instead just return as format whatever the
cam returns from try_fmt, this new behavior is compliant with the v4l2
api as documented
libv4l-0.3.2
------------
* Add support for converting from sn9c10x compressed data
* Add support for converting from pac207 compressed data
* Add "make install" Makefile target
libv4l-0.3.1
------------
* Only serialize V4L2_BUF_TYPE_VIDEO_CAPTURE type ioctls
* Do not return an uninitialized variable as result code for GPICT
(fixes vlc, but see below)
* Add an apps-patches directory which includes:
* vlc-0.8.6-libv4l1.patch, modify vlc's v4l1 plugin to directly call into
libv4l1, in the end we want all apps todo this as its better then
LD_PRELOAD tricks, but for vlc this is needed as vlc's plugin system
causes LD_PRELOAD to not work on symbols in the plugins
* camorama-0.19-fixes.patch, small bugfixes to camorama's v4l1 support,
this patch only fixes _real_ bugs in camorama and does not change it to
work with v4l1compat. Although it does work better with these bugs fixed
:) With this patch and LD_PRELOAD=<path>/v4l1compat.so it works
flawless.
libv4l-0.3
----------
* add extern "C" magic to public header files for c++ usage (Gregor Jasny)
* Make libv4l1 and libv4l2 multithread use safe, see README.multi-threading
* Add v4lx_dup() calls (and intercept dup() from the wrappers) this fixes
use with gstreamer's v4l2 plugin (tested with cheese)
* Hopefully definitely fix compile errors on systems with a broken videodev2.h
libv4l-0.2
----------
*** API change ***
* Change v4lconvert api so that the v4lconvert struct always gets allocated
by the library, this to make it opaque, so that we can avoid future API
and ABI changes
* Add support for yuv420 -> bgr24 conversion
* When converting from v4l2 pixelformat to v4l12 palette return
VIDEO_PALETTE_YUV420P instead of VIDEO_PALETTE_YUV420 for
V4L2_PIX_FMT_YUV420 as that is what most apps seem to expect
* override kernel v4l1 compat min / max size with our own more accurate values
* fix v4l1 munmap bug where it didn't recognise the buffer being unmapped was
our fake buffer (fixes gstreamer v4l1 support, checked with cheese)
* add support for reporting the emulated pixelformats with ENUM_FMT, this
defaults to off, and can be activated by passing a flag to enable it to
v4l2_fd_open. This gets enabled by default the wrappers.
* v4l2: mmap the real device buffers before doing conversion when DQBUF gets
called before the application has called mmap (avoid crash).
libv4l-0.1
----------
* major shuffle / rewrite now split into libv4l1, libv4l2, libv4lconvert
and 2 wrappers for binary compatibility
* rewritten LGPL bayer decoding
* many many other changes and fixes
v4l1-compat-0.6 (V4L2 apps stay working)
----------------------------------------
* Do not go into emulation mode of rgb24 immediately, but only after a
GPICT ioctl which has not been preceded by a SPICT ioctl, AKA do not get
in the way of V4L2 read calls by doing conversion on them
* Do not get in the way of mmap calls made by V4L2 applications
* Fix swapping of red and blue in bayer -> bgr24 decode routine
* Remember the v4l1 palette asked for with SPICT and return that, as
otherwise we loose information when going v4l1 -> v4l2 -> v4l1, for example
YUV420P becomes YUV420, which are separate in v4l1.
v4l1-compat-0.5 (perfect camorama)
----------------------------------
* Allow changing of format after the buffers have been mapped, by tearing
down the entire house, changing the fundament and then rebuilding it.
Now changing the capture resolution in camorama works!
* Fix jpeg decoding error reporting
* Allow jpeg's with a height which is a multiple of 8 (was 16)
* Remove a number of pretty new VIDIOCXXX -> string mappings from log.c,
fixing compiling with somewhat older kernels
v4l1-compat 0.4
---------------
* Do not even try to change the format in v4l1_compat_set_format(), unless
_really_ necessary.
* Cleanup ambigious use of src_format (no functional changes)
* Drop the mmap hack for zerocopy access under certain conditions, one of them
that the cam can deliver the requested format. Although avoiding the
memcpy in this scenarios is a good thing todo, there were several issues
with the 0.3 implementation of this, fixing all these means adding lots of
special cases all over the code. So instead we just drop support and
always do atleast a memcpy (or a conversion). If an application cannot
live with the speed penalty this imposes it should be ported to v4l2.
* Now that we've gotten rid of the zerocopy mmap hack, we can safely allow
mixing read and mmap based IO.
* Explictly include linux/ioctl.h, to fix compile with kernel headers where
linux/videodev.h doesn't.
v4l1-compat 0.3
---------------
* Don't allow multiple opens, in theory our code can handle it, but not all
v4l2 devices like it (ekiga does it and uvc doesn't like it).
v4l1-compat 0.2
---------------
* When mmap gets passed an fd of -1 (anonymous map) don't look for it in our
list of managed fds, as we use -1 to mark unused entries (fixes ekiga
crashing). Also check for an fd of -1 in the other calls we intercept.
* In close() start with removing the fd from our list of managed fds, this must
be done first, because as soon as we've done the actual close syscall, the
fd maybe returned by an open in another thread and we don't want to intercept
calls to this new fd.
* Make unknown v4l1 palette types a normal level log messages instead of an
error.
* When an applicaiton changes the width / height through the CMCAPTURE ioctl
remember the new width and height.
* If the devices initial v4l2 pixformat has no corresponding v4l1 palette, try
setting a format which does (and which we emulate when necessary) so that
applicactions which just query the current format (GPICT) and then take
whatever they get will work (partially fixes camorama)
* Implement our own SWIN instead of using kernel compat layer, for more
flexibility and better error checking
v4l1-compat 0.1
---------------
* Initial public release.
|