Re: [libdc1394-devel] Re: Major code cleanup: new branch for 2.0?
Capture and control API for IIDC compliant cameras
Brought to you by:
ddouxchamps,
gordp
From: Arne C. <ar...@in...> - 2004-10-07 08:07:11
|
Reply to the mail from Johann Schoonees (j.s...@ir...): > > Then a user can (1) talk directly to camera registers, or (2) use > video1394 DMA to access a non-IIDC device, or (3) talk to DCAM > registers and control DMA directly [(1)+(2)], or (4) have simple > control of any 1394 DCAM [libdc1394], or (5) > I-want-to-use-a-camera-in-my-program [camwire], or (6) > just-give-me-an-image [Coriander]. Just select the appropriate > library or app. I do not see any advantage to the current state: We have libraw1394 for register access, video1394 for DMA and libdc1394 for IIDC camera access. To improve this, IMHO the right way would be to dump the video1394 ( which has a lot of problems ) in favor of a more generic raw_iso interface in libraw1394 ( ie.: DMA buffer fill mode with user pointers ), so we have one generic API for 1394 access. libdc1394 should provide ( still IMHO ) a flat abstraction to IIDC cameras, so you have get/set functions for the video format, properties and the like. This is for people who know their camera and are willing to write an application solely for an IIDC camera. But the main issue that remains is that we now have: libdc1394 for IIDC cameras, v4l and v4l2 for USB cameras and PCI grabbers, dv1394 for DV cameras, something else for DVB devices and maybe some proprietary libs for some specialized proprietary cameras. It is just impossible to write an application which interfaces with all of these devices. Every application has to know the devices it uses. Also with APIs which offer functions like "get_brightness" for the brightness property, "get_gain" for the gain property it is hard to impossible to write an application that interfaces with devices which supported set of properties vary a lot. We need something like Microsofts DirectShow: Something that completely abstracts from the hardware. If some of you have access to a Windows2000/XP system, you should try the "IC Capture" program which interfaces with DirectShow ( www.imagingcontrol.com ) - you can download a trial version to see how it works. ( CAUTION/NOTE : I work for The Imaging Source so this is prejudiced. I do not want to advertise here but to give you an idea on the advantage of such an generic interface for the user ). If you have a Sony IIDC camera, you can also get a trial version of the driver to see how it works with windows ( again, prejudiced: I wrote the driver ;-) ). With this application ( and of course the SDK that was used to develop the app ), it simply does not matter what device you are using: IIDC cameras, PCI framegrabbers, webcams, DV devices... all look exactly likewise to the app. The app does not even have to have knowledge what properties are supported by the device. I think, this is something Linux needs to achieve. I try to get this functionality with my "unicap" library ( unicap.sourceforge.net ) - which still has some way to go. libdc1394/coriander is great, I use it a lot during development ( I could not imagine developing the firmware for our next generation camera without it ;-) ) but I currently only see it either in the use by other developers or by individuals, mainly at universities. It is still too hard to use for the average user, requires to much knowledge about the IIDC protocol and also the whole thing is too hard to install to the average user. I guess we can do little about the last point ( installation ) but if you compare the whole thing to Windows: On windows, you download the application and a driver package, double click the driver installation utility, double click the application setup -- and within a glance you are ready to go. With Linux, you need to figure where to get the package for your distro or need to know how to do a "configure && make && make install" and not only that, you need to install "libraw1394" first, then "video1394", then "libdc1394", then "coriander". Then you often have to check the permissions for "/dev/video1394" and "/dev/raw1394" to get it working. Then you need to setup "coriander" correctly for DMA capture sometimes even point it to the right "/dev" file, then eventually you manage to start the live video display ( and with some luck you get it then if you do not come along with some YUY2/UYVY issues like i did ;-) ). Ok, that was just my two cents ( and some comments about the daily life of a company who sells the camera and software ). -Arne |