Thank you very much, you made a difference in a teacher's life.
Regards Laurence Tratt <[email protected]> wrote: > Lots of us have to use webcams more than we used to. There have been > some recent changes in OpenBSD support for webcams that some might > find useful. Most of the hard work was done by Marcus Glocker, with > input from Ingo Feinerer, sc.dying, and myself. > > The first change is that MJPEG in cameras now works reliably. In > essence, most webcams can deliver uncompressed video at a low frame > rate or compressed (MJPEG) at a high frame rate. The latter tickled a > limitation in the USB stack, which led to the picture breaking up -- > and which is now fixed! If you want to know what your camera is > capable of, my suggestion is to install ffmpeg and then run: > > $ ffplay -f v4l2 -list_formats all -i /dev/video0 > > which will output lots of stuff, but at the end has the important > bits: > > [video4linux2,v4l2 @ 0x914fbbb6000] Raw : yuyv422 : > YUYV : 640x480 160x90 160x120 176x144 320x180 320x240 > 352x288 432x240 640x360 800x448 800x600 864x480 960x720 1024x576 > 1280x720 1600x896 1920x1080 2304x1296 2304x1536 [video4linux2,v4l2 @ > 0x914fbbb6000] Compressed: mjpeg : MJPEG : > 640x480 160x90 160x120 176x144 320x180 320x240 352x288 432x240 > 640x360 800x448 800x600 864x480 960x720 1024x576 1280x720 1600x896 > 1920x1080 > > This shows that my C920s webcam has a maximum MJPEG resolution of > 1920x1080. The "raw" options (yuyv422) might look tempting as they > have a max resolution of 2304x1536, but "video -q" shows they can > only achieve low frame rates: > > $ video -q > video device /dev/video: > encodings: yuy2 > frame sizes (width x height, in pixels) and rates (in frames per > second): 160x90: 30, 24, 20, 15, 10, 7, 5 > 160x120: 30, 24, 20, 15, 10, 7, 5 > 176x144: 30, 24, 20, 15, 10, 7, 5 > 320x180: 30, 24, 20, 15, 10, 7, 5 > 320x240: 30, 24, 20, 15, 10, 7, 5 > 352x288: 30, 24, 20, 15, 10, 7, 5 > 432x240: 30, 24, 20, 15, 10, 7, 5 > 640x360: 30, 24, 20, 15, 10, 7, 5 > 640x480: 30, 24, 20, 15, 10, 7, 5 > 800x448: 30, 24, 20, 15, 10, 7, 5 > 800x600: 24, 20, 15, 10, 7, 5 > 864x480: 24, 20, 15, 10, 7, 5 > 960x720: 15, 10, 7, 5 > 1024x576: 15, 10, 7, 5 > 1280x720: 10, 7, 5 > 1600x896: 7, 5 > 1920x1080: 5 > 2304x1296: 2 > 2304x1536: 2 > controls: brightness, contrast, saturation, gain, sharpness, > white_balance_temperature > > As that suggests, video(1) only easily supports YUY2/YUYV422. The > easiest way to see higher frame rates I know of is to use ffmpeg. > Most cameras can sustain 30fps (or sometimes 60fps) at high > resolutions as can be seen with: > > $ ffplay -f v4l2 -input_format mjpeg -video_size 1920x1080 -i > /dev/video0 > > If you use video chat in a browser, you should find that it can now > reliably support higher resolutions without problems. > > video(1) has also been extended to allow altering webcam controls > from the command-line. In order to do this, nothing else can be using > the webcam; however, the settings are "sticky" so they effect > subsequent programs which use the webcam. I can see the current > settings with: > > $ video -c > brightness=128 > contrast=128 > saturation=128 > gain=0 > sharpness=128 > white_balance_temperature=auto > > and I can reset things back to a known state with: > > $ video -d > > I can change e.g. brightness with: > > $ video brightness=200 > brightness: 128 -> 200 > > Some, though not all, controls have automatic adjustment. If your > webcam has the white_balance_temperature control, it probably > defaults to "auto", meaning that it tries to adjust based on how > yellow/white it thinks the light is. In my experience, the automatic > adjustment ends up making everything look like a Smurfs homage (i.e. > too blue). video(1) allows us to override the automatic setting and > specify a temperature manually (in Kelvin). During the day I might > use: > > $ video white_balance_temperature=5000 > white_balance_temperature: auto -> 5000 > > If you really want, you can use "auto" as a value for such controls > instead of a numeric value. Note further that if you're used to other > operating systems webcam support, you might expect there to be two > white balance temperature controls (one for the manual temperature > and a separate auto boolean): video(1) unifies them. > > You can specify multiple controls at once e.g.: > > $ video brightness=50 white_balance_temperature=3000 > brightness: 128 -> 50 > white_balance_temperature: auto -> 3000 > > Be aware that uvideo doesn't yet support the "camera terminal control > requests" part of the UVC spec so some controls (e.g. zoom, pan, and > exposure) cannot be altered. If and when uvideo gains such support, > the necessary changes to video(1) will be trivial. > > Overall, I think this makes webcams much more usable under OpenBSD, > and thanks again to Marcus, because none of this would have happened > without him! > > > Laurie

