/**
 * \ingroup dev_examples
 *
 * \defgroup grabber_audiovisual Example for grabber (grabber_audiovisual)

Instantiates \ref cmd_device_grabber "grabber" device implemented by yarp::dev::ServerFrameGrabber.
\verbatim
# wrap an audiovisual source for the network
device grabber
subdevice ffmpeg_grabber
source tiny.avi
# the movie has images and sound; let's send them on different ports
# (or could use shared-ports flag to put them on same port)
name /visual
name2 /audio
\endverbatim
If this text is saved in a file called grabber_audiovisual.ini then the device can be created by doing:
\verbatim
yarpdev --file grabber_audiovisual.ini
\endverbatim
Of course, the configuration could be passed just as command line options, or as a yarp::os::Property object in a program:
\code
Property p;
p.fromConfigFile("grabber_audiovisual.ini");
// of course you could construct the Property object on-the-fly
PolyDriver dev;
dev.open(p);
if (dev.isValid()) { /* use the device via view method */ }
\endcode
Here is a list of properties checked when starting up a device based on this configuration file.
Note that which properties are checked can depend on whether other properties are present.
In some cases properties can also vary between operating systems.
So this is just an example

<table>
<tr><td>PROPERTY</td><td>DESCRIPTION</td><td>DEFAULT</td></tr>
<tr><td>device</td><td></td><td></td></tr>
<tr><td>subdevice</td><td>name (or nested configuration) of device to wrap</td><td></td></tr>
<tr><td>ffmpeg_grabber.device</td><td></td><td></td></tr>
<tr><td>ffmpeg_grabber.wrapped</td><td></td><td></td></tr>
<tr><td>ffmpeg_grabber.source</td><td>media file to read from</td><td>default.avi</td></tr>
<tr><td>ffmpeg_grabber.loop</td><td>media should loop (default)</td><td></td></tr>
<tr><td>ffmpeg_grabber.noloop</td><td>media should not loop</td><td></td></tr>
<tr><td>ffmpeg_grabber.sync</td><td>sync on image or audio (if have to choose)?</td><td>image</td></tr>
<tr><td>ffmpeg_grabber.nodelay</td><td>media will play in simulated realtime unless this is present</td><td></td></tr>
<tr><td>ffmpeg_grabber.pace</td><td>simulated realtime multiplier factor (must be <1 right now)</td><td>1.0</td></tr>
<tr><td>ffmpeg_grabber.v4l</td><td>if present, read from video4linux</td><td></td></tr>
<tr><td>ffmpeg_grabber.v4l1</td><td>if present, read from video4linux</td><td></td></tr>
<tr><td>ffmpeg_grabber.v4l2</td><td>if present, read from video4linux2</td><td></td></tr>
<tr><td>ffmpeg_grabber.ieee1394</td><td>if present, read from firewire</td><td></td></tr>
<tr><td>no_drop</td><td>if present, use strict policy for sending data</td><td></td></tr>
<tr><td>stamp</td><td>if present, add timestamps to data</td><td></td></tr>
<tr><td>name</td><td>name of port to send data on</td><td>/grabber</td></tr>
<tr><td>shared-ports</td><td>If present, send audio and images on same port</td><td></td></tr>
<tr><td>name2</td><td>Name of second port to send data on, when audio and images sent separately</td><td>/grabber2</td></tr>
<tr><td>single_threaded</td><td>if present, operate in single threaded mode</td><td></td></tr>
<tr><td>framerate</td><td>maximum rate in Hz to read from subdevice</td><td>0</td></tr>
</table>

\sa yarp::dev::ServerFrameGrabber

 */
