:::_videoIO_::: for PD
======================

General video IO framework for Pure Data.

This framework should provide a general video input and output
system (reading/writing various files and from/to devices) for
Pure Data. The interface is platform independent and the needed
libraries are checked and loaded at runtime, so the host
application (e.g. Gem, Gridflow, PDP) has no compile time
dependency on all those video libraries.

At the moment only the interface to Gem is implemented and
consists of the following objects: pix_file_read, pix_file_write
and pix_device_read. They use the gstreamer plugins for all these
opterations, but alternative libraries, especially on Windows and
OSX, should be added in future.

What they can do ATM:

pix_file_read:
reading audio and video from all formats gstreamer support (quite
a lot); reading from dvd; http, mms, udp,... streams;

pix_file_write:
writes in some codecs to disk, also streams over udp;

pix_device_read:
can read from camera and DV devices;

This project was part of the Google Summer of Code program 2007.


License
=======

See file GnuGPL.LICENSE in this directory.


Installation / Compilation
==========================

See the file INSTALL.


Dependencies
============

The core
--------
PD >= 0.40
GEM >= Gem 0.91 from 22.1.2009

The Gstreamer plugins
---------------------
Gstreamer >= 0.10.13 with development package
Gstreamer Base Plugins >= 0.10.13
Gstreamer Good Plugins >= 0.10.6
Gstreamer Bad Plugins >= 0.10.5
  - You will need recent version with appsrc and appsink elements.
Gstreamer Ugly Plugins >= 0.10.6
  - You will only need the ugly plugins only if you want to
    play DVDs.
Gstreamer FFmpeg Plugins >= 0.10.2

Dependencies of Gstreamer
-------------------------
libglib2.0 with development package
libxml2 with development package


Writing new plugins
===================

If you want to write a new plugin you can simply derive from the
base classes (i.e FileRead, FileWrite and DeviceRead).
Additionally a registerPlugin(VIOKernel &) method, which registers
the plugin to the kernel, is required.
For more information look at an existing plugin (e.g. FileReadGst)
to see how it works.
One also has to add a registerPlugin("YourPluginName") call in the
method VIOKernel::loadPlugins() of the kernel. Then it will try to
load the plugin at startup.


Known Bugs
==========

See file BUGS.


Authors
=======

Georg Holzmann, grh _at_ mur _dot_ at
Thomas Holzmann, holzi1 _at_ gmx _dot_ at
