Commit a353a43e authored by Jonathan Wilkes's avatar Jonathan Wilkes
Browse files

remove videoIO as it's been dead for over a decade

parent 50e38058
KNOWN BUGS:
===========
- UDP end-of-stream bug (FileReadGst): When you read an UDP stream and the stream is finished and you have not sent the stop message before this, the application freezes untilthere is a new stream to read.
- audio_bin_ gets no end-of-stream (FileReadGst): When you play a file with audio and video tracks and you turn on audio and video playback, then with some video files the application freezes at the end of the video file. It seems that then only the video_bin_ gets the EOS signal and the audio_bin_ then tries to pull a buffer but cannot get one.
- audio/video synchronisation (FileReadGst): If play only the video track of a file and later start playing the audio track, the audio track starts at the beginning, though the video is somewhere else
- writing an empty gemwin (FileWriteGst): If you open a file to record, start recording and then open an empty gemwin, it gets segmentation fault (this seems to be a bug in pix_file_read::render)
This diff is collapsed.
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom
to share and change it. By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This General
Public License applies to most of the Free Software Foundation's
software and to any other program whose authors commit to using it.
(Some other Free Software Foundation software is covered by the
GNU Library General Public License instead.) You can apply it to your
programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new free
programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone
to deny you these rights or to ask you to surrender the rights. These
restrictions translate to certain responsibilities for you if you distribute
copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis
or for a fee, you must give the recipients all the rights that you have. You
must make sure that they, too, receive or can get the source code. And
you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on,
we want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software patents.
We wish to avoid the danger that redistributors of a free program will
individually obtain patent licenses, in effect making the program
proprietary. To prevent this, we have made it clear that any patent must
be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS FOR
COPYING, DISTRIBUTION AND
MODIFICATION
0. This License applies to any program or other work which contains a
notice placed by the copyright holder saying it may be distributed under
the terms of this General Public License. The "Program", below, refers
to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it, either
verbatim or with modifications and/or translated into another language.
(Hereinafter, translation is included without limitation in the term
"modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of running
the Program is not restricted, and the output from the Program is
covered only if its contents constitute a work based on the Program
(independent of having been made by running the Program). Whether
that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the notices
that refer to this License and to the absence of any warranty; and give
any other recipients of the Program a copy of this License along with the
Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide a
warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but does
not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program, and
can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based on
the Program, the distribution of the whole must be on the terms of this
License, whose permissions for other licensees extend to the entire
whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your
rights to work written entirely by you; rather, the intent is to exercise the
right to control the distribution of derivative or collective works based
on the Program.
In addition, mere aggregation of another work not based on the
Program with the Program (or with a work based on the Program) on a
volume of a storage or distribution medium does not bring the other
work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding
machine-readable source code, which must be distributed under
the terms of Sections 1 and 2 above on a medium customarily
used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your cost
of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with
such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to control
compilation and installation of the executable. However, as a special
exception, the source code distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies the
executable.
If distribution of executable or object code is made by offering access to
copy from a designated place, then offering equivalent access to copy
the source code from the same place counts as distribution of the source
code, even though third parties are not compelled to copy the source
along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt otherwise
to copy, modify, sublicense or distribute the Program is void, and will
automatically terminate your rights under this License. However, parties
who have received copies, or rights, from you under this License will not
have their licenses terminated so long as such parties remain in full
compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and all
its terms and conditions for copying, distributing or modifying the
Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the original
licensor to copy, distribute or modify the Program subject to these terms
and conditions. You may not impose any further restrictions on the
recipients' exercise of the rights granted herein. You are not responsible
for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot distribute
so as to satisfy simultaneously your obligations under this License and
any other pertinent obligations, then as a consequence you may not
distribute the Program at all. For example, if a patent license would not
permit royalty-free redistribution of the Program by all those who
receive copies directly or indirectly through you, then the only way you
could satisfy both it and this License would be to refrain entirely from
distribution of the Program.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents
or other property right claims or to contest validity of any such claims;
this section has the sole purpose of protecting the integrity of the free
software distribution system, which is implemented by public license
practices. Many people have made generous contributions to the wide
range of software distributed through that system in reliance on
consistent application of that system; it is up to the author/donor to
decide if he or she is willing to distribute software through any other
system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be
a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain
countries either by patents or by copyrighted interfaces, the original
copyright holder who places the Program under this License may add an
explicit geographical distribution limitation excluding those countries, so
that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
9. The Free Software Foundation may publish revised and/or new
versions of the General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may differ in
detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number
of this License, you may choose any version ever published by the Free
Software Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we
sometimes make exceptions for this. Our decision will be guided by the
two goals of preserving the free status of all derivatives of our free
software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF
CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM,
TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE
PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD
THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE
COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW
OR AGREED TO IN WRITING WILL ANY COPYRIGHT
HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED
ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY
OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Installation of videoIO plugins
===============================
- first you have to install Pd ;)
- then you need to compile and install Gem, download the code with
"svn co https://pd-gem.svn.sourceforge.net/svnroot/pd-gem/trunk/Gem/"
or from http://gem.iem.at/
- download VideoIO code with:
"svn co https://pd-gem.svn.sourceforge.net/svnroot/pd-gem/trunk/videoIO/"
- install gstreamer libraries:
- Gstreamer >= 0.10.13
- Gstreamer Base Plugins >= 0.10.13
- Gstreamer Good Plugins >= 0.10.6
- Gstreamer Bad Plugins >= 0.10.5
- Gstreamer Ugly Plugins >= 0.10.6
- Gstreamer FFmpeg Plugins >= 0.10.2
- install additional developer dependencies:
- libglib2.0 with development package
- libxml2 with development package
- libglu1-mesa-dev
- on ubuntu everything can be done with:
sudo apt-get install libgstreamer0.10-dev libgstreamer0.10-0 libgstreamer0.10-dev gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-tools libgstreamer-plugins-base0.10-0 libgstreamer-plugins-base0.10-dev gstreamer0.10-plugins-base gstreamer0.10-plugins-good libglib2.0-dev libxml2-dev libglu1-mesa-dev
- adjust all pathes in src/Make.config to your system settings
- go to the "src" directory and compile with "make"
- pd-externals and plugins can be installed with "make install"
- start pd, create e.g. a [pix_file_read] object and open the help patch
libdts-dev
\ No newline at end of file
:::_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
PD-CONV:
========
- Makefile von plugins/gstreamer rauslöschen
MAJOR TODOs:
============
- see file BUGS
- audio support for DeviceRead (should be the same as for FileRead) and FileWrite
- audio support should not be fixed to "stereo" - probably make the channel-number a creation argument
- plugins in path /usr/lib/videoIO or /usr/local/lib/videoIO should
be autodetected (e.g. FileReadGst.so should be autodetected as FileReadGst
plugin) !
- integrate priorities into the plugin system
OR
- the plugin factory (Server) should return the correct plugin for a given URI
- should plugins be
- windows/mac port
MINOR TODOs:
============
- see the various TODO-marks in source code comments
MISC:
=====
see also the file BUGS
#N canvas 11 0 918 623 10;
#X obj 758 468 cnv 15 100 60 empty empty empty 20 12 0 14 -195568 -66577
0;
#N canvas 0 0 450 300 gemwin 0;
#X obj 132 136 gemwin;
#X obj 67 89 outlet;
#X obj 67 10 inlet;
#X msg 67 70 set destroy;
#X msg 132 112 create \, 1;
#X msg 198 112 destroy;
#X msg 156 71 set create;
#X obj 67 41 route create;
#X connect 2 0 7 0;
#X connect 3 0 1 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 1 0;
#X connect 7 0 3 0;
#X connect 7 0 4 0;
#X connect 7 1 6 0;
#X connect 7 1 5 0;
#X restore 763 507 pd gemwin;
#X msg 763 488 create;
#X text 759 467 Create window:;
#X obj 603 397 gemhead;
#X obj 603 487 pix_texture;
#X obj 603 509 rectangle 4 3;
#X msg 33 361 start;
#X msg 93 361 stop;
#X obj 603 459 pix_device_read;
#X msg 33 561 quality \$1;
#X obj 33 542 hradio 15 1 0 6 empty empty empty 0 -8 0 10 -262144 -1
-1 0;
#X msg 33 158 open dv;
#X msg 33 191 open video;
#X msg 33 238 open video /dev/video0;
#X text 285 78 part ot the videoIO framework for pd;
#X text 325 36 ::: PIX_DEVICE_READ :::;
#X text 211 63 reads a stream from a device (dv \, capture card \,
webcam \, ...);
#X obj 625 428 r deviceread;
#X text 33 127 Open a device:;
#X obj 33 279 s deviceread;
#X text 103 158 opens a DV device;
#X text 116 205 (e.g. capture card \, webcam \, ...);
#X text 117 190 opens a video device;
#X text 201 238 opens a specific video device;
#X obj 33 396 s deviceread;
#X text 29 337 Start/Stop data transfer:;
#X msg 481 234 forceColorspace GRAY;
#X msg 481 212 forceColorspace YUV;
#X msg 481 278 forceColorspace RGBA;
#X msg 481 256 forceColorspace RGB;
#X text 479 126 Force a colorspace conversion:;
#X text 480 150 Without this messages streams are played in the colorspace
they are. By sending a forceColorspace message they will be converted
to the desired colorspace. NOTE: one has to reopen the device when
changing forceColorspace !;
#X text 31 454 Set the quality of the DV decoder:;
#X text 31 470 (for DV cams only);
#X text 32 493 A values from 0 (monochrome \, fastest) to 5 (highest
quality color decoding \, slowest) \, standard is 5 NOTE: one has to
reopen the device after setting the decoding quality !;
#X obj 481 306 s deviceread;
#X obj 33 584 s deviceread;
#X text 664 551 videoIO: created 2007 \, by;
#X text 623 565 Thomas Holzmann \, Georg Holzmann;
#X connect 1 0 2 0;
#X connect 2 0 1 0;
#X connect 4 0 9 0;
#X connect 5 0 6 0;
#X connect 7 0 25 0;
#X connect 8 0 25 0;
#X connect 9 0 5 0;
#X connect 10 0 37 0;
#X connect 11 0 10 0;
#X connect 12 0 20 0;
#X connect 13 0 20 0;
#X connect 14 0 20 0;
#X connect 18 0 9 0;
#X connect 27 0 36 0;
#X connect 28 0 36 0;
#X connect 29 0 36 0;
#X connect 30 0 36 0;
#N canvas 556 114 846 748 10;
#X obj 532 621 cnv 15 100 60 empty empty empty 20 12 0 14 -195568 -66577
0;
#N canvas 0 0 450 300 gemwin 0;
#X obj 132 136 gemwin;
#X obj 67 89 outlet;
#X obj 67 10 inlet;
#X msg 67 70 set destroy;
#X msg 132 112 create \, 1;
#X msg 198 112 destroy;
#X msg 156 71 set create;
#X obj 67 41 route create;
#X connect 2 0 7 0;
#X connect 3 0 1 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 1 0;
#X connect 7 0 3 0;
#X connect 7 0 4 0;
#X connect 7 1 6 0;
#X connect 7 1 5 0;
#X restore 537 660 pd gemwin;
#X msg 537 641 create;
#X text 533 620 Create window:;
#X obj 553 331 gemhead;
#X obj 553 567 pix_texture;
#X obj 553 589 rectangle 4 3;
#X obj 553 390 pix_file_read;
#X msg 52 360 start;
#X msg 108 360 stop;
#X msg 49 591 forceColorspace GRAY;
#X msg 49 569 forceColorspace YUV;
#X msg 49 635 forceColorspace RGBA;
#X floatatom 617 533 5 0 0 1 duration_in_msec - -;
#X floatatom 656 516 5 0 0 1 width - -;
#X floatatom 696 499 5 0 0 1 height - -;
#X msg 49 613 forceColorspace RGB;
#X obj 639 438 print VIDEO_END;
#X text 285 78 part ot the videoIO framework for pd;
#X text 297 62 reads a video or internet stream;
#X obj 53 289 s fileread;
#X obj 572 360 r fileread;
#X text 638 456 bang at the end of the video;
#X obj 53 213 openpanel;
#X obj 53 195 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X msg 53 234 set open \$1;
#X text 51 127 Open a file or stream:;
#X text 52 332 Play control:;
#X obj 52 392 s fileread;
#X obj 173 406 s fileread;
#X msg 244 381 seek 0;
#X msg 173 380 seek \$1;
#X floatatom 173 360 5 0 0 0 - - -;
#X text 243 362 start position;
#X text 219 450 will output single frames;
#X obj 49 663 s fileread;
#X text 48 483 Force a colorspace conversion:;
#X text 49 507 Without this messages videos are played in the colorspace
they are. By sending a forceColorspace message they will be converted
to the desired colorspace. NOTE: one has to reopen the file when changing
forceColorspace !;
#X text 333 37 ::: PIX_FILE_READ :::;
#X text 175 435 NOTE: in non-playing mode seeks;
#X text 51 149 General URIs are specified like /local/file/ \, dvd://chapter
\, http://host/path/file \, mms://host/path/file and so on.;
#X text 221 196 more URI examples:;
#N canvas 312 70 617 493 URI-examples 0;
#X text 11 17 Files on the local filesystem can be read with the usual
path:;
#X obj 13 79 s fileread;
#X msg 13 58 open /home/holzi/Desktop/yuv-test.mov;
#X text 12 123 HTTP-stream example:;
#X obj 12 166 s fileread;
#X msg 12 145 open http://stream.sbg.ac.at/unitv/image/image_01_v3.rmvb