Added veejay next generation branch

git-svn-id: svn://code.dyne.org/veejay/trunk@571 eb8d1916-c9e9-0310-b8de-cf0c9472ead5
This commit is contained in:
Niels Elburg
2006-07-08 16:25:31 +00:00
parent 72e91950f3
commit 96342dd9f4
192 changed files with 168721 additions and 0 deletions

35
veejay-ng/AUTHORS Normal file
View File

@@ -0,0 +1,35 @@
veejay contributors:
====================
(in no particular order)
Jeff Carpenter (programmer) for the XML sample parser
David Denny (user) for general feedback and bug reports
Daniel Jircik (user) for general feedback and suggestions for future versions
Pilo Chambert (programmer) for general information about audio
Matthijs van Henten (artist) for extensive feedback and testing
Dursun Koca (artist) for extensive feedback and testing
Peter de Man (artist) for providing a MIDI keyboard (Yamaha RS7000)
Stefan Thieme (vj) for providing a patch for german keyboard layout
Andrew Wood (programmer) for providing a RPM spec file for veejay and gveejay
Kyle Davenport for providing fixes to the RPM spec file for veejay
Daniel Rohr for giving practical tips on math problems (optimizations)
Rupert Reddington for sending in a Matrox G550 card (thanks!)
Toni (from Germany) for fixing veejay.spec file and compilation for gtk 2.4
veejay/gveejay author:
======================
Niels Elburg <nelburg@looze.net >
gveejayreloaded authors:
=======================
Matthijs van Henten (artist/HCI) (interface design)
Thomas Reinhold (developer)
Niels Elburg (developer)

504
veejay-ng/COPYING Normal file
View File

@@ -0,0 +1,504 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 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.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
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 and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, 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 library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete 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 distribute a copy of this License along with the
Library.
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 Library or any portion
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
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 Library, 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 Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you 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.
If distribution of 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 satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be 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.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library 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.
9. 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 Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
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 with
this License.
11. 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 Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library 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 Library.
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.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library 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.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser 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 Library
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 Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
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
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "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
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. 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 LIBRARY 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
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

617
veejay-ng/ChangeLog Normal file
View File

@@ -0,0 +1,617 @@
0.7.2
+ fixed Network Streaming (VIMS 165:hostname port_id; )
+ fixed handling of multiple connections
+ added new tool 'mcastOSC'
+ added commandline parameter '-g' to sayVIMS for multicast
+ added commandline parameter '-V' for veejay VIMS multicast
+ added commandline parameter '-M' for veejay OSC multicast
+ fixed a small bug in multicast OSC
+ added doc/NET.txt to explain network streaming/multicast
+ fixed segfault in Ghost effect
+ added basic negotiation on frame information for Network Streaming
+ refactorized vj-server.c/vj-client.c
+ refactorized network dependent code to libvjnet
+ fixed screenshot dump when playing 4:2:2
+ changed VIMS 054 (screenshot) 054:name.jpg; or 054:;
+ added multicast video transmitter/receiver !!
+ revisited OSC implementation ( use veejay -u -n |less )
+ updated documentation (Howto, MAN pages, etc)
+ removed obsolete VIMS messages
+ librified editlist,stream and yuv functions
+ removed any references on dropped vloopback support
+ fixed ticket 6
+ fixed ticket 7
+ fixed autosplitting while recording
+ added dv1394 stream support
(uses libdv, so its slow even on a pentium3/1 ghz)
0.7.1
+ fixed color corruption in fib
+ removed veejay.spec from configure.in
+ added render history list
+ fixed bug in Displacement Map
+ added new effect 'Cartoon' (Flatten bitdepth)
+ added new effect 'Nervous'
+ removed obsolete file 'motiondetect' from libvje
+ fixed mode 2 of 'Amplify Low Noise' effect
+ added new effect 'Cartoon'
+ added new effect 'Motion Ghost'
+ added new effect 'Morphology'
+ added new effect 'Nervous'
+ added new effect 'Video Blobs'
+ fixed ticket #3 (editlist load bug)
+ added new effect 'Video Boids'
+ refurbished status line (all modi have 13 status bytes now)
+ fixed minor bug in 'video boids'
+ bumped version to 0.7.2
- render to history list mismatches frames in clip
(too many)
0.7.0
+ added --version commandline
+ fixed use of implicit declarations and other compiler warnings
+ fixed several effects (mostly blending effects)
+ moved sample functionality to libsample
+ started documentation of VIMS (see doc/VIMS.txt)
+ added dummy mode (works for real now this time!)
+ added commandline parameter -d for Dummy mode
+ added commandline parameter -W (width) for dummy
+ added commandline parameter -H (height) for dummy
+ added commandline parameter -R (rate) for dummy
+ added commandline parameter -N (norm) for dummy
+ fixed cycling of effect parameters (keyboard)
+ added optimized memcpy for ppc
+ added --auto-loop commandline option
+ changes to build configuration
+ minor bugfix in remotely adding effects on streams
+ added save editlist / save selection
+ added error check on switching playmodes in dummy mode
+ fixed bug in fade in/fade out chain
+ some cleanup
+ updated veejay MAN page
0.6.4 / 0.6.5
+ added experimental network streaming
+ fixed rawdv2yuv when not having libdv
+ fixed parsing of VIMS arguments
+ moved veejays effects into libvje
+ moved memory managment into libvjmem
+ moved logging functions to libvjmsg
+ compiles on PPC
+ compiles on MIPS
+ fixed a lot of bugs
+ refactorized OSC code (now also used by Lives)
+ fixed recording of streams
+ put back in ChangeLog (some changes were lost :( ,
most of them are bugfixes during piksel workshop )
+ moved sample administrator to libsample
+ removed external wav files from libsample
+ removed keyframe interpolation from libsample
0.6.3
+ small fixes to zoom effect
+ small optimizations to motion blur
+ added DrawText plugin from Gustavo Sverzut Barbieri
+ added Dummy Example Plugin
+ added Veejay Plugins ( see plugins/README )
+ added FreeType to configure script
+ updated email address in license information
0.6.2 (fork of 0.6.0)
+ dropped vloopback support
+ removed vj-motion.c
+ removed cpu_accel.c
+ removed obsolete vj-frameinfo.c
+ removed obsolete colorspace.c
+ removed obsolete client
+ removed obsolete RGB output stream
+ removed all of ccvt yuv<->rgb conversion routines
+ all encoders/decoders working with both 4:2:0 and 4:2:2
+ added FOURCC 'yv16' to record YUV 4:2:2 planar to AVI
+ touched all effects to work in 4:2:0 and in 4:2:2 planar
+ added '--ycbcr'/ '-Y' [01] commandline options to force
using 4:2:0 or 4:2:2
+ changes to performer to include YUV 4:2:2 Planar
+ added SDL_YUY2_OVERLAY to SDL Video Window (to display 4:2:2)
+ added chromacity sampling YCbCr 4:2:2 <=> YUV 4:4:4
+ audio resampling for trickplay
+ on the fly audio resampling
+ added '--force' or 'r' to force adding files to the editlist,
this effectivly turns on auto interlacing and disrespects norm/video framerate
+ included avformat/avcodec to open and decode various stream formats
(not all types are supported, tested with Xvid,Divx,Mpeg4,mjpeg,dvvideo)
+ refactorized Edit Decision List to include probing with AVFormat
+ libdv optional now
+ fixed bug in radial blur that caused segmentation fault
+ extended chrominance palette to key on color
+ cleanup overlay scratcher
0.6.1
+ fork of veejay to experiment with the MLT framework (mlt.sourceforge.net)
probably this will be an extension to the Edit Decision List.
(experimental tarball can be found on the veejay's sourceforge files page)
0.6.0
+ fixed bug in performer when using a stream multiple times
+ fixed bug in veejay -u / --dump-events
(prints effect numbers correctly now)
+ changed setting playmode to 0=clip,1=stream,2=plain video
so it is consistent with source/channel selections.
+ some cleanups
+ fixed VIMS duplicate NET_EFFECT_LIST and VLOOPBACK_START
(both have unique numbers now)
+ fixed compile error in split.c (forgot to remove valgrind lines)
+ fixed possible race condition in handling events
+ fixed luma key effect (corrected dimensions)
+ veejay console has coloured text now
+ fixed use of errors/warnings/debug/info troughout veejay
+ fixed (synchronized) looping of overlaying clips
+ fixed memory leak while overriding effects
+ dont show effects in plain video mode
+ finally found the famous last-frame editlist bug
+ 'HOME' includes benchmark information about render duration
+ clarified (some) event names in vj-event.c
+ added 3 new vims events (bezerk,verbose, sample-mode)
+ added -n/--no-color commandline option
+ added -b/--bezerk commandline option
+ added -v/--verbose commandline option
+ added -F/--features commandline option
+ added -m/--sample-mode commandline option to select supersampling filter
(fast or high quality)
+ supersampling method now selectable trough console ('sa')
+ clip/stream information informs user if the effect is super sampled
(4:4:4) or not (4:2:0)
+ removed -q/--quit commandline option (use VIMS)
+ optimized effect fib downscale
+ optimized effect splitted screens
+ optimized effect bathroom window
+ optimized effect pixelate
+ optimized effect pixel raster
+ optimized effect width mirror
+ optimized effect replace pure white
+ optimized effect flip
+ optimized effect complex sync
+ optimized effect luma blend
+ optimized effect overlay magic
+ improvement to SSE/MMX/MMX2 memcpy functions (updates from xine cvs)
+ improvements to effect luma magick
+ fixed bug in effect overlay by threshold range
+ fixes to flexible effect manager (vj-effect and vj-perform)
+ set performer framebuffer to black to avoid green screens
while switching clip/streams that have large effect chain
+ use of const keyword in most of effects now (helps compiler)
+ when using -O3 -o stdout veejay will dump the yuv4mpeg
stream to stdout
+ cleanup and improved Performer
+ improvements to down sampling 4:4:4 -> 4:2:0 (slightly better quality)
+ pressing ESC when no clips exist will result in playing a tag
+ updated MAN page
+ updated HOWTO
+ updated VIMS.txt in doc/
+ updated some testcases in test/
+ added new testcase 'swirl-vims.txt' in test/code
+ added new effect 'Radial Blur' (from xine), both horizontal and vertical
+ added new effect 'Binary Overlays'
+ added new effect 'Chromium' to swap chroma/invert chroma channels
+ added new effect 'Chrominance palette'
0.5.9t9
+ fixed small bug in magic overlay additive mode
+ added new commandline option '-F' to show compiled in features
+ JACK is optional in configure script now. ( ./configure --disable-jack )
+ updatd MAN pages veejay,yuv2rawdv,rawdv2yuv and sendVIMS
+ fixes to 'Splitted Screen' effect
+ fixed VIMS toggle between source (streams and clips) while mixing
+ fixed VIMS select previous channel
+ fixed VIMS select next channel
+ fixed VIMS print stream/clip information
+ fixes to mixing different types of sources
+ fixed VIMS 'select effect' (displays effect type now)
+ added experimental shared memory streams
(start writer with veejay -O4 , start reader with 253:<semaphore_id> <segment_id>)
works only with -a0 (no audio)
+ changed key for switching sources , is now SLASH
+ added new event 'add WAV file to clip' (VIMS 136:file.wav;)
the clip recorder will , when writing to disk, use this file
file to import PCM WAVE. The WAV file must match the properties in your editlist
+ added new event 'del WAV file from clip'
+ disallow changing dataformat while recording
+ fixes to freeing of memory in vj-perform
+ added command line parameter '-I/--deinterlace'
+ added check on unsupported video codecs
+ updated bio2jack from cvs (july 2004)
+ fixed 'additive' mode in chroma magick
+ fixed 'subtractive' mode in chroma magick
+ added '24' (darken) mode to chroma magick
+ added '25' (lighten) mode to chroma magick
+ added 'sendVIMS' utility to tools/ and MAN page
+ lot of cleanup
0.5.9t8
+ fixed recording of clips in DV 2 format
+ Magic Motion improved, p0 = anti alias p1=min threshold frame A,
+ p2 = min threshold frame B, p3 = bw/color toggle
+ new keyboard event ALT+B to take and set a static background
+ (use with Magic Motion)
+ improved memory managment in vj-perform.c
+ removed caching of clips from vj-perform.c
+ new 2gb auto splitter for streams
+ better error handling for recording clips/streams
+ JACK support (dropped audiolib)
+ added command line parameter '-x/--geometryx'
+ added command line parameter '-y/--geometryy'
+ removed obsolete command line parameters
0.5.9t7
+ fixed bug in clip recording (never stopped recording on 130:0 0;)
+ renamed Magic Motion to Difference Overlay
p0 = lighter/darker
p1 = noise level Luma channel
p2 = noise level chrominance Cb
p3 = noise level chrominance Cr
0.5.9t6
+ fixed segfault in stopping clip recording
+ fixed possible segfault in event handler
+ added testcases for various effects in tests/
- todo: 2 gb auto splitter for stream recording
0.5.9t5
+ new effect 'Swirl'
+ new effect 'Fish Eye'
+ new effect 'Pixel Smear'
+ new effect 'Grid'
+ fixed bug in loading Mjpegtools'editlists
+ using fsincos for faster sin/cos operations (common.h)
+ fixed bug in clip / stream recorder
(missed last frame)
+ 2 gb file limit - auto splitter (only for clips for now)
+ changed default values in (smooth) rgb key effects
+ fixed bug in recording the number of frames requested
+ new set of demos in tests/
0.5.9t4
+ fixed bug in performer when mixing different codecs
+ new effect 'Pixelate'
+ new effect 'Magic Mirror'
+ new effect 'Distortion Map'
+ fixed steepness factor in gamma correction
+ fixed solarize effect
+ changed default values for saturation effect
+ small bugfix in RippleTV
+ clip recorder duration 0 results in recording of entire clip start ~ end
+ fixed writing of pcm wave when recording clips in any format
+ dynamical effect chain (greatly reduces memory hog)
+ various smaller fixes
0.5.9t3
+ fixed mixing stream with clip
+ fixed RippleTV effect
+ fixed bug in switching clips/streams while mixing
+ renewed Multi Mirrors effect
+ fixed cache system in performer
+ changed default values in some effects
+ partly updated veejay MAN page
+ renewed --dump-events for VIMS/effect ID's
+ example perl script test/tests/auto-vj.pl
that generates a textfile for use with the testclient
(demonstrates the new multi mirror effect)
+ new fourcc 'IYUV' added, which allows storing
of raw YUV 4:2:0 i420 in AVI.
(experimental)
0.5.9t2
+ fixes in ChromaMagick/MatteScratcher
+ fixes in Motion Blur
+ fixes in Splitted Screens
+ 'RippleTV' effect ported from EffecTV
+ MMX memset
+ MMX optimized filters killchroma and few others
+ XML based Action File
(Press CTRL+Key to create a effect template from the current chain,
press SHIFT+Key to apply the template.
Use 'al' to load the templates from an Action File'
Use 'as' to save.
+ bugfixes in event handler
+ new VIMS message for deleting all clips
+ new VIMS message for copying clips
+ bugfixes performer (reduced memcpy())
+ improved performance in v4l
+ improved performance in y4m
+ removed obsolete commandline parameters
+ fixes in vjrender command
+ added '?' ,'h' and 'H' commands to console
+ finally fixed dummy mode
+ fixed keyboard events play_backward and play_forward
when playing at high speeds
+ fixed looping at high speeds
+ fixed use of effects, 1xx = single frame effect, 2xx = mixing effect
0.5.9t1
+ General bugfixes, fixed a few memory leaks and use of unitialized variables
+ fixed Makefile.am / configure.in to auto detect cpu capabilities,
also fixed build order problem with ffmpeg
+ added support for DivX ;) encoding/decoding
limitation: for mpeg4/divx every frame must be a key frame
or veejay cannot really work with them.
+ added new effect 'Enhanced Magic Blend'
+ added new effect 'Pencil Sketch (8)'
+ new effect 'Color Enhance' , allows increasing of R, G, B , each 0 - 255
+ new effect 'Noise Pencil'
+ renamed posterize to posterize (threshold range)
+ Export DV2/MJPG/MPEG4/Divx videofiles with sample/stream-recorder
+ partly rewritten veejay socket server
+ Fixed handling of YUV 4:2:0 and YUV 4:2:2 data
+ vloopback streams in YV12 or RGB24
+ added new feature 'Effect Key Frame'
+ Increased EditList's capacity to 4096 files (thanks to ronald bultje)
+ Renamed sample to clip , tag to stream
+ Increased Stream/Clip capacity to 16384
+ Up to 20 effects on the effect chain
+ per clip / stream effect chain enable/disable
+ stream/clip effect chain by default on
+ fixes to all scratcher overlay effects
+ increased scratcher buffer to 100 frames
+ rewritten OSC message structure (not decided yet)
+ added VIMS test cases in test/
+ added perl scripts to generate VIMS test cases in test/perl
+ factorization of callbacks routines
vj-callbacks.c/h, vj-console.c/h,veejay.c => vj-event
+ OSC maps to VIMS (OpenSoundControl)
+ NET maps to VIMS (internal protocol)
+ SDL maps to VIMS (SDL keyboard)
+ can add new events to VIMS (message bundles)
+ finished veejay control documentation,vims/osc/sdl
+ removed sample countdown (use marker instead)
+ added --action-file to load keybundles
+ actionfile and bundles scripts to remake live-cinema
0.5.3
- added OMC from experimental veejay branch
- fixed bug in starting UDP server
- fixed bug in reaching end of video in plain mode
- added chain fade feature ,
this will enable the effect chain and fade in the
chain to 100% in num seconds
- implemented tag encoder which records from a tag
for num seconds and auto-adds a sample to the samplelist
- added OSC callbacks:
- implemented sample countdown ( 5....4...3...2...1 ... 0)
- added zoom algorithm ( best neighbour algorithm )
uses deinterlacing for use with common v4l hardware.
(temporary)
- fixed rendering of samples
- added Image Effect DeInterlace effect (from yuvkineco)
- added Video Effect Simple Mask effect
- added Pixel Raster effect
- ffmpeg updated to ffmpeg cvs (late November)
0.5.2
- added Motion blur by averaging frames over time.
- added Average effect
allows increasing the luminance by a fraction
- added Sinoids Effect
- added Ripple Effect
- added Bathroom Effect (horizontal and vertical modes with p0)
- added 'Gesture Control Interface' and Motion Detector
- added feature to toggle effect upon motion
- added raw rgb stream out
- added raw rgb stream in
- added raw rgb interactive mode
- added raw rgb burst mode
- added y4m open/close in veejay console
- added new utility 'rawdv2yuv' which decodes rawdv to iv12 or i420
with the possibility scale to half size + simple clipping.
- added 22 new modes to Matte Scratcher
- added Sample creation on Scene Detection
- renamed 'Various Embossing/Edge ...' to 'Various Weird Effects'
- minor optimizations in playback mechanism
- fixed bug in proc detection of v4l/vloopback devices
- fixed bug in print_sample_info
- fixed console command 'vi' for opening of v4l device
- fixes in audio playback
- fixed reverse audio playback
- fixes in DirectFB output
- fixed bug in marker
- fixed bug in numeric keypad key 'ENTER' (pressed state)
0.5.1
- added mode 7 - 22 to chroma magick effect
(exclusive, diffnegate and additive)
- changes in mode 9 of overlay magic (exclusive)
includes Cb/Cr now
- fixed bug in mixing audio while rendering
- fixed bug in audio playback
- audio/video and video files can be combined now,
- fixed bug in vjrender (bail if sample frames dont fit)
- updated spec file
- fixed deleting tag multiple times
(no hangup after 2nd time opening of a yuv4mpeg stream)
0.5.0
- fixed compile error when optimizations are enabled
- fixes in splitted screens effect
- optimizations in splitted screens effect
- changes in vj-performer to fix mem leaks
- changes in liblavplayvj to fix mem leaks
- fixed bug in vj-effman
- fixed bug in vj-server
- fixes in overlay scratcher for bounce mode
- fixed sharpen effect
- fixes in render mechanism (audio)
- several other smaller fixes
- introduced 'has_internal_data' to cleanup memory
in use by some effect at veejay shutdown
- fixed creation of samples while playing tags
- fixed gcc-2 compile error in split.c
- fixed memory leaks in vj-tag and sampleadm
- fixed memory leaks in vj-callbacks
- fixed bug in resize video
- fixed bug in audio toggle
- fixed playing audio in pause in mode plain
- fixed playing of last frame in mode plain
- fixed bug in smooth threshold
0.5.0pre1
- added commandline parameter to start veejay without default tags
- bugfix in vj-sdl
- changes in vj-perform
- added feature to move rendered sample to a new sample
- added feature to delete rendered entries
- changed default parameter in bump 2d
- fixed possible crash in transition translate opacity/blend
- fixed parameter in multi mirror
- fixes in switches between playmodes
- fixes in getting all tags
- fixed queuing of non exiting frames (beyond editlist)
- fixed tag deletion
- disabled sliding door transition (possible segfault)
- fixed rendering of audio
- fixed switching between tag <-> samples
- fixed bug in rendering mechanism
- changed code to non multithread for render job (simpler).
- fix bug in luma blend mode (possible crash)
- fix bug in noiseadd (possible crash)
- fix bug in softblur mode (possible crash)
- fixed another possible crash in distortion effect
- fixed bug in softblur
- fixed bugs in magic overlays
- fixed smuck
- fixed splitted screens
- fixed dices
- fixed a few compiler warnings.
- fixed out of sync effect (for real now)
- some experiments in enhancemask.c
- parameter minimum change in contrast (-255 to 255)
0.4.9rc3
- fix bug in opening of v4l device
- fix bug in switching between audio/video sample and tags
- fix bug in general audio playback
- synced hash.c / hash.h from kazlib (version 1.20)
- minor bugfixes here and there
0.4.9rc2
- fixes in rendering mechanism,
audio and samples at different speed get correctly
inserted
- fixed ghost frame in render mechanism
- fixes in a few callbacks
- added 'Amplify low noise' effect
- added sharpen filter from yuvdenoise
allowing 0 - 2048 for extra grainy video.
- synced colorspace.c/colorspace.h with mjpegtools-1.6.1.90
- fixes in queuing mechanism
- fixes in vjrender initialization
- fixes in activating/deactivating tags
- fixes in default tags
- disallow user to render while playing
- disallow user to render while rendering.
0.4.9
- added more command line parameters to vjrender
- added frame duplicator feature
- finalized sample render history
- added msg to retrieve devices (v4l/vloopback)
- veejay closes connections properly now
- changed default value of colored border transition
- changed default value of tranform cubicq (effectv)
- fixed bugs/assertions in a number of callbacks
- implemented basic functionality in veejay for history list
- implemented functions for finding v4l/vloopback devices
- default tags are activated at startup
- fixed serious bug in effect chain when not starting at entry 0
- builded a new gui
- documented Tags/setting playmode in Networking.txt
- added new section 'VIDEO COMMANDS' to man , a few examples
and new commandline parameters have been included.
- renamed 'About Video' to 'Video Information' ('VI') in console
- added 'Add videofile as sample' in console
- added 'Add videofile' in console
- added tag creation callbacks for remote
- added fake video
- added resize screen command
- added command line parameters for fake video
- fixes in mode 2 of chromamagic (select max )
- sample stores frame duplicator
- fixed out of sync effect
- fixed bug in rendering of frames in effect chain
- fixed bug in makefile for make uninstall
0.4.8
- functionality improved,
veejay informs gui about disabled effects
(old situation: gui sees disabled effects as <none>)
- fixed saving of samples (did not save parameters correctly)
- fixed bug in veejay_open
- fixed compile errors in liblavplay (declaration after statement)
- new effect 3bars
0.4.7 - updated audiolib,lav_io,avilib
(synced against mjpegtools-1.6.1)
- updated ffmpeg
- improved audio support
- added german keyboard hack, GER_KEY_HACK
- fixed some compile errors and warnings
- created vjrender for rendering of samples
- updated doc/Networking
- fixed sample update start/end
- fixed save/load samplelist console status message
- updated test/client.c
- restriction on set_speed : do not go outside sample
- fixed audio queuing/timing problems
- added new network command to add and set effect in 1 go
0.4.6
- fix in out of sync
- new effect isolate color
- moved libvjplay into libveejay
- fast memset/memcpy revised, code taken from DirectFB ,mplayer,
transcode and /usr/src/linux/arch/
- magic motion completed.
- general optimizations
- optimizations in sampleadm
- cleanups , bugfixing
0.4.5
- memory leaks fixed in sampleload,effectload,
- fixes in parameter update rules
- fixed bugs in veejay / gveejay
- fixed Magic Motion
0.4.4
- changes in initialization phase
- new image effect out of sync
- new video effect out of sync (replace out of sync by video)
- new image effect complex invert
- new video effect complex threshold
- new image effect complex saturation
- changes to diff.c (incomplete)
memory leaks:
- fixed vj-comm.c (gveejay/veejay talkback)
- fixed vj-callbacks.c (veejay talkback)
- fixed liblavplayvj.c
- fixed vj-perform.c
- fixed vj-server.c
0.4.3
- new effect 'Greyscale by Color Key'
- new effect 'Blend by Color Key'
- changes to Soft Blur/Sharpen (new mode: 3 set distance)
- new effect 'Black/White on Threshold'
- fixed bug in 'set defaults' (gveejay)
- fixed bug in sample info (duration/frames update)
- removed frame trimmer (gveejay)
- removed obsolete menu items
0.4.2

236
veejay-ng/INSTALL Normal file
View File

@@ -0,0 +1,236 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PREFIX', the package will
use PREFIX as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the `--target=TYPE' option to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

91
veejay-ng/Makefile.am Normal file
View File

@@ -0,0 +1,91 @@
# Process with automake to produce Makefile.in
SUBDIRS = bio2jack libOSC libhash libvjmsg libvjmem
SUBDIRS += libvevo libplugger libvjnet libyuv libel vevosample veejay
SUBDIRS += man
#SUBDIRS = ffmpeg bio2jack libOSC libhash libvjmsg libvjmem libpostproc libvje libsample libvjnet libyuv libel libstream liblavjpeg libsamplerec plugins veejay gveejay tools man
#bin_SCRIPTS = veejay-config
#
# Add any non autoconf'd files here, extra readmes and other misc
# info to be copied into the dist
#
EXTRA_DIST = \
autogen.sh\
depcomp \
cpuinfo.sh \
autogen.sh
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = veejay.pc
DISTCLEANFILES = \
veejay-config.h \
veejay.pc \
confdefs.h \
config.cache \
config.status \
config.log
MAINTAINERCLEANFILES = \
compile \
depcomp \
install-sh \
missing \
mkinstalldirs \
Makefile.in \
aclocal.m4 \
config.guess \
config.h.in \
config.sub \
configure \
ltmain.sh \
stamp-h.in
## .glade files must be in same directory as pixmaps ?!!
#install-data-local:
# @$(NORMAL_INSTALL)
# if test -d $(srcdir)/share; then \
# $(mkinstalldirs) $(DESTDIR)$(pkgdatadir); \
# for dialog in $(srcdir)/share/*; do \
# if test -f $$dialog; then \
# $(INSTALL_DATA) $$dialog $(DESTDIR)$(pkgdatadir); \
# fi \
# done \
# fi
#gveejay-path.h: gveejay-paths.sh
# @sh $< > $@.tmp ;
# if cmp -s $@.tmp $@; then
# rm $@.tmp;
# else
# mv $@.tmp $@ ; echo updated gveejay-paths.h;
# fi
#dist-hook:
# rm -f %(distdir)/gveejay-paths.sh \
# if test -d share; then \
# mkdir $(distdir)/dialogs; \
# for dialog in share/*; do \
# if test -f $$dialog; then \
# cp -p $$dialog $(distdir)/dialogs; \
# fi \
# done \
# fi
## make rpms
rpm: Makefile
$(MAKE) dist
rpmbuild -ta --clean $(PACKAGE)-$(VERSION).tar.gz
## make debs
deb: Makefile dist
-chmod -R +w $(PACKAGE)-$(VERSION)
rm -rf $(PACKAGE)-$(VERSION)
tar xzf $(PACKAGE)-$(VERSION).tar.gz
cd $(PACKAGE)-$(VERSION); dpkg-buildpackage -rfakeroot

810
veejay-ng/Makefile.in Normal file
View File

@@ -0,0 +1,810 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Process with automake to produce Makefile.in
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(srcdir)/veejay-config.in $(srcdir)/veejay.pc.in \
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
compile config.guess config.rpath config.sub depcomp \
install-sh ltmain.sh missing
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno configure.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = veejay-config veejay.pc
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
install-recursive installcheck-recursive installdirs-recursive \
pdf-recursive ps-recursive uninstall-info-recursive \
uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
pkgconfigDATA_INSTALL = $(INSTALL_DATA)
DATA = $(pkgconfig_DATA)
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
ALTIVEC_CFLAGS = @ALTIVEC_CFLAGS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_AVCODEC_CFLAGS = @FFMPEG_AVCODEC_CFLAGS@
FFMPEG_AVCODEC_LIBS = @FFMPEG_AVCODEC_LIBS@
FFMPEG_AVFORMAT_CFLAGS = @FFMPEG_AVFORMAT_CFLAGS@
FFMPEG_AVFORMAT_LIBS = @FFMPEG_AVFORMAT_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@
GLIB_LIBS = @GLIB_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
HAVE_ALTIVEC_FALSE = @HAVE_ALTIVEC_FALSE@
HAVE_ALTIVEC_TRUE = @HAVE_ALTIVEC_TRUE@
HAVE_ASM_MMX2_FALSE = @HAVE_ASM_MMX2_FALSE@
HAVE_ASM_MMX2_TRUE = @HAVE_ASM_MMX2_TRUE@
HAVE_ASM_MMX_FALSE = @HAVE_ASM_MMX_FALSE@
HAVE_ASM_MMX_TRUE = @HAVE_ASM_MMX_TRUE@
HAVE_ASM_NASM_FALSE = @HAVE_ASM_NASM_FALSE@
HAVE_ASM_NASM_TRUE = @HAVE_ASM_NASM_TRUE@
HAVE_ASM_SSE2_FALSE = @HAVE_ASM_SSE2_FALSE@
HAVE_ASM_SSE2_TRUE = @HAVE_ASM_SSE2_TRUE@
HAVE_ASM_SSE_FALSE = @HAVE_ASM_SSE_FALSE@
HAVE_ASM_SSE_TRUE = @HAVE_ASM_SSE_TRUE@
HAVE_DL_DLOPEN_FALSE = @HAVE_DL_DLOPEN_FALSE@
HAVE_DL_DLOPEN_TRUE = @HAVE_DL_DLOPEN_TRUE@
HAVE_JACK_FALSE = @HAVE_JACK_FALSE@
HAVE_JACK_TRUE = @HAVE_JACK_TRUE@
HAVE_MMX2_FALSE = @HAVE_MMX2_FALSE@
HAVE_MMX2_TRUE = @HAVE_MMX2_TRUE@
HAVE_MMX_FALSE = @HAVE_MMX_FALSE@
HAVE_MMX_TRUE = @HAVE_MMX_TRUE@
HAVE_PPCCPU_FALSE = @HAVE_PPCCPU_FALSE@
HAVE_PPCCPU_TRUE = @HAVE_PPCCPU_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SSE2_FALSE = @HAVE_SSE2_FALSE@
HAVE_SSE2_TRUE = @HAVE_SSE2_TRUE@
HAVE_SSE_FALSE = @HAVE_SSE_FALSE@
HAVE_SSE_TRUE = @HAVE_SSE_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_X86CPU_FALSE = @HAVE_X86CPU_FALSE@
HAVE_X86CPU_TRUE = @HAVE_X86CPU_TRUE@
HAVE_XML2_FALSE = @HAVE_XML2_FALSE@
HAVE_XML2_TRUE = @HAVE_XML2_TRUE@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
LIBGETOPT_LIB = @LIBGETOPT_LIB@
LIBM_LIBS = @LIBM_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_RELEASE = @LT_RELEASE@
LT_REVISION = @LT_REVISION@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MJPEGTOOLS_CFLAGS = @MJPEGTOOLS_CFLAGS@
MJPEGTOOLS_LIBS = @MJPEGTOOLS_LIBS@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PROGRAM_NOPIC = @PROGRAM_NOPIC@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUPPORT_READ_DV2_FALSE = @SUPPORT_READ_DV2_FALSE@
SUPPORT_READ_DV2_TRUE = @SUPPORT_READ_DV2_TRUE@
V4LCONF_LIBS = @V4LCONF_LIBS@
VERSION = @VERSION@
XML2_CONFIG = @XML2_CONFIG@
XML_CPPFLAGS = @XML_CPPFLAGS@
XML_LIBS = @XML_LIBS@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
SUBDIRS = bio2jack libOSC libhash libvjmsg libvjmem libvevo libplugger \
libvjnet libyuv libel vevosample veejay man
#SUBDIRS = ffmpeg bio2jack libOSC libhash libvjmsg libvjmem libpostproc libvje libsample libvjnet libyuv libel libstream liblavjpeg libsamplerec plugins veejay gveejay tools man
#bin_SCRIPTS = veejay-config
#
# Add any non autoconf'd files here, extra readmes and other misc
# info to be copied into the dist
#
EXTRA_DIST = \
autogen.sh\
depcomp \
cpuinfo.sh \
autogen.sh
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = veejay.pc
DISTCLEANFILES = \
veejay-config.h \
veejay.pc \
confdefs.h \
config.cache \
config.status \
config.log
MAINTAINERCLEANFILES = \
compile \
depcomp \
install-sh \
missing \
mkinstalldirs \
Makefile.in \
aclocal.m4 \
config.guess \
config.h.in \
config.sub \
configure \
ltmain.sh \
stamp-h.in
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am--refresh:
@:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER)
rm -f stamp-h1
touch $@
distclean-hdr:
-rm -f config.h stamp-h1
veejay-config: $(top_builddir)/config.status $(srcdir)/veejay-config.in
cd $(top_builddir) && $(SHELL) ./config.status $@
veejay.pc: $(top_builddir)/config.status $(srcdir)/veejay.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
install-pkgconfigDATA: $(pkgconfig_DATA)
@$(NORMAL_INSTALL)
test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)"
@list='$(pkgconfig_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
$(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \
done
uninstall-pkgconfigDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgconfig_DATA)'; for p in $$list; do \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \
rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \
done
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
$(mkdir_p) $(distdir)/.
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(mkdir_p) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
distdir) \
|| exit 1; \
fi; \
done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
esac
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
distuninstallcheck \
&& chmod -R a-w "$$dc_install_base" \
&& ({ \
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
} || { rm -rf "$$dc_destdir"; exit 1; }) \
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
echo " (check DESTDIR support)"; \
fi ; \
$(distuninstallcheck_listfiles) ; \
exit 1; } >&2
distcleancheck: distclean
@if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left in build directory after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(DATA) config.h
installdirs: installdirs-recursive
installdirs-am:
for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
test -z "$$dir" || $(mkdir_p) "$$dir"; \
done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-hdr \
distclean-libtool distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am: install-pkgconfigDATA
install-exec-am:
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am: uninstall-info-am uninstall-pkgconfigDATA
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
check-am clean clean-generic clean-libtool clean-recursive \
ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
dist-shar dist-tarZ dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-libtool \
distclean-recursive distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-pkgconfigDATA install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic maintainer-clean-recursive \
mostlyclean mostlyclean-generic mostlyclean-libtool \
mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am uninstall-info-am \
uninstall-pkgconfigDATA
#install-data-local:
# @$(NORMAL_INSTALL)
# if test -d $(srcdir)/share; then \
# $(mkinstalldirs) $(DESTDIR)$(pkgdatadir); \
# for dialog in $(srcdir)/share/*; do \
# if test -f $$dialog; then \
# $(INSTALL_DATA) $$dialog $(DESTDIR)$(pkgdatadir); \
# fi \
# done \
# fi
#gveejay-path.h: gveejay-paths.sh
# @sh $< > $@.tmp ;
# if cmp -s $@.tmp $@; then
# rm $@.tmp;
# else
# mv $@.tmp $@ ; echo updated gveejay-paths.h;
# fi
#dist-hook:
# rm -f %(distdir)/gveejay-paths.sh \
# if test -d share; then \
# mkdir $(distdir)/dialogs; \
# for dialog in share/*; do \
# if test -f $$dialog; then \
# cp -p $$dialog $(distdir)/dialogs; \
# fi \
# done \
# fi
rpm: Makefile
$(MAKE) dist
rpmbuild -ta --clean $(PACKAGE)-$(VERSION).tar.gz
deb: Makefile dist
-chmod -R +w $(PACKAGE)-$(VERSION)
rm -rf $(PACKAGE)-$(VERSION)
tar xzf $(PACKAGE)-$(VERSION).tar.gz
cd $(PACKAGE)-$(VERSION); dpkg-buildpackage -rfakeroot
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

0
veejay-ng/NEWS Normal file
View File

57
veejay-ng/README Normal file
View File

@@ -0,0 +1,57 @@
10x0 0x x10x0x10x0x10x 10x0x10x0x10x0 x0x1 x0x1 10x0 x0x1
0x10x0 0x0x x10x0x10x0x10x 10x0x10x0x10x0 x0x1 10x0x10x 10x0x1 10x0x1
0x0x10 0x0x10 x10x 10x0 x0x1 10x0x10x x0x10x 10x0
0x0x10x0 0x0x10 x10x0x10x0x1 10x0x10x0x10 x0x1 0x10 0x0 x10x0x10
0x10x0 x10x0x x10x0x10x0x10x 10x0x10x0x10 x0x1 0x10x0x10x0 x10x0x10
10x0x1 x0x10x x10x 10x0 x0x1 0x10x0x10x0 0x0x
x0x10x0x10x0x1 x10x 10x0 x10x x0x1 0x10x0x10x0x10 0x0x
x10x0x10x0 x10x0x10x0x10x 10x0x10x0x10x0 x10x 10x0 0x0x 0x10 0x0x
0x0x10 x10x0x10x0x10x 10x0x10x0x10x0 0x010x0 0x0x 0x10 0x0x
:: Veejay, a visual instrument for GNU ::
http://veejay.dyne.org
v. 0.99.x
- work in progress. you are on your own. -
Install
=======
See file 'INSTALL'
Running
=======
-
CONTACT / FEEDBACK & HELP
=========================
Niels Elburg <nelburg@looze.net>
Please use the mailinglist on
http://veejay.sourceforge.net
BUG REPORTS / BLEEDING EDGE SOURCE CODE
=======================================
Please use the ticket system !
http://veejay.dyne.org
ENJOY! And let us know about your performances/installations with veejay!

7533
veejay-ng/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

3
veejay-ng/autogen.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
autoreconf -v -f -i

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,363 @@
# This file was generated by Autom4te Thu Apr 14 05:08:07 UTC 2005.
# It contains the lists of macros which have been traced.
# It can be safely removed.
@request = (
bless( [
'0',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'/usr/share/aclocal/glib.m4',
'/usr/share/aclocal/libtool.m4',
'/usr/share/aclocal/libxml2.m4',
'/usr/share/aclocal/pkg.m4',
'/usr/share/aclocal/sdl.m4',
'/usr/share/aclocal-1.9/amversion.m4',
'/usr/share/aclocal-1.9/as.m4',
'/usr/share/aclocal-1.9/auxdir.m4',
'/usr/share/aclocal-1.9/ccstdc.m4',
'/usr/share/aclocal-1.9/cond.m4',
'/usr/share/aclocal-1.9/depend.m4',
'/usr/share/aclocal-1.9/depout.m4',
'/usr/share/aclocal-1.9/init.m4',
'/usr/share/aclocal-1.9/install-sh.m4',
'/usr/share/aclocal-1.9/lead-dot.m4',
'/usr/share/aclocal-1.9/maintainer.m4',
'/usr/share/aclocal-1.9/make.m4',
'/usr/share/aclocal-1.9/missing.m4',
'/usr/share/aclocal-1.9/mkdirp.m4',
'/usr/share/aclocal-1.9/options.m4',
'/usr/share/aclocal-1.9/runlog.m4',
'/usr/share/aclocal-1.9/sanity.m4',
'/usr/share/aclocal-1.9/strip.m4',
'/usr/share/aclocal-1.9/tar.m4',
'configure.ac'
],
{
'AM_ENABLE_STATIC' => 1,
'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
'AC_C_VOLATILE' => 1,
'AC_TYPE_OFF_T' => 1,
'_LT_AC_SHELL_INIT' => 1,
'AC_FUNC_CLOSEDIR_VOID' => 1,
'AC_REPLACE_FNMATCH' => 1,
'AC_DEFUN' => 1,
'AC_PROG_LIBTOOL' => 1,
'_LT_AC_LANG_CXX_CONFIG' => 1,
'AM_PROG_MKDIR_P' => 1,
'AC_FUNC_STAT' => 1,
'AC_FUNC_WAIT3' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_FUNC_LSTAT' => 1,
'AC_STRUCT_TM' => 1,
'AC_CHECK_HEADERS' => 1,
'AC_FUNC_STRTOD' => 1,
'AM_MISSING_PROG' => 1,
'AC_FUNC_STRNLEN' => 1,
'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
'AC_PROG_CXX' => 1,
'_LT_AC_LANG_C_CONFIG' => 1,
'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' => 1,
'AM_PROG_INSTALL_STRIP' => 1,
'AC_PROG_AWK' => 1,
'_m4_warn' => 1,
'AC_LIBTOOL_OBJDIR' => 1,
'AC_HEADER_MAJOR' => 1,
'AM_SANITY_CHECK' => 1,
'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
'_LT_AC_CHECK_DLFCN' => 1,
'AM_PATH_SDL' => 1,
'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
'_AM_PROG_TAR' => 1,
'AC_LIBTOOL_GCJ' => 1,
'AC_PROG_GCC_TRADITIONAL' => 1,
'AC_LIBSOURCE' => 1,
'AC_STRUCT_ST_BLOCKS' => 1,
'_LT_AC_LANG_F77' => 1,
'AC_LIBTOOL_CONFIG' => 1,
'AC_PROG_MAKE_SET' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'sinclude' => 1,
'AM_DISABLE_SHARED' => 1,
'_LT_AC_LANG_CXX' => 1,
'AM_PROG_LIBTOOL' => 1,
'_LT_AC_FILE_LTDLL_C' => 1,
'AM_PROG_LD' => 1,
'AC_FUNC_STRERROR_R' => 1,
'AC_DECL_SYS_SIGLIST' => 1,
'AC_FUNC_FORK' => 1,
'AU_DEFUN' => 1,
'AC_FUNC_VPRINTF' => 1,
'AC_PROG_NM' => 1,
'AC_LIBTOOL_DLOPEN' => 1,
'AC_PROG_LD' => 1,
'AC_PROG_LD_GNU' => 1,
'AC_ENABLE_FAST_INSTALL' => 1,
'AC_INIT' => 1,
'AC_STRUCT_TIMEZONE' => 1,
'AC_SUBST' => 1,
'AC_FUNC_ALLOCA' => 1,
'_AM_SET_OPTION' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_LIBTOOL_PROG_CC_C_O' => 1,
'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
'AC_PROG_RANLIB' => 1,
'AC_FUNC_SETPGRP' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AC_FUNC_MMAP' => 1,
'AC_TYPE_SIZE_T' => 1,
'AC_CHECK_TYPES' => 1,
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AC_CHECK_MEMBERS' => 1,
'AC_DEFUN_ONCE' => 1,
'AC_FUNC_UTIME_NULL' => 1,
'AC_FUNC_SELECT_ARGTYPES' => 1,
'_LT_AC_LANG_GCJ' => 1,
'fp_PROG_CC_STDC' => 1,
'AC_FUNC_STRFTIME' => 1,
'AC_HEADER_STAT' => 1,
'AC_C_INLINE' => 1,
'AC_LIBTOOL_RC' => 1,
'_LT_AC_PROG_ECHO_BACKSLASH' => 1,
'AC_DISABLE_FAST_INSTALL' => 1,
'AC_CONFIG_FILES' => 1,
'_LT_AC_TRY_DLOPEN_SELF' => 1,
'_LT_AC_SYS_LIBPATH_AIX' => 1,
'include' => 1,
'LT_AC_PROG_SED' => 1,
'AM_ENABLE_SHARED' => 1,
'AM_GNU_GETTEXT' => 1,
'_LT_AC_LANG_GCJ_CONFIG' => 1,
'AC_ENABLE_SHARED' => 1,
'AC_CHECK_LIB' => 1,
'AC_FUNC_OBSTACK' => 1,
'AC_FUNC_MALLOC' => 1,
'AC_FUNC_GETGROUPS' => 1,
'AC_FUNC_GETLOADAVG' => 1,
'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
'AC_ENABLE_STATIC' => 1,
'AC_FUNC_FSEEKO' => 1,
'_LT_AC_TAGVAR' => 1,
'AM_PROG_CC_C_O' => 1,
'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
'AM_CONDITIONAL' => 1,
'AC_FUNC_MKTIME' => 1,
'AC_HEADER_SYS_WAIT' => 1,
'AC_FUNC_MEMCMP' => 1,
'AC_PROG_LN_S' => 1,
'AM_PROG_INSTALL_SH' => 1,
'm4_include' => 1,
'AC_PROG_EGREP' => 1,
'AC_HEADER_DIRENT' => 1,
'AC_PATH_MAGIC' => 1,
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AM_MAKE_INCLUDE' => 1,
'_LT_AC_TAGCONFIG' => 1,
'm4_pattern_forbid' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_LIBTOOL_COMPILER_OPTION' => 1,
'AC_DISABLE_SHARED' => 1,
'AC_LIBTOOL_SETUP' => 1,
'AC_LIBTOOL_WIN32_DLL' => 1,
'AC_PROG_LD_RELOAD_FLAG' => 1,
'AM_PATH_XML2' => 1,
'AC_HEADER_TIME' => 1,
'AM_MISSING_HAS_RUN' => 1,
'AC_FUNC_GETMNTENT' => 1,
'AC_TYPE_MODE_T' => 1,
'AC_LIBTOOL_DLOPEN_SELF' => 1,
'm4_sinclude' => 1,
'AC_PATH_X' => 1,
'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
'AC_HEADER_STDC' => 1,
'AC_LIBTOOL_LINKER_OPTION' => 1,
'PKG_CHECK_EXISTS' => 1,
'AM_PATH_GLIB' => 1,
'AC_LIBTOOL_CXX' => 1,
'LT_AC_PROG_RC' => 1,
'LT_AC_PROG_GCJ' => 1,
'AC_FUNC_ERROR_AT_LINE' => 1,
'AM_DISABLE_STATIC' => 1,
'AM_DEP_TRACK' => 1,
'_AC_PROG_LIBTOOL' => 1,
'AC_FUNC_MBRTOWC' => 1,
'AM_PROG_CC_STDC' => 1,
'AC_TYPE_SIGNAL' => 1,
'_AM_IF_OPTION' => 1,
'AC_TYPE_UID_T' => 1,
'AC_PATH_TOOL_PREFIX' => 1,
'm4_pattern_allow' => 1,
'AC_LIBTOOL_F77' => 1,
'AM_SET_LEADING_DOT' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'_AM_DEPENDENCIES' => 1,
'AC_LIBTOOL_LANG_C_CONFIG' => 1,
'_LT_AC_SYS_COMPILER' => 1,
'AC_PROG_CC' => 1,
'AM_PROG_NM' => 1,
'PKG_CHECK_MODULES' => 1,
'AC_FUNC_STRCOLL' => 1,
'AC_PROG_YACC' => 1,
'AC_LIBLTDL_CONVENIENCE' => 1,
'AC_DEPLIBS_CHECK_METHOD' => 1,
'AC_LIBLTDL_INSTALLABLE' => 1,
'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'jm_MAINTAINER_MODE' => 1,
'AC_FUNC_CHOWN' => 1,
'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
'AC_FUNC_GETPGRP' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_FUNC_REALLOC' => 1,
'AC_DISABLE_STATIC' => 1,
'AC_CONFIG_LINKS' => 1,
'AM_MAINTAINER_MODE' => 1,
'_LT_AC_LOCK' => 1,
'_LT_AC_LANG_RC_CONFIG' => 1,
'AC_PROG_CPP' => 1,
'AC_C_CONST' => 1,
'AC_PROG_LEX' => 1,
'AC_TYPE_PID_T' => 1,
'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
'AC_FUNC_SETVBUF_REVERSED' => 1,
'AM_PROG_AS' => 1,
'AM_AUX_DIR_EXPAND' => 1,
'AC_PROG_INSTALL' => 1,
'_LT_AC_LANG_F77_CONFIG' => 1,
'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
'_AM_SET_OPTIONS' => 1,
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AM_RUN_LOG' => 1,
'AC_LIBTOOL_PICMODE' => 1,
'AH_OUTPUT' => 1,
'AC_CHECK_LIBM' => 1,
'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
'_AM_MANGLE_OPTION' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
'AC_CONFIG_HEADERS' => 1,
'AM_SET_DEPDIR' => 1,
'PKG_PROG_PKG_CONFIG' => 1,
'AC_CHECK_FUNCS' => 1
}
], 'Autom4te::Request' ),
bless( [
'1',
1,
[
'/usr/share/autoconf'
],
[
'/usr/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'_LT_AC_TAGCONFIG' => 1,
'm4_pattern_forbid' => 1,
'AC_CANONICAL_TARGET' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AC_TYPE_OFF_T' => 1,
'AC_C_VOLATILE' => 1,
'AC_FUNC_CLOSEDIR_VOID' => 1,
'AC_REPLACE_FNMATCH' => 1,
'AC_PROG_LIBTOOL' => 1,
'AC_FUNC_STAT' => 1,
'AC_HEADER_TIME' => 1,
'AC_FUNC_WAIT3' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_STRUCT_TM' => 1,
'AC_FUNC_LSTAT' => 1,
'AC_TYPE_MODE_T' => 1,
'AC_FUNC_GETMNTENT' => 1,
'AC_FUNC_STRTOD' => 1,
'AC_CHECK_HEADERS' => 1,
'AC_FUNC_STRNLEN' => 1,
'm4_sinclude' => 1,
'AC_PROG_CXX' => 1,
'AC_PATH_X' => 1,
'AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK' => 1,
'AC_PROG_AWK' => 1,
'_m4_warn' => 1,
'AC_HEADER_STDC' => 1,
'AC_HEADER_MAJOR' => 1,
'AC_FUNC_ERROR_AT_LINE' => 1,
'AC_PROG_GCC_TRADITIONAL' => 1,
'AC_LIBSOURCE' => 1,
'AC_FUNC_MBRTOWC' => 1,
'AC_STRUCT_ST_BLOCKS' => 1,
'AC_CANONICAL_BUILD' => 1,
'AC_TYPE_SIGNAL' => 1,
'AC_TYPE_UID_T' => 1,
'AC_PROG_MAKE_SET' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'sinclude' => 1,
'm4_pattern_allow' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AC_FUNC_STRERROR_R' => 1,
'AC_PROG_CC' => 1,
'AC_DECL_SYS_SIGLIST' => 1,
'AC_FUNC_FORK' => 1,
'AC_FUNC_VPRINTF' => 1,
'AC_FUNC_STRCOLL' => 1,
'AC_PROG_YACC' => 1,
'AC_STRUCT_TIMEZONE' => 1,
'AC_INIT' => 1,
'AC_FUNC_CHOWN' => 1,
'AC_SUBST' => 1,
'AC_FUNC_ALLOCA' => 1,
'AC_CANONICAL_HOST' => 1,
'AC_FUNC_GETPGRP' => 1,
'AC_PROG_RANLIB' => 1,
'AM_INIT_AUTOMAKE' => 1,
'AC_FUNC_SETPGRP' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AC_FUNC_MMAP' => 1,
'AC_FUNC_REALLOC' => 1,
'AC_TYPE_SIZE_T' => 1,
'AC_CONFIG_LINKS' => 1,
'AC_CHECK_TYPES' => 1,
'LT_SUPPORTED_TAG' => 1,
'AC_CHECK_MEMBERS' => 1,
'AM_MAINTAINER_MODE' => 1,
'AC_FUNC_UTIME_NULL' => 1,
'AC_FUNC_SELECT_ARGTYPES' => 1,
'AC_FUNC_STRFTIME' => 1,
'AC_HEADER_STAT' => 1,
'AC_C_INLINE' => 1,
'AC_PROG_CPP' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AC_TYPE_PID_T' => 1,
'AC_C_CONST' => 1,
'AC_PROG_LEX' => 1,
'AC_CONFIG_FILES' => 1,
'include' => 1,
'AC_FUNC_SETVBUF_REVERSED' => 1,
'AC_PROG_INSTALL' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_CHECK_LIB' => 1,
'AC_FUNC_OBSTACK' => 1,
'AC_FUNC_MALLOC' => 1,
'AC_FUNC_GETGROUPS' => 1,
'AC_FUNC_GETLOADAVG' => 1,
'AH_OUTPUT' => 1,
'AC_FUNC_FSEEKO' => 1,
'AM_PROG_CC_C_O' => 1,
'AM_CONDITIONAL' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AC_FUNC_MKTIME' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_HEADER_SYS_WAIT' => 1,
'AC_PROG_LN_S' => 1,
'AC_FUNC_MEMCMP' => 1,
'm4_include' => 1,
'AC_HEADER_DIRENT' => 1,
'AC_CHECK_FUNCS' => 1
}
], 'Autom4te::Request' )
);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,964 @@
m4trace:configure.ac:3: -1- AC_INIT([veejay], [0.99.1], [veejay-users@lissts.sourceforge.net])
m4trace:configure.ac:3: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:3: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:3: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:3: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:3: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:3: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:3: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:3: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
m4trace:configure.ac:3: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:3: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:3: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:3: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:3: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:3: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:3: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:3: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:3: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:3: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:3: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:3: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:3: -1- AC_SUBST([datadir], ['${prefix}/share'])
m4trace:configure.ac:3: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:3: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:3: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:3: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:3: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:3: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:3: -1- AC_SUBST([infodir], ['${prefix}/info'])
m4trace:configure.ac:3: -1- AC_SUBST([mandir], ['${prefix}/man'])
m4trace:configure.ac:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:3: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
#undef PACKAGE_NAME])
m4trace:configure.ac:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:3: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME])
m4trace:configure.ac:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:3: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
#undef PACKAGE_VERSION])
m4trace:configure.ac:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:3: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
#undef PACKAGE_STRING])
m4trace:configure.ac:3: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:3: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT])
m4trace:configure.ac:3: -1- AC_SUBST([build_alias])
m4trace:configure.ac:3: -1- AC_SUBST([host_alias])
m4trace:configure.ac:3: -1- AC_SUBST([target_alias])
m4trace:configure.ac:3: -1- AC_SUBST([DEFS])
m4trace:configure.ac:3: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:3: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:3: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:3: -1- AC_SUBST([LIBS])
m4trace:configure.ac:12: -1- AC_CONFIG_HEADERS([config.h])
m4trace:configure.ac:15: -1- AC_CANONICAL_HOST
m4trace:configure.ac:15: -1- AC_CANONICAL_BUILD
m4trace:configure.ac:15: -1- AC_SUBST([build], [$ac_cv_build])
m4trace:configure.ac:15: -1- AC_SUBST([build_cpu], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:15: -1- AC_SUBST([build_vendor], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:15: -1- AC_SUBST([build_os], [`echo $ac_cv_build | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:15: -1- AC_SUBST([host], [$ac_cv_host])
m4trace:configure.ac:15: -1- AC_SUBST([host_cpu], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:15: -1- AC_SUBST([host_vendor], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:15: -1- AC_SUBST([host_os], [`echo $ac_cv_host | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:16: -1- AC_CANONICAL_TARGET
m4trace:configure.ac:16: -1- AC_SUBST([target], [$ac_cv_target])
m4trace:configure.ac:16: -1- AC_SUBST([target_cpu], [`echo $ac_cv_target | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\1/'`])
m4trace:configure.ac:16: -1- AC_SUBST([target_vendor], [`echo $ac_cv_target | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\2/'`])
m4trace:configure.ac:16: -1- AC_SUBST([target_os], [`echo $ac_cv_target | sed 's/^\([[^-]]*\)-\([[^-]]*\)-\(.*\)$/\3/'`])
m4trace:configure.ac:17: -1- AM_INIT_AUTOMAKE([1.7])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
m4trace:configure.ac:17: -1- AM_AUTOMAKE_VERSION([1.9.5])
m4trace:configure.ac:17: -1- AC_PROG_INSTALL
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:17: -1- AC_SUBST([CYGPATH_W])
m4trace:configure.ac:17: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
m4trace:configure.ac:17: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
m4trace:configure.ac:17: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
#undef PACKAGE])
m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
m4trace:configure.ac:17: -1- AH_OUTPUT([VERSION], [/* Version number of package */
#undef VERSION])
m4trace:configure.ac:17: -1- AC_SUBST([ACLOCAL])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOCONF])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOMAKE])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOHEADER])
m4trace:configure.ac:17: -1- AC_SUBST([MAKEINFO])
m4trace:configure.ac:17: -1- AC_SUBST([install_sh])
m4trace:configure.ac:17: -1- AC_SUBST([STRIP])
m4trace:configure.ac:17: -1- AC_SUBST([ac_ct_STRIP])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:17: -1- AC_SUBST([mkdir_p])
m4trace:configure.ac:17: -1- AC_PROG_AWK
m4trace:configure.ac:17: -1- AC_SUBST([AWK])
m4trace:configure.ac:17: -1- AC_PROG_MAKE_SET
m4trace:configure.ac:17: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:17: -1- AC_SUBST([am__leading_dot])
m4trace:configure.ac:17: -1- AC_SUBST([AMTAR])
m4trace:configure.ac:17: -1- AC_SUBST([am__tar])
m4trace:configure.ac:17: -1- AC_SUBST([am__untar])
m4trace:configure.ac:18: -1- AM_MAINTAINER_MODE
m4trace:configure.ac:18: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
m4trace:configure.ac:18: -1- AC_SUBST([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:18: -1- AC_SUBST([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:18: -1- AC_SUBST([MAINT])
m4trace:configure.ac:19: -1- AM_INIT_AUTOMAKE([dist-bzip2])
m4trace:configure.ac:19: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
m4trace:configure.ac:19: -1- AC_SUBST([CYGPATH_W])
m4trace:configure.ac:19: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
m4trace:configure.ac:19: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
m4trace:configure.ac:19: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
#undef PACKAGE])
m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
m4trace:configure.ac:19: -1- AH_OUTPUT([VERSION], [/* Version number of package */
#undef VERSION])
m4trace:configure.ac:19: -1- AC_SUBST([ACLOCAL])
m4trace:configure.ac:19: -1- AC_SUBST([AUTOCONF])
m4trace:configure.ac:19: -1- AC_SUBST([AUTOMAKE])
m4trace:configure.ac:19: -1- AC_SUBST([AUTOHEADER])
m4trace:configure.ac:19: -1- AC_SUBST([MAKEINFO])
m4trace:configure.ac:19: -1- AC_SUBST([install_sh])
m4trace:configure.ac:19: -1- AC_SUBST([STRIP])
m4trace:configure.ac:19: -1- AC_SUBST([ac_ct_STRIP])
m4trace:configure.ac:19: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:19: -1- AC_SUBST([AMTAR])
m4trace:configure.ac:19: -1- AC_SUBST([am__tar])
m4trace:configure.ac:19: -1- AC_SUBST([am__untar])
m4trace:configure.ac:27: -1- AC_SUBST([LT_RELEASE])
m4trace:configure.ac:28: -1- AC_SUBST([LT_CURRENT])
m4trace:configure.ac:29: -1- AC_SUBST([LT_REVISION])
m4trace:configure.ac:30: -1- AC_SUBST([LT_AGE])
m4trace:configure.ac:42: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:42: the top level])
m4trace:configure.ac:45: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:45: the top level])
m4trace:configure.ac:50: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:50: the top level])
m4trace:configure.ac:53: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:53: the top level])
m4trace:configure.ac:56: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:56: the top level])
m4trace:configure.ac:60: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:60: the top level])
m4trace:configure.ac:62: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:62: the top level])
m4trace:configure.ac:65: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:65: the top level])
m4trace:configure.ac:68: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:68: the top level])
m4trace:configure.ac:71: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:71: the top level])
m4trace:configure.ac:74: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:74: the top level])
m4trace:configure.ac:81: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
configure.ac:81: the top level])
m4trace:configure.ac:84: -1- AH_OUTPUT([_GNU_SOURCE], [/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif])
m4trace:configure.ac:84: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE])
m4trace:configure.ac:87: -1- AC_PROG_LIBTOOL
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:1971: AC_ENABLE_SHARED is expanded from...
configure.ac:87: AC_ENABLE_SHARED is required by...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:2010: AC_ENABLE_STATIC is expanded from...
configure.ac:87: AC_ENABLE_STATIC is required by...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:2049: AC_ENABLE_FAST_INSTALL is expanded from...
configure.ac:87: AC_ENABLE_FAST_INSTALL is required by...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- AC_PROG_CC
m4trace:configure.ac:87: -1- AC_SUBST([CC])
m4trace:configure.ac:87: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([CC])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:87: -1- AC_SUBST([CC])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:87: -1- AC_SUBST([CC])
m4trace:configure.ac:87: -1- AC_SUBST([CC])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:87: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:87: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:87: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])
m4trace:configure.ac:87: -1- AC_SUBST([am__include])
m4trace:configure.ac:87: -1- AC_SUBST([am__quote])
m4trace:configure.ac:87: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
m4trace:configure.ac:87: -1- AC_SUBST([AMDEP_TRUE])
m4trace:configure.ac:87: -1- AC_SUBST([AMDEP_FALSE])
m4trace:configure.ac:87: -1- AC_SUBST([AMDEPBACKSLASH])
m4trace:configure.ac:87: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:87: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:87: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:87: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
aclocal.m4:2246: AC_PROG_LD is expanded from...
configure.ac:87: AC_PROG_LD is required by...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- AC_SUBST([EGREP])
m4trace:configure.ac:87: -1- AC_PROG_LN_S
m4trace:configure.ac:87: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:87: -1- AC_SUBST([ECHO])
m4trace:configure.ac:87: -1- AC_SUBST([AR])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_AR])
m4trace:configure.ac:87: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_RANLIB])
m4trace:configure.ac:87: -1- AC_SUBST([STRIP])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_STRIP])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1303: AC_ARG_ENABLE is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2223: AC_TRY_LINK is expanded from...
autoconf/general.m4:1799: AC_CACHE_VAL is expanded from...
autoconf/general.m4:1808: AC_CACHE_CHECK is expanded from...
aclocal.m4:748: _LT_AC_LOCK is expanded from...
configure.ac:87: _LT_AC_LOCK is required by...
aclocal.m4:1179: AC_LIBTOOL_SYS_HARD_LINK_LOCKS is expanded from...
aclocal.m4:2793: _LT_AC_LANG_C_CONFIG is expanded from...
aclocal.m4:2660: AC_LIBTOOL_LANG_C_CONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- AC_CHECK_HEADERS([dlfcn.h])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H])
m4trace:configure.ac:87: -1- AC_HEADER_STDC
m4trace:configure.ac:87: -1- AC_PROG_CPP
m4trace:configure.ac:87: -1- AC_SUBST([CPP])
m4trace:configure.ac:87: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([CPP])
m4trace:configure.ac:87: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:87: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS])
m4trace:configure.ac:87: -1- AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
inttypes.h stdint.h unistd.h], [], [], [$ac_includes_default])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H])
m4trace:configure.ac:87: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:87: -1- _LT_AC_TAGCONFIG
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
You should run autoupdate.], [autoconf/general.m4:219: AC_HELP_STRING is expanded from...
autoconf/general.m4:1331: AC_ARG_WITH is expanded from...
aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me:$LINENO: error: tag name \"$tagname\" already exists], [aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [back quotes and double quotes must not be escaped in: $as_me: error: tag name \"$tagname\" already exists], [aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- AC_PROG_CXX
m4trace:configure.ac:87: -1- AC_SUBST([CXX])
m4trace:configure.ac:87: -1- AC_SUBST([CXXFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([CXX])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_CXX])
m4trace:configure.ac:87: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
m4trace:configure.ac:87: -1- AM_CONDITIONAL([am__fastdepCXX], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCXX_TRUE])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCXX_FALSE])
m4trace:configure.ac:87: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
m4trace:configure.ac:87: -1- AM_CONDITIONAL([am__fastdepCXX], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCXX_TRUE])
m4trace:configure.ac:87: -1- AC_SUBST([am__fastdepCXX_FALSE])
m4trace:configure.ac:87: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:87: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:87: -1- AC_SUBST([F77])
m4trace:configure.ac:87: -1- AC_SUBST([FFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:87: -1- AC_SUBST([F77])
m4trace:configure.ac:87: -1- AC_SUBST([ac_ct_F77])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:3970: _LT_AC_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:3927: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [instead of using `AC_LANG', `AC_LANG_SAVE',
and `AC_LANG_RESTORE', you should use `AC_LANG_PUSH' and `AC_LANG_POP'.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:3970: _LT_AC_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:3927: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [
lt_cv_dlopen="dyld"
lt_cv_dlopen_libs=
lt_cv_dlopen_self=yes
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link],
[lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
])
m4trace:configure.ac:87: -1- AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:172: AC_LANG_RESTORE is expanded from...
aclocal.m4:3970: _LT_AC_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:3927: AC_LIBTOOL_LANG_GCJ_CONFIG is expanded from...
aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_LANG_SAVE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:4009: _LT_AC_LANG_RC_CONFIG is expanded from...
aclocal.m4:3978: AC_LIBTOOL_LANG_RC_CONFIG is expanded from...
aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [instead of using `AC_LANG', `AC_LANG_SAVE',
and `AC_LANG_RESTORE', you should use `AC_LANG_PUSH' and `AC_LANG_POP'.], [autoconf/lang.m4:166: AC_LANG_SAVE is expanded from...
aclocal.m4:4009: _LT_AC_LANG_RC_CONFIG is expanded from...
aclocal.m4:3978: AC_LIBTOOL_LANG_RC_CONFIG is expanded from...
aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- _m4_warn([obsolete], [The macro `AC_LANG_RESTORE' is obsolete.
You should run autoupdate.], [autoconf/lang.m4:172: AC_LANG_RESTORE is expanded from...
aclocal.m4:4009: _LT_AC_LANG_RC_CONFIG is expanded from...
aclocal.m4:3978: AC_LIBTOOL_LANG_RC_CONFIG is expanded from...
aclocal.m4:1925: _LT_AC_TAGCONFIG is expanded from...
aclocal.m4:421: AC_LIBTOOL_SETUP is expanded from...
configure.ac:87: AC_LIBTOOL_SETUP is required by...
aclocal.m4:279: _AC_PROG_LIBTOOL is expanded from...
configure.ac:87: _AC_PROG_LIBTOOL is required by...
aclocal.m4:259: AC_PROG_LIBTOOL is expanded from...
configure.ac:87: the top level])
m4trace:configure.ac:87: -1- AC_SUBST([LIBTOOL])
m4trace:configure.ac:90: -1- AC_PROG_AWK
m4trace:configure.ac:90: -1- AC_SUBST([AWK])
m4trace:configure.ac:91: -1- AC_PROG_CC
m4trace:configure.ac:91: -1- AC_SUBST([CC])
m4trace:configure.ac:91: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:91: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:91: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:91: -1- AC_SUBST([CC])
m4trace:configure.ac:91: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:91: -1- AC_SUBST([CC])
m4trace:configure.ac:91: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:91: -1- AC_SUBST([CC])
m4trace:configure.ac:91: -1- AC_SUBST([CC])
m4trace:configure.ac:91: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:91: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:91: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:91: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:91: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:91: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:91: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:91: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:91: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:92: -1- _m4_warn([obsolete], [The macro `AM_PROG_CC_STDC' is obsolete.
You should run autoupdate.], [aclocal.m4:6737: AM_PROG_CC_STDC is expanded from...
configure.ac:92: the top level])
m4trace:configure.ac:92: -1- AC_PROG_CC
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:92: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:92: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([CC])
m4trace:configure.ac:92: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:92: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:92: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:92: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:92: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:92: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:92: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:92: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:92: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:92: -1- _m4_warn([obsolete], [AM_PROG_CC_STDC:
your code should no longer depend upon `am_cv_prog_cc_stdc', but upon
`ac_cv_prog_cc_stdc'. Remove this warning and the assignment when
you adjust the code. You can also remove the above call to
AC_PROG_CC if you already called it elsewhere.], [aclocal.m4:6737: AM_PROG_CC_STDC is expanded from...
configure.ac:92: the top level])
m4trace:configure.ac:93: -1- AC_PROG_CXX
m4trace:configure.ac:93: -1- AC_SUBST([CXX])
m4trace:configure.ac:93: -1- AC_SUBST([CXXFLAGS])
m4trace:configure.ac:93: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:93: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:93: -1- AC_SUBST([CXX])
m4trace:configure.ac:93: -1- AC_SUBST([ac_ct_CXX])
m4trace:configure.ac:93: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
m4trace:configure.ac:93: -1- AM_CONDITIONAL([am__fastdepCXX], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:93: -1- AC_SUBST([am__fastdepCXX_TRUE])
m4trace:configure.ac:93: -1- AC_SUBST([am__fastdepCXX_FALSE])
m4trace:configure.ac:93: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
m4trace:configure.ac:93: -1- AM_CONDITIONAL([am__fastdepCXX], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:93: -1- AC_SUBST([am__fastdepCXX_TRUE])
m4trace:configure.ac:93: -1- AC_SUBST([am__fastdepCXX_FALSE])
m4trace:configure.ac:94: -1- AC_PROG_INSTALL
m4trace:configure.ac:94: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:94: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:94: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:95: -1- AC_PROG_LN_S
m4trace:configure.ac:95: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:96: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN])
m4trace:configure.ac:96: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#undef WORDS_BIGENDIAN])
m4trace:configure.ac:97: -1- AC_C_CONST
m4trace:configure.ac:97: -1- AC_DEFINE_TRACE_LITERAL([const])
m4trace:configure.ac:97: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */
#undef const])
m4trace:configure.ac:98: -1- AC_C_INLINE
m4trace:configure.ac:98: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler
calls it, or to nothing if \'inline\' is not supported under any name. */
#ifndef __cplusplus
#undef inline
#endif])
m4trace:configure.ac:99: -1- AC_DEFINE_TRACE_LITERAL([_FILE_OFFSET_BITS])
m4trace:configure.ac:99: -1- AH_OUTPUT([_FILE_OFFSET_BITS], [/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS])
m4trace:configure.ac:99: -1- AC_DEFINE_TRACE_LITERAL([_LARGE_FILES])
m4trace:configure.ac:99: -1- AH_OUTPUT([_LARGE_FILES], [/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES])
m4trace:configure.ac:102: -1- AC_SUBST([CCAS])
m4trace:configure.ac:102: -1- AC_SUBST([CCASFLAGS])
m4trace:configure.ac:104: -1- AC_CHECK_HEADERS([fenv.h stdint.h inttypes.h sys/types.h alloca.h])
m4trace:configure.ac:104: -1- AH_OUTPUT([HAVE_FENV_H], [/* Define to 1 if you have the <fenv.h> header file. */
#undef HAVE_FENV_H])
m4trace:configure.ac:104: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H])
m4trace:configure.ac:104: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H])
m4trace:configure.ac:104: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:104: -1- AH_OUTPUT([HAVE_ALLOCA_H], [/* Define to 1 if you have the <alloca.h> header file. */
#undef HAVE_ALLOCA_H])
m4trace:configure.ac:109: -1- AC_CHECK_FUNCS([posix_memalign memalign pow bzero gettimeofday memset mmap strndup strstr strncasecmp])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_POSIX_MEMALIGN], [/* Define to 1 if you have the `posix_memalign\' function. */
#undef HAVE_POSIX_MEMALIGN])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_MEMALIGN], [/* Define to 1 if you have the `memalign\' function. */
#undef HAVE_MEMALIGN])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_POW], [/* Define to 1 if you have the `pow\' function. */
#undef HAVE_POW])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_BZERO], [/* Define to 1 if you have the `bzero\' function. */
#undef HAVE_BZERO])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_GETTIMEOFDAY], [/* Define to 1 if you have the `gettimeofday\' function. */
#undef HAVE_GETTIMEOFDAY])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */
#undef HAVE_MEMSET])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_MMAP], [/* Define to 1 if you have the `mmap\' function. */
#undef HAVE_MMAP])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_STRNDUP], [/* Define to 1 if you have the `strndup\' function. */
#undef HAVE_STRNDUP])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_STRSTR], [/* Define to 1 if you have the `strstr\' function. */
#undef HAVE_STRSTR])
m4trace:configure.ac:109: -1- AH_OUTPUT([HAVE_STRNCASECMP], [/* Define to 1 if you have the `strncasecmp\' function. */
#undef HAVE_STRNCASECMP])
m4trace:configure.ac:110: -1- AC_CHECK_FUNCS([sched_get_priority_max])
m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_SCHED_GET_PRIORITY_MAX], [/* Define to 1 if you have the `sched_get_priority_max\' function. */
#undef HAVE_SCHED_GET_PRIORITY_MAX])
m4trace:configure.ac:111: -1- AC_CHECK_FUNCS([select socket getpagesize memcpy])
m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_SELECT], [/* Define to 1 if you have the `select\' function. */
#undef HAVE_SELECT])
m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_SOCKET], [/* Define to 1 if you have the `socket\' function. */
#undef HAVE_SOCKET])
m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
#undef HAVE_GETPAGESIZE])
m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_MEMCPY], [/* Define to 1 if you have the `memcpy\' function. */
#undef HAVE_MEMCPY])
m4trace:configure.ac:120: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETOPT_LONG])
m4trace:configure.ac:120: -1- AH_OUTPUT([HAVE_GETOPT_LONG], [/* long getopt support */
#undef HAVE_GETOPT_LONG])
m4trace:configure.ac:120: -1- AC_CHECK_LIB([gnugetopt], [getopt_long], [AC_DEFINE(HAVE_GETOPT_LONG, 1,
[long getopt support])
LIBGETOPT_LIB="-lgnugetopt"])
m4trace:configure.ac:120: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETOPT_LONG])
m4trace:configure.ac:120: -1- AH_OUTPUT([HAVE_GETOPT_LONG], [/* long getopt support */
#undef HAVE_GETOPT_LONG])
m4trace:configure.ac:121: -1- AC_SUBST([LIBGETOPT_LIB])
m4trace:configure.ac:123: -1- AC_TYPE_SIGNAL
m4trace:configure.ac:123: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])
m4trace:configure.ac:123: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */
#undef RETSIGTYPE])
m4trace:configure.ac:132: -1- AC_DEFINE_TRACE_LITERAL([USE_DISPLAY])
m4trace:configure.ac:132: -1- AH_OUTPUT([USE_DISPLAY], [/* Compiling in a video output X screen */
#undef USE_DISPLAY])
m4trace:configure.ac:134: -1- AC_CHECK_HEADERS([GL/gl.h ], [], [AC_MSG_ERROR([Cannot find OpenGL headers]) ])
m4trace:configure.ac:134: -1- AH_OUTPUT([HAVE_GL_GL_H], [/* Define to 1 if you have the <GL/gl.h> header file. */
#undef HAVE_GL_GL_H])
m4trace:configure.ac:139: -1- AC_SUBST([SDL_CONFIG], [$ac_cv_path_SDL_CONFIG])
m4trace:configure.ac:139: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2289: AC_TRY_RUN is expanded from...
aclocal.m4:6622: AM_PATH_SDL is expanded from...
configure.ac:139: the top level])
m4trace:configure.ac:139: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SDL])
m4trace:configure.ac:139: -1- AH_OUTPUT([HAVE_SDL], [/* SDL library present */
#undef HAVE_SDL])
m4trace:configure.ac:139: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2223: AC_TRY_LINK is expanded from...
aclocal.m4:6622: AM_PATH_SDL is expanded from...
configure.ac:139: the top level])
m4trace:configure.ac:139: -1- AC_SUBST([SDL_CFLAGS])
m4trace:configure.ac:139: -1- AC_SUBST([SDL_LIBS])
m4trace:configure.ac:145: -1- AC_CHECK_LIB([GL], [main], [have_gl=true])
m4trace:configure.ac:153: -1- AC_CHECK_HEADERS([GL/glut.h ], [], [AC_MSG_ERROR([Cannot find Glut headers]) ])
m4trace:configure.ac:153: -1- AH_OUTPUT([HAVE_GL_GLUT_H], [/* Define to 1 if you have the <GL/glut.h> header file. */
#undef HAVE_GL_GLUT_H])
m4trace:configure.ac:155: -1- AC_CHECK_LIB([glut], [glutInit], [have_glut=true])
m4trace:configure.ac:161: -1- AC_CHECK_LIB([GLU], [gluProject], [have_glu=true])
m4trace:configure.ac:167: -1- AC_SUBST([GL_LIBS ])
m4trace:configure.ac:168: -1- AC_SUBST([GL_CFLAGS ])
m4trace:configure.ac:192: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LINUX])
m4trace:configure.ac:192: -1- AH_OUTPUT([HAVE_LINUX], [/* Linux platform */
#undef HAVE_LINUX])
m4trace:configure.ac:196: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DARWIN])
m4trace:configure.ac:196: -1- AH_OUTPUT([HAVE_DARWIN], [/* MAC OS X Darin */
#undef HAVE_DARWIN])
m4trace:configure.ac:208: -1- AC_SUBST([LIBM_LIBS])
m4trace:configure.ac:220: -1- AC_DEFINE_TRACE_LITERAL([HAVE_V4L])
m4trace:configure.ac:220: -1- AH_OUTPUT([HAVE_V4L], [/* Building for Linux - using the video4linux API */
#undef HAVE_V4L])
m4trace:configure.ac:227: -1- AC_SUBST([PTHREAD_LIBS])
m4trace:configure.ac:232: -1- AC_CHECK_LIB([pthread], [pthread_create], [ PTHREAD_LIBS="-lpthread"
AC_DEFINE(HAVE_LIBPTHREAD,,[Compiling with pthread library])
have_pthread=true ], [], [])
m4trace:configure.ac:232: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBPTHREAD])
m4trace:configure.ac:232: -1- AH_OUTPUT([HAVE_LIBPTHREAD], [/* Compiling with pthread library */
#undef HAVE_LIBPTHREAD])
m4trace:configure.ac:237: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PTHREADSTACKSIZE])
m4trace:configure.ac:237: -1- AH_OUTPUT([HAVE_PTHREADSTACKSIZE], [/* Using pthread stack size */
#undef HAVE_PTHREADSTACKSIZE])
m4trace:configure.ac:240: -1- AC_CHECK_LIB([dl], [dlopen])
m4trace:configure.ac:240: -1- AH_OUTPUT([HAVE_LIBDL], [/* Define to 1 if you have the `dl\' library (-ldl). */
#undef HAVE_LIBDL])
m4trace:configure.ac:240: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL])
m4trace:configure.ac:242: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DL_DLOPEN])
m4trace:configure.ac:242: -1- AH_OUTPUT([HAVE_DL_DLOPEN], [/* Compile with dlopen support */
#undef HAVE_DL_DLOPEN])
m4trace:configure.ac:255: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4trace:configure.ac:255: -1- m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
m4trace:configure.ac:255: -1- AC_SUBST([PKG_CONFIG])
m4trace:configure.ac:255: -1- AC_SUBST([PKG_CONFIG], [$ac_cv_path_PKG_CONFIG])
m4trace:configure.ac:255: -1- AC_SUBST([ac_pt_PKG_CONFIG], [$ac_cv_path_ac_pt_PKG_CONFIG])
m4trace:configure.ac:255: -1- AC_SUBST([FFMPEG_AVCODEC_CFLAGS])
m4trace:configure.ac:255: -1- AC_SUBST([FFMPEG_AVCODEC_LIBS])
m4trace:configure.ac:255: -1- AC_SUBST([FFMPEG_AVCODEC_CFLAGS ])
m4trace:configure.ac:255: -1- AC_SUBST([FFMPEG_AVCODEC_LIBS ])
m4trace:configure.ac:255: -1- AC_DEFINE_TRACE_LITERAL([HAVE_AVCODEC])
m4trace:configure.ac:255: -1- AH_OUTPUT([HAVE_AVCODEC], [/* use avcodec */
#undef HAVE_AVCODEC])
m4trace:configure.ac:264: -1- AC_SUBST([FFMPEG_AVCODEC_CFLAGS])
m4trace:configure.ac:264: -1- AC_SUBST([FFMPEG_AVCODEC_LIBS])
m4trace:configure.ac:264: -1- AC_SUBST([FFMPEG_AVFORMAT_CFLAGS ])
m4trace:configure.ac:264: -1- AC_SUBST([FFMPEG_AVFORMAT_LIBS ])
m4trace:configure.ac:264: -1- AC_DEFINE_TRACE_LITERAL([HAVE_AVFORMAT])
m4trace:configure.ac:264: -1- AH_OUTPUT([HAVE_AVFORMAT], [/* use avformat */
#undef HAVE_AVFORMAT])
m4trace:configure.ac:281: -1- AC_SUBST([LIBDV_CFLAGS])
m4trace:configure.ac:281: -1- AC_SUBST([LIBDV_LIBS])
m4trace:configure.ac:281: -1- AC_DEFINE_TRACE_LITERAL([SUPPORT_READ_DV2])
m4trace:configure.ac:281: -1- AH_OUTPUT([SUPPORT_READ_DV2], [/* libdv is present */
#undef SUPPORT_READ_DV2])
m4trace:configure.ac:295: -1- AC_SUBST([MJPEGTOOLS_CFLAGS])
m4trace:configure.ac:295: -1- AC_SUBST([MJPEGTOOLS_LIBS])
m4trace:configure.ac:295: -1- AC_SUBST([MJPEGTOOLS_CFLAGS ])
m4trace:configure.ac:295: -1- AC_SUBST([MJPEGTOOLS_LIBS ])
m4trace:configure.ac:295: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MJPEGTOOLS])
m4trace:configure.ac:295: -1- AH_OUTPUT([HAVE_MJPEGTOOLS], [/* MJPEGTools installed */
#undef HAVE_MJPEGTOOLS])
m4trace:configure.ac:312: -1- AC_DEFINE_TRACE_LITERAL([HAVE___PROGNAME])
m4trace:configure.ac:312: -1- AH_OUTPUT([HAVE___PROGNAME], [/* Is __progname defined by system? */
#undef HAVE___PROGNAME])
m4trace:configure.ac:318: -1- AC_SUBST([V4LCONF_LIBS])
m4trace:configure.ac:321: -2- AC_DEFINE_TRACE_LITERAL([HAVE_LIBXXF86DGA])
m4trace:configure.ac:321: -2- AH_OUTPUT([HAVE_LIBXXF86DGA], [/* libxf86dga is present */
#undef HAVE_LIBXXF86DGA])
m4trace:configure.ac:322: -1- AC_CHECK_LIB([Xxf86dga], [XF86DGAQueryExtension], [V4LCONF_LIBS="$X_LIBS -lXxf86dga"
cat >>confdefs.h <<\_ACEOF
@%:@define HAVE_LIBXXF86DGA 1
_ACEOF
], [], [$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS])
m4trace:configure.ac:335: -1- AC_SUBST([GLIB_CONFIG], [$ac_cv_path_GLIB_CONFIG])
m4trace:configure.ac:335: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2289: AC_TRY_RUN is expanded from...
aclocal.m4:209: AM_PATH_GLIB is expanded from...
configure.ac:335: the top level])
m4trace:configure.ac:335: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GLIB])
m4trace:configure.ac:335: -1- AH_OUTPUT([HAVE_GLIB], [/* Glib library present */
#undef HAVE_GLIB])
m4trace:configure.ac:335: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2223: AC_TRY_LINK is expanded from...
aclocal.m4:209: AM_PATH_GLIB is expanded from...
configure.ac:335: the top level])
m4trace:configure.ac:335: -1- AC_SUBST([GLIB_CFLAGS])
m4trace:configure.ac:335: -1- AC_SUBST([GLIB_LIBS])
m4trace:configure.ac:362: -1- AC_SUBST([XML2_CONFIG], [$ac_cv_path_XML2_CONFIG])
m4trace:configure.ac:362: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2289: AC_TRY_RUN is expanded from...
aclocal.m4:6314: AM_PATH_XML2 is expanded from...
configure.ac:362: the top level])
m4trace:configure.ac:362: -1- AC_DEFINE_TRACE_LITERAL([HAVE_XML2])
m4trace:configure.ac:362: -1- AH_OUTPUT([HAVE_XML2], [/* Compiling with XML2 */
#undef HAVE_XML2])
m4trace:configure.ac:362: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
You should run autoupdate.], [autoconf/general.m4:2223: AC_TRY_LINK is expanded from...
aclocal.m4:6314: AM_PATH_XML2 is expanded from...
configure.ac:362: the top level])
m4trace:configure.ac:362: -1- AC_SUBST([XML_CPPFLAGS])
m4trace:configure.ac:362: -1- AC_SUBST([XML_LIBS])
m4trace:configure.ac:403: -1- AC_DEFINE_TRACE_LITERAL([HAVE_X86CPU])
m4trace:configure.ac:403: -1- AH_OUTPUT([HAVE_X86CPU], [/* Compiling for x86 architecture CPU */
#undef HAVE_X86CPU])
m4trace:configure.ac:404: -1- AC_DEFINE_TRACE_LITERAL([ARCH_X86])
m4trace:configure.ac:404: -1- AH_OUTPUT([ARCH_X86], [/* Compiling for x86 architecture */
#undef ARCH_X86])
m4trace:configure.ac:427: -1- AC_DEFINE_TRACE_LITERAL([HAVE_X86_CPU])
m4trace:configure.ac:427: -1- AH_OUTPUT([HAVE_X86_CPU], [/* Compiling for x86-64 architecture CPU */
#undef HAVE_X86_CPU])
m4trace:configure.ac:428: -1- AC_DEFINE_TRACE_LITERAL([ARCH_X86_64])
m4trace:configure.ac:428: -1- AH_OUTPUT([ARCH_X86_64], [/* Compiling for x86-64 architecture CPU */
#undef ARCH_X86_64])
m4trace:configure.ac:435: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PPCCPU])
m4trace:configure.ac:435: -1- AH_OUTPUT([HAVE_PPCCPU], [/* Compiling for PowerPC CPU */
#undef HAVE_PPCCPU])
m4trace:configure.ac:436: -1- AC_DEFINE_TRACE_LITERAL([ARCH_PPC])
m4trace:configure.ac:436: -1- AH_OUTPUT([ARCH_PPC], [/* Compiling for PowerPC */
#undef ARCH_PPC])
m4trace:configure.ac:451: -1- AC_DEFINE_TRACE_LITERAL([ARCH_MIPS])
m4trace:configure.ac:451: -1- AH_OUTPUT([ARCH_MIPS], [/* Compiling for MIPS CPU */
#undef ARCH_MIPS])
m4trace:configure.ac:452: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MIPS])
m4trace:configure.ac:452: -1- AH_OUTPUT([HAVE_MIPS], [/* Compiling for MIPS CPU */
#undef HAVE_MIPS])
m4trace:configure.ac:464: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PS2])
m4trace:configure.ac:464: -1- AH_OUTPUT([HAVE_PS2], [/* Compile for playstation2 */
#undef HAVE_PS2])
m4trace:configure.ac:480: -1- AC_SUBST([PROGRAM_NOPIC])
m4trace:configure.ac:487: -1- AC_SUBST([AS], [$ac_cv_path_AS])
m4trace:configure.ac:491: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ASM_NASM])
m4trace:configure.ac:491: -1- AH_OUTPUT([HAVE_ASM_NASM], [/* Compiling with nasm */
#undef HAVE_ASM_NASM])
m4trace:configure.ac:494: -1- AC_SUBST([ASFLAGS])
m4trace:configure.ac:507: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ASM_MMX])
m4trace:configure.ac:507: -1- AH_OUTPUT([HAVE_ASM_MMX], [/* Compiling in MMX support */
#undef HAVE_ASM_MMX])
m4trace:configure.ac:508: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MMX])
m4trace:configure.ac:508: -1- AH_OUTPUT([HAVE_MMX], [/* Compiling in MMX support in ffmpeg */
#undef HAVE_MMX])
m4trace:configure.ac:522: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ASM_SSE])
m4trace:configure.ac:522: -1- AH_OUTPUT([HAVE_ASM_SSE], [/* Compiling in SSE support */
#undef HAVE_ASM_SSE])
m4trace:configure.ac:523: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SSE])
m4trace:configure.ac:523: -1- AH_OUTPUT([HAVE_SSE], [/* Compiling in SSE support */
#undef HAVE_SSE])
m4trace:configure.ac:538: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ASM_SSE2])
m4trace:configure.ac:538: -1- AH_OUTPUT([HAVE_ASM_SSE2], [/* Compiling in SSE2 support */
#undef HAVE_ASM_SSE2])
m4trace:configure.ac:539: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SSE2])
m4trace:configure.ac:539: -1- AH_OUTPUT([HAVE_SSE2], [/* Compiling in SSE2 support */
#undef HAVE_SSE2])
m4trace:configure.ac:553: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ASM_3DNOW])
m4trace:configure.ac:553: -1- AH_OUTPUT([HAVE_ASM_3DNOW], [/* Compiling in 3Dnow */
#undef HAVE_ASM_3DNOW])
m4trace:configure.ac:567: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CMOV])
m4trace:configure.ac:567: -1- AH_OUTPUT([HAVE_CMOV], [/* Compiling in CMOV */
#undef HAVE_CMOV])
m4trace:configure.ac:582: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ASM_MMX2])
m4trace:configure.ac:582: -1- AH_OUTPUT([HAVE_ASM_MMX2], [/* Compiling in MMX2 */
#undef HAVE_ASM_MMX2])
m4trace:configure.ac:583: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MMX2])
m4trace:configure.ac:583: -1- AH_OUTPUT([HAVE_MMX2], [/* Compiling in MMX2 */
#undef HAVE_MMX2])
m4trace:configure.ac:628: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALTIVEC])
m4trace:configure.ac:628: -1- AH_OUTPUT([HAVE_ALTIVEC], [/* Inline PPC Altivec primitives available */
#undef HAVE_ALTIVEC])
m4trace:configure.ac:629: -1- AC_SUBST([ALTIVEC_CFLAGS])
m4trace:configure.ac:656: -1- AM_CONDITIONAL([HAVE_SDL], [test x$have_sdl = xtrue ])
m4trace:configure.ac:656: -1- AC_SUBST([HAVE_SDL_TRUE])
m4trace:configure.ac:656: -1- AC_SUBST([HAVE_SDL_FALSE])
m4trace:configure.ac:657: -1- AM_CONDITIONAL([HAVE_ASM_MMX], [test x$have_asm_mmx = xtrue])
m4trace:configure.ac:657: -1- AC_SUBST([HAVE_ASM_MMX_TRUE])
m4trace:configure.ac:657: -1- AC_SUBST([HAVE_ASM_MMX_FALSE])
m4trace:configure.ac:658: -1- AM_CONDITIONAL([HAVE_X86CPU], [test x$have_x86cpu = xtrue])
m4trace:configure.ac:658: -1- AC_SUBST([HAVE_X86CPU_TRUE])
m4trace:configure.ac:658: -1- AC_SUBST([HAVE_X86CPU_FALSE])
m4trace:configure.ac:659: -1- AM_CONDITIONAL([HAVE_PPCCPU], [test x$have_ppccpu = xtrue])
m4trace:configure.ac:659: -1- AC_SUBST([HAVE_PPCCPU_TRUE])
m4trace:configure.ac:659: -1- AC_SUBST([HAVE_PPCCPU_FALSE])
m4trace:configure.ac:660: -1- AM_CONDITIONAL([HAVE_ALTIVEC], [test x$have_altivec = xtrue])
m4trace:configure.ac:660: -1- AC_SUBST([HAVE_ALTIVEC_TRUE])
m4trace:configure.ac:660: -1- AC_SUBST([HAVE_ALTIVEC_FALSE])
m4trace:configure.ac:661: -1- AM_CONDITIONAL([HAVE_ASM_MMX2], [test x$have_asm_mmx2 = xtrue])
m4trace:configure.ac:661: -1- AC_SUBST([HAVE_ASM_MMX2_TRUE])
m4trace:configure.ac:661: -1- AC_SUBST([HAVE_ASM_MMX2_FALSE])
m4trace:configure.ac:662: -1- AM_CONDITIONAL([HAVE_ASM_SSE], [test x$have_asm_sse = xtrue])
m4trace:configure.ac:662: -1- AC_SUBST([HAVE_ASM_SSE_TRUE])
m4trace:configure.ac:662: -1- AC_SUBST([HAVE_ASM_SSE_FALSE])
m4trace:configure.ac:663: -1- AM_CONDITIONAL([HAVE_ASM_SSE2], [test x$have_asm_sse2 = xtrue])
m4trace:configure.ac:663: -1- AC_SUBST([HAVE_ASM_SSE2_TRUE])
m4trace:configure.ac:663: -1- AC_SUBST([HAVE_ASM_SSE2_FALSE])
m4trace:configure.ac:664: -1- AM_CONDITIONAL([HAVE_ASM_NASM], [test x$have_asm_nasm = xtrue])
m4trace:configure.ac:664: -1- AC_SUBST([HAVE_ASM_NASM_TRUE])
m4trace:configure.ac:664: -1- AC_SUBST([HAVE_ASM_NASM_FALSE])
m4trace:configure.ac:665: -1- AM_CONDITIONAL([HAVE_MMX], [test x$have_asm_mmx = xtrue])
m4trace:configure.ac:665: -1- AC_SUBST([HAVE_MMX_TRUE])
m4trace:configure.ac:665: -1- AC_SUBST([HAVE_MMX_FALSE])
m4trace:configure.ac:666: -1- AM_CONDITIONAL([HAVE_SSE], [test x$have_asm_sse = xtrue])
m4trace:configure.ac:666: -1- AC_SUBST([HAVE_SSE_TRUE])
m4trace:configure.ac:666: -1- AC_SUBST([HAVE_SSE_FALSE])
m4trace:configure.ac:667: -1- AM_CONDITIONAL([HAVE_SSE2], [test x$have_asm_sse2 = xtrue])
m4trace:configure.ac:667: -1- AC_SUBST([HAVE_SSE2_TRUE])
m4trace:configure.ac:667: -1- AC_SUBST([HAVE_SSE2_FALSE])
m4trace:configure.ac:668: -1- AM_CONDITIONAL([HAVE_MMX2], [test x$have_asm_mmx2 = xtrue])
m4trace:configure.ac:668: -1- AC_SUBST([HAVE_MMX2_TRUE])
m4trace:configure.ac:668: -1- AC_SUBST([HAVE_MMX2_FALSE])
m4trace:configure.ac:669: -1- AM_CONDITIONAL([HAVE_XML2], [test x$have_xml2 = xtrue])
m4trace:configure.ac:669: -1- AC_SUBST([HAVE_XML2_TRUE])
m4trace:configure.ac:669: -1- AC_SUBST([HAVE_XML2_FALSE])
m4trace:configure.ac:670: -1- AM_CONDITIONAL([HAVE_JACK], [test x$have_jack = xtrue])
m4trace:configure.ac:670: -1- AC_SUBST([HAVE_JACK_TRUE])
m4trace:configure.ac:670: -1- AC_SUBST([HAVE_JACK_FALSE])
m4trace:configure.ac:671: -1- AM_CONDITIONAL([HAVE_V4L], [test x$have_v4l = xtrue])
m4trace:configure.ac:671: -1- AC_SUBST([HAVE_V4L_TRUE])
m4trace:configure.ac:671: -1- AC_SUBST([HAVE_V4L_FALSE])
m4trace:configure.ac:672: -1- AM_CONDITIONAL([SUPPORT_READ_DV2], [test x$have_libdv = xtrue])
m4trace:configure.ac:672: -1- AC_SUBST([SUPPORT_READ_DV2_TRUE])
m4trace:configure.ac:672: -1- AC_SUBST([SUPPORT_READ_DV2_FALSE])
m4trace:configure.ac:673: -1- AM_CONDITIONAL([HAVE_DL_DLOPEN], [test x$have_dl_dlopen = xtrue])
m4trace:configure.ac:673: -1- AC_SUBST([HAVE_DL_DLOPEN_TRUE])
m4trace:configure.ac:673: -1- AC_SUBST([HAVE_DL_DLOPEN_FALSE])
m4trace:configure.ac:725: -1- AC_DEFINE_TRACE_LITERAL([VEEJAY])
m4trace:configure.ac:725: -1- AH_OUTPUT([VEEJAY], [/* Building veejay */
#undef VEEJAY])
m4trace:configure.ac:747: -1- AC_CONFIG_FILES([
Makefile
libOSC/Makefile
libhash/Makefile
libvjmsg/Makefile
libvevo/Makefile
libvjmem/Makefile
libplugger/Makefile
libvjnet/Makefile
libyuv/Makefile
libel/Makefile
bio2jack/Makefile
vevosample/Makefile
veejay/Makefile
man/Makefile
veejay-config
veejay.pc
])
m4trace:configure.ac:748: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:748: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
m4trace:configure.ac:750: -1- AC_DEFINE_TRACE_LITERAL([VERSION])

View File

@@ -0,0 +1,4 @@
bio2jack - a library for porting blocked io(OSS/ALSA) apps to jack
---------------------------------------------------------
Chris Morgan <cmorgan@alum.wpi.edu>

339
veejay-ng/bio2jack/COPYING Normal file
View File

@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, 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.
GNU GENERAL PUBLIC LICENSE
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
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

View File

@@ -0,0 +1,6 @@
Installing bio2jack
----------------------
This library is intended only for static linking as it is small and there
is no need to require yet another library for a user to install. So
please, statically link to this library.

View File

@@ -0,0 +1,4 @@
noinst_LTLIBRARIES = libbio2jack.la
AM_CFLAGS = -Wall
LIBS = @LIBS@ @PTHREAD_LIBS@ @JACK_LIBS@
libbio2jack_la_SOURCES = bio2jack.c bio2jack.h

View File

@@ -0,0 +1,501 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
SOURCES = $(libbio2jack_la_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = bio2jack
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
AUTHORS COPYING INSTALL NEWS
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libbio2jack_la_LIBADD =
am_libbio2jack_la_OBJECTS = bio2jack.lo
libbio2jack_la_OBJECTS = $(am_libbio2jack_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libbio2jack_la_SOURCES)
DIST_SOURCES = $(libbio2jack_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALTIVEC_CFLAGS = @ALTIVEC_CFLAGS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_AVCODEC_CFLAGS = @FFMPEG_AVCODEC_CFLAGS@
FFMPEG_AVCODEC_LIBS = @FFMPEG_AVCODEC_LIBS@
FFMPEG_AVFORMAT_CFLAGS = @FFMPEG_AVFORMAT_CFLAGS@
FFMPEG_AVFORMAT_LIBS = @FFMPEG_AVFORMAT_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@
GLIB_LIBS = @GLIB_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
HAVE_ALTIVEC_FALSE = @HAVE_ALTIVEC_FALSE@
HAVE_ALTIVEC_TRUE = @HAVE_ALTIVEC_TRUE@
HAVE_ASM_MMX2_FALSE = @HAVE_ASM_MMX2_FALSE@
HAVE_ASM_MMX2_TRUE = @HAVE_ASM_MMX2_TRUE@
HAVE_ASM_MMX_FALSE = @HAVE_ASM_MMX_FALSE@
HAVE_ASM_MMX_TRUE = @HAVE_ASM_MMX_TRUE@
HAVE_ASM_NASM_FALSE = @HAVE_ASM_NASM_FALSE@
HAVE_ASM_NASM_TRUE = @HAVE_ASM_NASM_TRUE@
HAVE_ASM_SSE2_FALSE = @HAVE_ASM_SSE2_FALSE@
HAVE_ASM_SSE2_TRUE = @HAVE_ASM_SSE2_TRUE@
HAVE_ASM_SSE_FALSE = @HAVE_ASM_SSE_FALSE@
HAVE_ASM_SSE_TRUE = @HAVE_ASM_SSE_TRUE@
HAVE_DL_DLOPEN_FALSE = @HAVE_DL_DLOPEN_FALSE@
HAVE_DL_DLOPEN_TRUE = @HAVE_DL_DLOPEN_TRUE@
HAVE_JACK_FALSE = @HAVE_JACK_FALSE@
HAVE_JACK_TRUE = @HAVE_JACK_TRUE@
HAVE_MMX2_FALSE = @HAVE_MMX2_FALSE@
HAVE_MMX2_TRUE = @HAVE_MMX2_TRUE@
HAVE_MMX_FALSE = @HAVE_MMX_FALSE@
HAVE_MMX_TRUE = @HAVE_MMX_TRUE@
HAVE_PPCCPU_FALSE = @HAVE_PPCCPU_FALSE@
HAVE_PPCCPU_TRUE = @HAVE_PPCCPU_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SSE2_FALSE = @HAVE_SSE2_FALSE@
HAVE_SSE2_TRUE = @HAVE_SSE2_TRUE@
HAVE_SSE_FALSE = @HAVE_SSE_FALSE@
HAVE_SSE_TRUE = @HAVE_SSE_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_X86CPU_FALSE = @HAVE_X86CPU_FALSE@
HAVE_X86CPU_TRUE = @HAVE_X86CPU_TRUE@
HAVE_XML2_FALSE = @HAVE_XML2_FALSE@
HAVE_XML2_TRUE = @HAVE_XML2_TRUE@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
LIBGETOPT_LIB = @LIBGETOPT_LIB@
LIBM_LIBS = @LIBM_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@ @PTHREAD_LIBS@ @JACK_LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_RELEASE = @LT_RELEASE@
LT_REVISION = @LT_REVISION@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MJPEGTOOLS_CFLAGS = @MJPEGTOOLS_CFLAGS@
MJPEGTOOLS_LIBS = @MJPEGTOOLS_LIBS@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PROGRAM_NOPIC = @PROGRAM_NOPIC@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUPPORT_READ_DV2_FALSE = @SUPPORT_READ_DV2_FALSE@
SUPPORT_READ_DV2_TRUE = @SUPPORT_READ_DV2_TRUE@
V4LCONF_LIBS = @V4LCONF_LIBS@
VERSION = @VERSION@
XML2_CONFIG = @XML2_CONFIG@
XML_CPPFLAGS = @XML_CPPFLAGS@
XML_LIBS = @XML_LIBS@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
noinst_LTLIBRARIES = libbio2jack.la
AM_CFLAGS = -Wall
libbio2jack_la_SOURCES = bio2jack.c bio2jack.h
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bio2jack/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu bio2jack/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libbio2jack.la: $(libbio2jack_la_OBJECTS) $(libbio2jack_la_DEPENDENCIES)
$(LINK) $(libbio2jack_la_LDFLAGS) $(libbio2jack_la_OBJECTS) $(libbio2jack_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bio2jack.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

10
veejay-ng/bio2jack/NEWS Normal file
View File

@@ -0,0 +1,10 @@
bio2jack - NEWS
--------
9/12/2004 - Check out ChangeLog for news ;-)
10/26/2003 - Updated to the new jack api, fixed a bunch of bugs
Removed all blocking functions, blocking is BAD as it could potentially
hold off the callback function.
1/13/2003 - Continuing to refine the api by working on the xine plugin.
Fixed a few bugs in the code. Uploaded newer packages to
sourceforge.
12/31/2002 - Sourceforge project is setup.

30
veejay-ng/bio2jack/README Normal file
View File

@@ -0,0 +1,30 @@
bio2jack
-----------
To Build:
----------
run ./autogen.sh
run ./configure
run make
enjoy ;-)
Bio(blocked i/o) 2 jack.
A library for enabling easy porting of blocked io(OSS/ALSA) applications to
the jack sound server(http://jackit.sourceforge.net). This library allows the
person porting the code to simply replace the calls into OSS/ALSA with
calls into interface functions of this library. The library buffers a
small amount of audio data and takes care of the rest of the jack
implementation including the linked list of audio data buffers and the jack
callback.
Interface functions:
TODO: once these become stable copy and paste from the header file
Currently these drivers use the bio2jack library:
---------------------------------------------------
xmms-jack: Written in conjunction with this library
xine:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,103 @@
/*
* Copyright 2003 Chris Morgan <cmorgan@alum.wpi.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _H_JACK_OUT_H
#define _H_JACK_OUT_H
#include <jack/jack.h>
#define bool long
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define ERR_SUCCESS 0
#define ERR_OPENING_JACK 1
#define ERR_RATE_MISMATCH 2
#define ERR_BYTES_PER_OUTPUT_FRAME_INVALID 3
#define ERR_BYTES_PER_INPUT_FRAME_INVALID 4
#define ERR_TOO_MANY_OUTPUT_CHANNELS 5
#define ERR_PORT_NAME_OUTPUT_CHANNEL_MISMATCH 6
#define ERR_PORT_NOT_FOUND 7
enum status_enum { PLAYING, PAUSED, STOPPED, CLOSED, RESET };
enum pos_enum { BYTES, MILLISECONDS };
#define PLAYED 1 /* played out of the speakers(estimated value but should be close */
#define WRITTEN_TO_JACK 2 /* amount written out to jack */
#define WRITTEN 3 /* amount written to the bio2jack device */
/**********************/
/* External functions */
void JACK_Init(void); /* call this before any other bio2jack calls */
int JACK_Open(int *deviceID, unsigned int bits_per_sample, unsigned long *rate, int channels);
int JACK_OpenEx(int *deviceID, unsigned int bits_per_channel,
unsigned long *rate,
unsigned int input_channels, unsigned int output_channels,
char **jack_port_name, unsigned int jack_port_name_count,
unsigned long jack_port_flags);
int JACK_Close(int deviceID); /* return 0 for success */
void JACK_Reset(int deviceID); /* free all buffered data and reset several values in the device */
long JACK_Write(int deviceID, char *data, unsigned long bytes); /* returns the number of bytes written */
/* state setting values */
/* set/get the written/played/buffered value based on a byte or millisecond input value */
long JACK_GetPosition(int deviceID, enum pos_enum position, int type);
void JACK_SetPosition(int deviceID, enum pos_enum position, long value);
long JACK_GetJackLatency(int deviceID); /* return the latency in milliseconds of jack */
int JACK_SetState(int deviceID, enum status_enum state); /* playing, paused, stopped */
enum status_enum JACK_GetState(int deviceID);
long JACK_GetMaxBufferedBytes(int deviceID);
void JACK_SetMaxBufferedBytes(int deviceID, long max_buffered_bytes); /* set the max number of bytes the jack driver should buffer */
/* Properties of the jack driver */
/* linear means 0 volume is silence, 100 is full volume */
/* dbAttenuation means 0 volume is 0dB attenuation */
/* Bio2jack defaults to linear */
enum JACK_VOLUME_TYPE { linear, dbAttenuation };
enum JACK_VOLUME_TYPE JACK_SetVolumeEffectType(int deviceID,
enum JACK_VOLUME_TYPE type);
int JACK_SetAllVolume(int deviceID, unsigned int volume); /* returns 0 on success */
int JACK_SetVolumeForChannel(int deviceID, unsigned int channel, unsigned int volume);
void JACK_GetVolumeForChannel(int deviceID, unsigned int channel, unsigned int *volume);
long JACK_GetOutputBytesPerSecond(int deviceID); /* bytes_per_frame * sample_rate */
long JACK_GetInputBytesPerSecond(int deviceID); /* bytes_per_frame * sample_rate */
long JACK_GetBytesStored(int deviceID); /* bytes currently buffered in the device */
long JACK_GetBytesFreeSpace(int deviceID); /* bytes of free space in the buffers */
long JACK_GetBytesPerOutputFrame(int deviceID);
int JACK_GetNumInputChannels(int deviceID);
int JACK_SetNumInputChannels(int deviceID, int channels);
int JACK_GetNumOutputChannels(int deviceID);
int JACK_SetNumOutputChannels(int deviceID, int channels);
long JACK_GetSampleRate(int deviceID); /* samples per second */
long JACK_OutputStatus(int deviceID, long int *sec, long int *usec);
#endif /* #ifndef JACK_OUT_H */

142
veejay-ng/compile Executable file
View File

@@ -0,0 +1,142 @@
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.
scriptversion=2005-02-03.08
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand `-c -o'.
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file `INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
esac
ofile=
cfile=
eat=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as `compile cc -o foo foo.c'.
# So we strip `-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no `-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# `.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
# Create the lock directory.
# Note: use `[/.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

1465
veejay-ng/config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

259
veejay-ng/config.h.in Normal file
View File

@@ -0,0 +1,259 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Compiling for MIPS CPU */
#undef ARCH_MIPS
/* Compiling for PowerPC */
#undef ARCH_PPC
/* Compiling for x86 architecture */
#undef ARCH_X86
/* Compiling for x86-64 architecture CPU */
#undef ARCH_X86_64
/* Define to 1 if you have the <alloca.h> header file. */
#undef HAVE_ALLOCA_H
/* Inline PPC Altivec primitives available */
#undef HAVE_ALTIVEC
/* Compiling in 3Dnow */
#undef HAVE_ASM_3DNOW
/* Compiling in MMX support */
#undef HAVE_ASM_MMX
/* Compiling in MMX2 */
#undef HAVE_ASM_MMX2
/* Compiling with nasm */
#undef HAVE_ASM_NASM
/* Compiling in SSE support */
#undef HAVE_ASM_SSE
/* Compiling in SSE2 support */
#undef HAVE_ASM_SSE2
/* use avcodec */
#undef HAVE_AVCODEC
/* use avformat */
#undef HAVE_AVFORMAT
/* Define to 1 if you have the `bzero' function. */
#undef HAVE_BZERO
/* Compiling in CMOV */
#undef HAVE_CMOV
/* MAC OS X Darin */
#undef HAVE_DARWIN
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Compile with dlopen support */
#undef HAVE_DL_DLOPEN
/* Define to 1 if you have the <fenv.h> header file. */
#undef HAVE_FENV_H
/* long getopt support */
#undef HAVE_GETOPT_LONG
/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY
/* Glib library present */
#undef HAVE_GLIB
/* Define to 1 if you have the <GL/glut.h> header file. */
#undef HAVE_GL_GLUT_H
/* Define to 1 if you have the <GL/gl.h> header file. */
#undef HAVE_GL_GL_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `dl' library (-ldl). */
#undef HAVE_LIBDL
/* Compiling with pthread library */
#undef HAVE_LIBPTHREAD
/* libxf86dga is present */
#undef HAVE_LIBXXF86DGA
/* Linux platform */
#undef HAVE_LINUX
/* Define to 1 if you have the `memalign' function. */
#undef HAVE_MEMALIGN
/* Define to 1 if you have the `memcpy' function. */
#undef HAVE_MEMCPY
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
/* Compiling for MIPS CPU */
#undef HAVE_MIPS
/* MJPEGTools installed */
#undef HAVE_MJPEGTOOLS
/* Define to 1 if you have the `mmap' function. */
#undef HAVE_MMAP
/* Compiling in MMX support in ffmpeg */
#undef HAVE_MMX
/* Compiling in MMX2 */
#undef HAVE_MMX2
/* Define to 1 if you have the `posix_memalign' function. */
#undef HAVE_POSIX_MEMALIGN
/* Define to 1 if you have the `pow' function. */
#undef HAVE_POW
/* Compiling for PowerPC CPU */
#undef HAVE_PPCCPU
/* Compile for playstation2 */
#undef HAVE_PS2
/* Using pthread stack size */
#undef HAVE_PTHREADSTACKSIZE
/* Define to 1 if you have the `sched_get_priority_max' function. */
#undef HAVE_SCHED_GET_PRIORITY_MAX
/* SDL library present */
#undef HAVE_SDL
/* Define to 1 if you have the `select' function. */
#undef HAVE_SELECT
/* Define to 1 if you have the `socket' function. */
#undef HAVE_SOCKET
/* Compiling in SSE support */
#undef HAVE_SSE
/* Compiling in SSE2 support */
#undef HAVE_SSE2
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the `strncasecmp' function. */
#undef HAVE_STRNCASECMP
/* Define to 1 if you have the `strndup' function. */
#undef HAVE_STRNDUP
/* Define to 1 if you have the `strstr' function. */
#undef HAVE_STRSTR
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Building for Linux - using the video4linux API */
#undef HAVE_V4L
/* Compiling for x86 architecture CPU */
#undef HAVE_X86CPU
/* Compiling for x86-64 architecture CPU */
#undef HAVE_X86_CPU
/* Compiling with XML2 */
#undef HAVE_XML2
/* Is __progname defined by system? */
#undef HAVE___PROGNAME
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define as the return type of signal handlers (`int' or `void'). */
#undef RETSIGTYPE
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* libdv is present */
#undef SUPPORT_READ_DV2
/* Compiling in a video output X screen */
#undef USE_DISPLAY
/* Building veejay */
#undef VEEJAY
/* Version number of package */
#undef VERSION
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
#undef WORDS_BIGENDIAN
/* Number of bits in a file offset, on hosts where this is settable. */
#undef _FILE_OFFSET_BITS
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
/* Define for large files, on AIX-style hosts. */
#undef _LARGE_FILES
/* Define to empty if `const' does not conform to ANSI C. */
#undef const
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
#undef inline
#endif

513
veejay-ng/config.rpath Executable file
View File

@@ -0,0 +1,513 @@
#! /bin/sh
# Output a system dependent set of variables, describing how to set the
# run time search path of shared libraries in an executable.
#
# Copyright 1996-2002 Free Software Foundation, Inc.
# Taken from GNU libtool, 2001
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
#
# The first argument passed to this file is the canonical host specification,
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
# or
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
# should be set by the caller.
#
# The set of defined variables is at the end of this script.
# All known linkers require a `.a' archive for static linking (except M$VC,
# which needs '.lib').
libext=a
shlibext=
host="$1"
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
wl=
if test "$GCC" = yes; then
wl='-Wl,'
else
case "$host_os" in
aix3* | aix4* | aix5*)
wl='-Wl,'
;;
hpux9* | hpux10* | hpux11*)
wl='-Wl,'
;;
irix5* | irix6*)
wl='-Wl,'
;;
linux*)
echo '__INTEL_COMPILER' > conftest.$ac_ext
if $CC -E conftest.$ac_ext >/dev/null | grep __INTEL_COMPILER >/dev/null
then
:
else
# Intel icc
wl='-Qoption,ld,'
fi
;;
osf3* | osf4* | osf5*)
wl='-Wl,'
;;
solaris*)
wl='-Wl,'
;;
sunos4*)
wl='-Qoption ld '
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
if test "x$host_vendor" = xsni; then
wl='-LD'
else
wl='-Wl,'
fi
;;
esac
fi
hardcode_libdir_flag_spec=
hardcode_libdir_separator=
hardcode_direct=no
hardcode_minus_L=no
case "$host_os" in
cygwin* | mingw* | pw32*)
# FIXME: the MSVC++ port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
if test "$GCC" != yes; then
with_gnu_ld=no
fi
;;
openbsd*)
with_gnu_ld=no
;;
esac
ld_shlibs=yes
if test "$with_gnu_ld" = yes; then
case "$host_os" in
aix3* | aix4* | aix5*)
# On AIX, the GNU linker is very broken
ld_shlibs=no
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
# that the semantics of dynamic libraries on AmigaOS, at least up
# to version 4, is to share data among multiple programs linked
# with the same dynamic library. Since this doesn't match the
# behavior of shared libraries on other platforms, we can use
# them.
ld_shlibs=no
;;
beos*)
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
cygwin* | mingw* | pw32*)
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec='-L$libdir'
;;
solaris* | sysv5*)
if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
sunos4*)
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
fi
;;
esac
if test "$ld_shlibs" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
fi
else
case "$host_os" in
aix3*)
# Note: this linker hardcodes the directories in LIBPATH if there
# are no directories specified by -L.
hardcode_minus_L=yes
if test "$GCC" = yes; then
# Neither direct hardcoding nor static linking is supported with a
# broken collect2.
hardcode_direct=unsupported
fi
;;
aix4* | aix5*)
if test "$host_cpu" = ia64; then
# On IA64, the linker does run time linking by default, so we don't
# have to do anything special.
aix_use_runtimelinking=no
else
aix_use_runtimelinking=no
# Test if we are trying to use run time linking or normal
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
# need to do runtime linking.
case $host_os in aix4.[23]|aix4.[23].*|aix5*)
for ld_flag in $LDFLAGS; do
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
aix_use_runtimelinking=yes
break
fi
done
esac
fi
hardcode_direct=yes
hardcode_libdir_separator=':'
if test "$GCC" = yes; then
case $host_os in aix4.[012]|aix4.[012].*)
collect2name=`${CC} -print-prog-name=collect2`
if test -f "$collect2name" && \
strings "$collect2name" | grep resolve_lib_name >/dev/null
then
# We have reworked collect2
hardcode_direct=yes
else
# We have old collect2
hardcode_direct=unsupported
hardcode_minus_L=yes
hardcode_libdir_flag_spec='-L$libdir'
hardcode_libdir_separator=
fi
esac
fi
if test "$aix_use_runtimelinking" = yes; then
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
else
if test "$host_cpu" = ia64; then
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
else
hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
fi
fi
;;
amigaos*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
# see comment about different semantics on the GNU ld section
ld_shlibs=no
;;
cygwin* | mingw* | pw32*)
# When not using gcc, we currently assume that we are using
# Microsoft Visual C++.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec=' '
libext=lib
;;
darwin* | rhapsody*)
hardcode_direct=yes
;;
freebsd1*)
ld_shlibs=no
;;
freebsd2.2*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
freebsd2*)
hardcode_direct=yes
hardcode_minus_L=yes
;;
freebsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
hpux9* | hpux10* | hpux11*)
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
hardcode_libdir_separator=:
hardcode_direct=yes
hardcode_minus_L=yes # Not in the search PATH, but as the default
# location of the library.
;;
irix5* | irix6*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
netbsd*)
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
;;
newsos6)
hardcode_direct=yes
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
openbsd*)
hardcode_direct=yes
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
else
case "$host_os" in
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
hardcode_libdir_flag_spec='-R$libdir'
;;
*)
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
;;
esac
fi
;;
os2*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes
;;
osf3*)
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
hardcode_libdir_separator=:
;;
osf4* | osf5*)
if test "$GCC" = yes; then
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
else
# Both cc and cxx compiler support -rpath directly
hardcode_libdir_flag_spec='-rpath $libdir'
fi
hardcode_libdir_separator=:
;;
sco3.2v5*)
;;
solaris*)
hardcode_libdir_flag_spec='-R$libdir'
;;
sunos4*)
hardcode_libdir_flag_spec='-L$libdir'
hardcode_direct=yes
hardcode_minus_L=yes
;;
sysv4)
if test "x$host_vendor" = xsno; then
hardcode_direct=yes # is this really true???
else
hardcode_direct=no # Motorola manual says yes, but my tests say they lie
fi
;;
sysv4.3*)
;;
sysv5*)
hardcode_libdir_flag_spec=
;;
uts4*)
hardcode_libdir_flag_spec='-L$libdir'
;;
dgux*)
hardcode_libdir_flag_spec='-L$libdir'
;;
sysv4*MP*)
if test -d /usr/nec; then
ld_shlibs=yes
fi
;;
sysv4.2uw2*)
hardcode_direct=yes
hardcode_minus_L=no
;;
sysv5uw7* | unixware7*)
;;
*)
ld_shlibs=no
;;
esac
fi
# Check dynamic linker characteristics
libname_spec='lib$name'
sys_lib_dlsearch_path_spec="/lib /usr/lib"
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
case "$host_os" in
aix3*)
shlibext=so
;;
aix4* | aix5*)
shlibext=so
;;
amigaos*)
shlibext=ixlibrary
;;
beos*)
shlibext=so
;;
bsdi4*)
shlibext=so
sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
;;
cygwin* | mingw* | pw32*)
case $GCC,$host_os in
yes,cygwin*)
shlibext=dll.a
;;
yes,mingw*)
shlibext=dll
sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
;;
yes,pw32*)
shlibext=dll
;;
*)
shlibext=dll
;;
esac
;;
darwin* | rhapsody*)
shlibext=dylib
;;
freebsd1*)
;;
freebsd*)
shlibext=so
;;
gnu*)
shlibext=so
;;
hpux9* | hpux10* | hpux11*)
shlibext=sl
;;
irix5* | irix6*)
shlibext=so
case "$host_os" in
irix5*)
libsuff= shlibsuff=
;;
*)
case $LD in
*-32|*"-32 ") libsuff= shlibsuff= ;;
*-n32|*"-n32 ") libsuff=32 shlibsuff=N32 ;;
*-64|*"-64 ") libsuff=64 shlibsuff=64 ;;
*) libsuff= shlibsuff= ;;
esac
;;
esac
sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
;;
linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
;;
linux-gnu*)
shlibext=so
;;
netbsd*)
shlibext=so
;;
newsos6)
shlibext=so
;;
openbsd*)
shlibext=so
;;
os2*)
libname_spec='$name'
shlibext=dll
;;
osf3* | osf4* | osf5*)
shlibext=so
sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
sco3.2v5*)
shlibext=so
;;
solaris*)
shlibext=so
;;
sunos4*)
shlibext=so
;;
sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
shlibext=so
case "$host_vendor" in
motorola)
sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
;;
esac
;;
uts4*)
shlibext=so
;;
dgux*)
shlibext=so
;;
sysv4*MP*)
if test -d /usr/nec; then
shlibext=so
fi
;;
esac
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_sys_lib_search_path_spec=`echo "X$sys_lib_search_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
escaped_sys_lib_dlsearch_path_spec=`echo "X$sys_lib_dlsearch_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
# How to pass a linker flag through the compiler.
wl="$escaped_wl"
# Static library suffix (normally "a").
libext="$libext"
# Shared library suffix (normally "so").
shlibext="$shlibext"
# Flag to hardcode \$libdir into a binary during linking.
# This must work even if \$libdir does not exist.
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator="$hardcode_libdir_separator"
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
# resulting binary.
hardcode_direct="$hardcode_direct"
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L="$hardcode_minus_L"
# Compile-time system search path for libraries
sys_lib_search_path_spec="$escaped_sys_lib_search_path_spec"
# Run-time system search path for libraries
sys_lib_dlsearch_path_spec="$escaped_sys_lib_dlsearch_path_spec"
EOF

1569
veejay-ng/config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

28887
veejay-ng/configure vendored Executable file

File diff suppressed because it is too large Load Diff

804
veejay-ng/configure.ac Normal file
View File

@@ -0,0 +1,804 @@
dnl Process this file with autoconf to produce a configure script.
dnl AC_INIT
AC_INIT([veejay],[0.99.1],[veejay-users@lissts.sourceforge.net])
AC_PREREQ(2.57)
AC_CONFIG_SRCDIR([veejay/veejay.c])
VEEJAY_MAJOR_VERSION=0
VEEJAY_MINOR_VERSION=99
VEEJAY_MICRO_VERSION=1
VEEJAY_VERSION=$VEEJAY_MAJOR_VERSION.$VEEJAY_MINOR_VERSION.$VEEJAY_MICRO_VERSION
VEEJAY_CODENAME="Resurrection - build $VEEJAY_MINOR_VERSION $VEEJAY_MICRO_VERSION"
AC_CONFIG_HEADERS([config.h])
dnl AX_CONFIG_PREFIXED_HEADER([veejay-config.h], [VEEJAY], [config.h])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([1.7])
AM_MAINTAINER_MODE
AM_INIT_AUTOMAKE([dist-bzip2])
# libtool versioning
LT_RELEASE=$VEEJAY_MAJOR_VERSION.$VEEJAY_MINOR_VERSION
LT_CURRENT=$VEEJAY_MICRO_VERSION
LT_REVISION=$VEEJAY_MICRO_VERSION
LT_AGE=$VEEJAY_MICRO_VERSION
AC_SUBST(LT_RELEASE)
AC_SUBST(LT_CURRENT)
AC_SUBST(LT_REVISION)
AC_SUBST(LT_AGE)
dnl **********************************************************************
dnl Options
dnl kill CFLAGS
CFLAGS=""
GLU_LIB_PATH=""
GLU_INC_PATH=""
AC_ARG_ENABLE(debug,
AC_HELP_STRING([--enable-debug],
[Compile in debugging information]))
AC_ARG_ENABLE(strict,
AC_HELP_STRING([--enable-strict],
[Compile in assertion checking]))
AC_ARG_ENABLE(compile-warnings,
AC_HELP_STRING([--enable-compile-warnings],
[Turn on compiler warnings.]))
AC_ARG_ENABLE(warnings_as_errors,
AC_HELP_STRING([--enable-warnings_as_errors],
[Compiler warnings are errors.]))
AC_ARG_ENABLE(simd-accel,
AC_HELP_STRING([--enable-simd-accel],
[use SIMD multimedia instructions such as MMX, AltiVec, etc.if possible]))
AC_ARG_WITH(extra-cflags,
AC_HELP_STRING([--with-extra-cflags=flags],
[Options to be added to CFLAGS (optional)]))
AC_ARG_WITH(libdv,
AC_HELP_STRING([--without-libdv], [Do not use libdv.]),
[], [with_libdv=yes])
AC_ARG_WITH(jack,
AC_HELP_STRING([--without-jack], [Do not use jack.]),
[], [with_jack=yes])
AC_ARG_WITH(v4l,
AC_HELP_STRING([--without-v4l], [Do not use video4linux]),
[], [with_v4l=yes])
AC_ARG_WITH(xml2,
AC_HELP_STRING([--without-xml2], [Do not use the XML library for Gnome]),
[], [with_xml2=yes])
AC_ARG_WITH(sdl,
AC_HELP_STRING([--without-sdl], [Do not use SDL]),
[], [with_sdl=yes])
AC_ARG_WITH(gl-libs,[ --with-gl-libs=DIR Specify GLU/GL library location], GL_LIB_PATH="-L$withval")
AC_ARG_WITH(gl-inc, [ --with-gl-inc=DIR Specify GLU/GL header file location],GL_INC_PATH="-I$withval")
AC_ARG_WITH(display,
AC_HELP_STRING([--without-display], [Do not use SDL/OpenGL]),
[], [use_display=yes])
AC_GNU_SOURCE
dnl Initialize libtool
AC_PROG_LIBTOOL
dnl Checks for programs.
AC_PROG_AWK
AC_PROG_CC
AM_PROG_CC_STDC
AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_LN_S
AC_C_BIGENDIAN
AC_C_CONST
AC_C_INLINE
AC_SYS_LARGEFILE
dnl configure AS and ASFLAGS...
AM_PROG_AS
AC_CHECK_HEADERS([fenv.h stdint.h inttypes.h sys/types.h alloca.h])
dnl AX_PREFIXED_DEFINE([VEEJAY], [HAVE_STDINT_H])
dnl AX_PREFIXED_DEFINE([VEEJAY], [HAVE_INTTYPES_H])
AC_CHECK_FUNCS([posix_memalign memalign pow bzero gettimeofday memset mmap strndup strstr strncasecmp])
AC_CHECK_FUNCS([sched_get_priority_max])
AC_CHECK_FUNCS([select socket getpagesize memcpy])
AC_CHECK_FUNC(getopt_long,
[AC_DEFINE(HAVE_GETOPT_LONG, 1, [long getopt support])],
[ # FreeBSD and BSD/OS have a gnugetopt library for this:
AC_CHECK_LIB([gnugetopt], [getopt_long],
[AC_DEFINE(HAVE_GETOPT_LONG, 1,
[long getopt support])
LIBGETOPT_LIB="-lgnugetopt"])
])
AC_SUBST(LIBGETOPT_LIB)
AC_TYPE_SIGNAL
AC_MSG_NOTICE([The host is $host $host_cpu $host_vendor $host_os .])
have_glut=false
have_glu=false
have_sdl=false
have_gl=false
have_display=false
if test x$use_display != xno ; then
AC_DEFINE(USE_DISPLAY,,[Compiling in a video output X screen])
AC_CHECK_HEADERS(GL/gl.h ,,
[AC_MSG_ERROR([Cannot find OpenGL headers]) ])
if test x$with_sdl != xno ; then
AM_PATH_SDL(1.2.3,[
have_sdl=true
AC_DEFINE(HAVE_SDL,, [SDL library present])],,)
fi
GL_LIBS=""
GL_CFLAGS="$GL_INC_PATH"
AC_CHECK_LIB([GL], [main], have_gl=true)
if test x$have_gl = xtrue ; then
GL_LIBS="$GL_LIB_PATH -lGL"
else
AC_MSG_ERROR([Cannot find openGL library])
fi
AC_CHECK_HEADERS(GL/glut.h ,,
[AC_MSG_ERROR([Cannot find Glut headers]) ])
AC_CHECK_LIB([glut], [glutInit], have_glut=true)
if test x$have_glut = xtrue; then
GL_LIBS="$GL_LIBS -lglut"
else
AC_MSG_ERROR([Cannot find glut library])
fi
AC_CHECK_LIB([GLU], [gluProject], have_glu=true)
if test x$have_glu = xtrue; then
GL_LIBS="$GL_LIBS -lGLU"
else
AC_MSG_ERROR([Cannot find GLU library])
fi
AC_SUBST( GL_LIBS )
AC_SUBST( GL_CFLAGS )
fi
dnl *********************************************************************
dnl Test whether we're linux or not. If so, define HAVE_V4L and build the
dnl video4linux/hardware dependent tools. Else, undefine HAVE_V4L
have_v4l=false
have_linux=false
have_darwin=false
use_gveejayreloaded=false
use_gveejay=false
case $host in
*-*-linux*)
AC_CHECK_HEADER(linux/version.h,
[have_linux=true
if test x$with_gveejayreloaded != xno ; then
use_gveejayreloaded=true
fi
if test x$with_gveejay != xno ; then
use_gveejay=true
fi
AC_DEFINE(HAVE_LINUX,,[Linux platform])
],
[AC_MSG_ERROR([version.h not found - please install the linux kernel headers])
])
LIBM_LIBS="-lm"
;;
*-apple-darwin*)
AC_DEFINE(HAVE_DARWIN,,[MAC OS X Darin])
dnl OS-X/Darwin needs no-cpp-precomp
CFLAGS="$CFLAGS -no-cpp-precomp"
have_darwin=true
LIBM_LIBS=""
;;
*)
AC_MSG_WARN([Alien platform - Good Luck!])
LIBM_LIBS=""
;;
esac
AC_SUBST(LIBM_LIBS)
if test x$with_v4l != xno ; then
if test x$have_linux != xfalse ; then
AC_CHECK_HEADER(linux/videodev.h,
[have_v4l=true
if test x$with_v4l != xno; then
AC_DEFINE(HAVE_V4L, 1,
[Building for Linux - using the video4linux API])
fi
],
[AC_MSG_ERROR([videodev.h not found - please install the linux kernel headers])])
fi
fi
dnl *********************************************************************
dnl Check for the pthread lib
dnl
AC_SUBST(PTHREAD_LIBS)
have_pthread=false
AC_CHECK_LIB(pthread, pthread_create,
[ PTHREAD_LIBS="-lpthread"
AC_DEFINE(HAVE_LIBPTHREAD,,[Compiling with pthread library])
have_pthread=true ],,)
AC_CHECK_FUNC(pthread_attr_getstacksize,
[
AC_DEFINE(HAVE_PTHREADSTACKSIZE,,[Using pthread stack size])
] )
have_dl_dlopen=false
AC_CHECK_LIB(dl,dlopen)
if test "$ac_cv_lib_dl_dlopen" = "yes"; then
AC_DEFINE(HAVE_DL_DLOPEN,,[Compile with dlopen support])
have_dl_dlopen=true
fi
dnl
PKG_CHECK_MODULES(FFMPEG_AVCODEC, [libavcodec],
[
AC_SUBST( FFMPEG_AVCODEC_CFLAGS )
AC_SUBST( FFMPEG_AVCODEC_LIBS )
have_avcodec=true
AC_DEFINE(HAVE_AVCODEC, 1, [use avcodec])],
[have_avcodec=false])
PKG_CHECK_MODULES(FFMPEG_AVCODEC, [libavformat],
[
AC_SUBST( FFMPEG_AVFORMAT_CFLAGS )
AC_SUBST( FFMPEG_AVFORMAT_LIBS )
have_avformat=true
AC_DEFINE(HAVE_AVFORMAT, 1, [use avformat])],
[have_avformat=false])
if test x$have_avcodec != xtrue ; then
AC_MSG_ERROR([ FFmpeg not found. Get it from http://ffmpeg.sourceforge.net ] )
fi
dnl *********************************************************************
dnl Check for libdv
dnl (creates LIBDV_CFLAGS, LIBDV_LIBS; defines HAVE_LIBDV)
dnl *********************************************************************
have_libdv=false
if test x$with_libdv != xno ; then
PKG_CHECK_MODULES(LIBDV, [libdv >= 0.102],
[have_libdv=true
AC_DEFINE(SUPPORT_READ_DV2, 1, [libdv is present])],
[have_libdv=false])
fi
dnl *********************************************************************
dnl Check for mjpegtools
dnl (creates MJPEGYTOOLS_CFLAGS,
dnl *********************************************************************
have_mjpegtools=false
PKG_CHECK_MODULES(MJPEGTOOLS, [mjpegtools >= 1.6 ],
[
AC_SUBST( MJPEGTOOLS_CFLAGS )
AC_SUBST( MJPEGTOOLS_LIBS )
have_mjpegtools=true
AC_DEFINE(HAVE_MJPEGTOOLS, 1, [MJPEGTools installed])],
[have_mjpegtools=false])
if test x$have_mjpegtools != xtrue ; then
AC_MSG_ERROR([The MJPEGTools not found. Get it from http://mjpeg.sourceforge.net])
fi
dnl ********************************************************************
dnl Check to see if __progname is provided by the system
dnl ********************************************************************
AC_CACHE_CHECK([for __progname],
[mjt_cv_extern___progname],
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
[[extern char *__progname;
puts(__progname);]])],
[mjt_cv_extern___progname=yes],
[mjt_cv_extern___progname=no])])
if test x$mjt_cv_extern___progname = xyes ; then
AC_DEFINE(HAVE___PROGNAME, 1, [Is __progname defined by system?])
fi
dnl ********************************************************************
dnl Check for DGA (for v4l-conf)
dnl ********************************************************************
AC_SUBST(V4LCONF_LIBS)
AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension,
V4LCONF_LIBS="$X_LIBS -lXxf86dga"
AC_DEFINE(HAVE_LIBXXF86DGA,1, [libxf86dga is present]),,
$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
dnl ** Check for DPMS
dnl have_xdpms=no
dnl AC_CHECK_HEADERS(X11/extensions/dpms.h,
dnl AC_DEFINE(HAVE_XDPMS, 1, [If we have xdpms])],,)
dnl ********************************************************************
dnl Check for the GLIB library (for software playback)
dnl (defines SDL_CFLAGS and SDL_LIBS)
dnl ********************************************************************
have_glib=false
AM_PATH_GLIB(2.0,[
have_glib=true
AC_DEFINE(HAVE_GLIB,, [Glib library present])],,)
dnl *********************************************************************
dnl Check for the Jack Audio connection kit
dnl
have_jack=false
dnl dnl if test x$with_jack != xno ; then
dnl PKG_CHECK_MODULES(JACK, jack >= 0.98.1 , have_jack=true, have_jack=false)
dnl if test x$have_jack = xtrue ; then
dnl AC_SUBST(JACK_LIBS)
dnl AC_SUBST(JACK_CFLAGS)
dnl AC_DEFINE(HAVE_JACK,,[Compiling with support for Jack])
dnl else
dnl AC_MSG_WARN([Jack >= 0.981.1 is required, get it at http://jackit.sourceforge.net]);
dnl fi
dnlfi
dnl ********************************************************************
dnl Check for the libxml2 library (for saving/loading project files)
dnl
have_xml2=false
if test x$with_xml2 != xno; then
AM_PATH_XML2(2.5.4, [
have_xml2=true
AC_DEFINE(HAVE_XML2,,[Compiling with XML2])],,)
if test x$have_xml2 = xfalse ; then
AC_MSG_WARN([cannot find The XML C library for gnome])
fi
fi
AC_MSG_CHECKING(whether to compile in debugging information)
debugCFLAGS=""
if test "x$enable_debug" = "xyes" ; then
debugCFLAGS="-g "
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
AC_MSG_CHECKING(whether to compile in assertion checking)
if test "x$enable_strict" = "xyes" ; then
debugCFLAGS="-g -DSTRICT_CHECKING "
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
have_asm_nasm=false
have_asm_mmx=false
have_asm_sse=false
have_asm_sse2=false
have_asm_mmx2=false
have_asm_3dnow=false
have_cmov=false
have_x86cpu=false
have_x86_64cpu=false
have_altivec=false
have_mips=false
have_ppccpu=false
have_ps2=false
AC_MSG_CHECKING([Architecture])
case $host_cpu in
i[[3-7]]86)
AC_MSG_RESULT([x86])
AC_DEFINE(HAVE_X86CPU,, [Compiling for x86 architecture CPU])
AC_DEFINE(ARCH_X86,1,[Compiling for x86 architecture])
have_x86cpu=true
dnl Programs without PIC!
PROGRAM_NOPIC="-fno-PIC"
if test "x$enable_debug" != "xyes" ; then
dnl optimize if not debugging
CFLAGS="-fno-common -O2 -fomit-frame-pointer"
fi
dnl If the host is pentium, align on double word boundary
case $host_cpu in
i686)
CFLAGS="$CFLAGS -malign-double -mfpmath=sse"
;;
*)
;;
esac
;;
x86_64*)
AC_MSG_RESULT([x86-64])
AC_DEFINE(HAVE_X86_CPU,, [Compiling for x86-64 architecture CPU])
AC_DEFINE(ARCH_X86_64,1, [Compiling for x86-64 architecture CPU])
have_x86cpu=true
have_x86_64cpu=true
PROGRAM_NOPIC="-fno-PIC"
;;
powerpc | powerpc64)
AC_MSG_RESULT([powerpc])
AC_DEFINE(HAVE_PPCCPU,, [Compiling for PowerPC CPU])
AC_DEFINE(ARCH_PPC,,[Compiling for PowerPC])
have_ppccpu=true
case $host in
*-apple-darwin*)
PROGRAM_NOPIC="-mdynamic-no-pic" # dynamic-no-pic is an Apple gcc option
dnl PROGRAM_NOPIC="-bundle -flat_namespace -undefined suppress"
dnl CFLAGS="$CFLAGS -no-cpp-precomp"
;;
*)
PROGRAM_NOPIC=""
;;
esac
;;
mips | mipsel)
AC_MSG_RESULT([mips])
AC_DEFINE(ARCH_MIPS,,[Compiling for MIPS CPU])
AC_DEFINE(HAVE_MIPS,,[Compiling for MIPS CPU])
have_mips=true
AC_MSG_CHECKING([if we are compiling on playstation2 hardware])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
[[#include <linux/ps2/dev.h>
#include <linux/ps2/gs.h>
]])],
[have_ps2=true],
[have_ps2=false])
if test x$have_ps2 = xtrue ; then
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_PS2,,[Compile for playstation2])
else
AC_MSG_RESULT(no)
fi
;;
*)
AC_MSG_RESULT([unknown])
;;
esac
dnl This flag is used for PROGRAMS not SHARED LIBRARIES. PIC code is required
dnl for shared libraries but is slower than non-pic code. Compute bound
dnl programs such as yuvdenoise and y4mspatialfilter can use this flag by
dnl simply adding programname_CFLAGS=@PROGRAM_NOPIC@ to the Makefile.am
AC_SUBST(PROGRAM_NOPIC)
if test "$enable_simd_accel" != "false" -a "$enable_simd_accel" != "no"
then
if test x$have_x86cpu = xtrue
then
AC_PATH_PROGS(AS, nasm nasmw)
if test x$AS = x -o x$AS = x'"$AS"'; then
AC_MSG_NOTICE([NASM not found])
else
AC_DEFINE(HAVE_ASM_NASM,,[Compiling with nasm])
have_asm_nasm=true
ASFLAGS="-f elf"
AC_SUBST(ASFLAGS)
fi
dnl check for mmx
AC_CACHE_CHECK(for MMX on processor(s), ac_cv_flag_mxx, [
if grep "^flags.* mmx" /proc/cpuinfo > /dev/null; then
ac_cv_flag_mmx=yes
else
ac_cv_flag_mmx=no
fi
])
if test $ac_cv_flag_mmx = yes; then
AC_DEFINE(HAVE_ASM_MMX,,[Compiling in MMX support])
AC_DEFINE(HAVE_MMX,,[Compiling in MMX support in ffmpeg])
have_asm_mmx=true
fi
dnl check for sse
AC_CACHE_CHECK(for SSE on processor(s), ac_cv_flag_sse, [
if grep "^flags.* sse" /proc/cpuinfo > /dev/null; then
ac_cv_flag_sse=yes
else
ac_cv_flag_sse=no
fi
])
if test $ac_cv_flag_sse = yes; then
AC_DEFINE(HAVE_ASM_SSE,,[Compiling in SSE support])
AC_DEFINE(HAVE_SSE,,[Compiling in SSE support])
have_asm_sse=true
fi
dnl check for sse2
AC_CACHE_CHECK(for SSE2 on processor(s), ac_cv_flag_sse2, [
if grep "^flags.* sse2" /proc/cpuinfo > /dev/null; then
ac_cv_flag_sse2=yes
else
ac_cv_flag_sse2=no
fi
])
if test $ac_cv_flag_sse2 = yes; then
AC_DEFINE(HAVE_ASM_SSE2,,[Compiling in SSE2 support])
AC_DEFINE(HAVE_SSE2,,[Compiling in SSE2 support])
have_asm_sse2=true
fi
dnl check for 3dnow
AC_CACHE_CHECK(for 3DNOW on processor(s), ac_cv_flag_3dnow, [
if grep "^flags.* 3dnow" /proc/cpuinfo > /dev/null; then
ac_cv_flag_3dnow=yes
else
ac_cv_flag_3dnow=no
fi
])
if test $ac_cv_flag_3dnow = yes; then
AC_DEFINE(HAVE_ASM_3DNOW,,[Compiling in 3Dnow])
have_asm_3dnow=true
fi
dnl check for CMOV
AC_CACHE_CHECK(for CMOV on processor(s), ac_cv_flag_cmov, [
if grep "^flags.* cmov" /proc/cpuinfo > /dev/null; then
ac_cv_flag_cmov=yes
else
ac_cv_flag_cmov=no
fi
])
if test $ac_cv_flag_cmov = yes; then
AC_DEFINE(HAVE_CMOV,,[Compiling in CMOV])
have_cmov=true
fi
dnl check for MMX2
AC_CACHE_CHECK(for MMX2 on processor(s), ac_cv_flag_mmx2, [
if grep "^flags.* mmxext" /proc/cpuinfo > /dev/null; then
ac_cv_flag_mmx2=yes
else
ac_cv_flag_mmx2=no
fi
])
if test $ac_cv_flag_mmx2 = yes; then
AC_DEFINE(HAVE_ASM_MMX2,,[Compiling in MMX2])
AC_DEFINE(HAVE_MMX2,,[Compiling in MMX2])
have_asm_mmx2=true
fi
fi
if test x$have_ppccpu = xtrue
then
AC_MSG_CHECKING([compiler support for AltiVec])
cat > conftest.c <<EOF
#ifdef HAVE_ALTIVEC_H
#include <altivec.h>
#endif
int main() {
union { vector signed int v;
signed int i;
} vi;
vi.v = vec_splat_s32(1);
return vi.i;
}
EOF
ALTIVEC_CFLAGS=""
if $CC -o conftest conftest.c >/dev/null 2>&1; then
have_altivec=true
elif $CC $CFLAGS -faltivec -o conftest conftest.c >/dev/null 2>&1; then
# Mac OS X style
have_altivec=true
ALTIVEC_CFLAGS="-faltivec"
elif $CC $CFLAGS -fvec -o conftest conftest.c >/dev/null 2>&1; then
# Motorola style
have_altivec=true
ALTIVEC_CFLAGS="-fvec"
elif $CC $CFLAGS -DHAVE_ALTIVEC_H=1 -maltivec -mabi=altivec -o conftest conftest.c >/dev/null 2>&1; then
# gcc 3.1 style
have_altivec=true
ALTIVEC_CFLAGS="-DHAVE_ALTIVEC_H=1 -maltivec -mabi=altivec"
fi
rm -f conftest*;
if test x$have_altivec = xtrue
then
# add -O3 flag
ALTIVEC_CFLAGS="-O3 ${ALTIVEC_CFLAGS}"
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_ALTIVEC,,
[Inline PPC Altivec primitives available])
AC_SUBST(ALTIVEC_CFLAGS)
else
AC_MSG_RESULT(no)
fi
fi
fi
if test ! -r $srcdir/cpuinfo.sh; then
AC_MSG_ERROR([cpuinfo.sh script not found - do a cvs update])
fi
AC_MSG_CHECKING(sub-architecture settings)
chmod +x $srcdir/cpuinfo.sh
if test x$have_x86cpu = xtrue; then
ARCHFLAGS=`$srcdir/cpuinfo.sh x86`
else
if test x$have_ppccpu = xtrue; then
ARCHFLAGS=`$srcdir/cpuinfo.sh ppc`
else
ARCHFLAGS=`$srcdir/cpuinfo.sh mips`
fi
fi
dnl **********************************************************************
dnl All the conditional stuff for the Makefiles
AM_CONDITIONAL(HAVE_SDL, test x$have_sdl = xtrue )
AM_CONDITIONAL(HAVE_ASM_MMX, test x$have_asm_mmx = xtrue)
AM_CONDITIONAL(HAVE_X86CPU, test x$have_x86cpu = xtrue)
AM_CONDITIONAL(HAVE_PPCCPU, test x$have_ppccpu = xtrue)
AM_CONDITIONAL(HAVE_ALTIVEC, test x$have_altivec = xtrue)
AM_CONDITIONAL(HAVE_ASM_MMX2, test x$have_asm_mmx2 = xtrue)
AM_CONDITIONAL(HAVE_ASM_SSE, test x$have_asm_sse = xtrue)
AM_CONDITIONAL(HAVE_ASM_SSE2, test x$have_asm_sse2 = xtrue)
AM_CONDITIONAL(HAVE_ASM_NASM, test x$have_asm_nasm = xtrue)
AM_CONDITIONAL(HAVE_MMX, test x$have_asm_mmx = xtrue)
AM_CONDITIONAL(HAVE_SSE, test x$have_asm_sse = xtrue)
AM_CONDITIONAL(HAVE_SSE2, test x$have_asm_sse2 = xtrue)
AM_CONDITIONAL(HAVE_MMX2, test x$have_asm_mmx2 = xtrue)
AM_CONDITIONAL(HAVE_XML2, test x$have_xml2 = xtrue)
AM_CONDITIONAL(HAVE_JACK, test x$have_jack = xtrue)
AM_CONDITIONAL(HAVE_V4L, test x$have_v4l = xtrue)
AM_CONDITIONAL(SUPPORT_READ_DV2, test x$have_libdv = xtrue)
AM_CONDITIONAL(HAVE_DL_DLOPEN, test x$have_dl_dlopen = xtrue)
dnl *********************************************************************
dnl Check for what warnings we want gcc to use and adjust the CFLAGS
dnl as needed. This only works for GCC.
dnl We do this last as it can screw up library detection etc...
if test "x${GCC}" != "xyes" ; then
enable_compile_warnings=no
fi
AC_MSG_CHECKING(what warning flags to pass to the C compiler)
warnCFLAGS=
warnCXXFLAGS=
if test "x$enable_compile_warnings" != "xno" ; then
if test "x$GCC" = "xyes" ; then
case "$CFLAGS" in
*-Wall*) ;;
*) warnCFLAGS="-Wall -Wunused" ;;
esac
if test "x$enable_compile_warnings" = "xyes" ; then
warnCFLAGS="$warnCFLAGS -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wcast-align -Wwrite-strings -Wcast-qual"
warnCXXFLAGS="$warnCXXFLAGS -Wmissing-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings -Wcast-qual"
fi
if test "x$enable_warnings_as_errors" = "xyes" ; then
warnCFLAGS="$warnCFLAGS -Werror"
warnCXXFLAGS="$warnCXXFLAGS -Werror"
fi
fi
fi
AC_MSG_RESULT($warnCFLAGS)
AC_MSG_RESULT($warnCXXFLAGS)
CFLAGS="$ARCHFLAGS $CFLAGS -std=c99"
CXXFLAGS="$ARCHFLAGS $CXXFLAGS"
if test "x$cflags_set" != "xyes" ; then
if test "x$enable_debug" = "xyes" ; then
CFLAGS="$debugCFLAGS $warnCFLAGS -std=c99"
else
CFLAGS="$CFLAGS $warnCFLAGS -std=c99"
fi
CXXFLAGS="$CXXFLAGS $warnCXXFLAGS"
cflags_set=yes
fi
if test x"$with_extra_cflags" != "x"; then
CFLAGS="$CFLAGS $with_extra_cflags"
CXXFLAGS="$CXXFLAGS $with_extra_cflags"
fi
AC_DEFINE(VEEJAY,,[Building veejay])
dnl **********************************************************************
dnl Output a Makefile or two and the lib/header descriptor script
dnl
AC_CONFIG_FILES([
Makefile
libOSC/Makefile
libhash/Makefile
libvjmsg/Makefile
libvevo/Makefile
libvjmem/Makefile
libplugger/Makefile
libvjnet/Makefile
libyuv/Makefile
libel/Makefile
bio2jack/Makefile
vevosample/Makefile
veejay/Makefile
man/Makefile
veejay-config
veejay.pc
])
AC_OUTPUT
AC_DEFINE(VERSION, ${VERSION})
AC_MSG_NOTICE([])
AC_MSG_NOTICE([ Veejay ${VERSION} build configuration :])
AC_MSG_NOTICE([])
AC_MSG_NOTICE([ Compiler flags: $CFLAGS])
if test "x$enable_strict" = "xyes" ; then
AC_MSG_NOTICE([Strict checking enabled])
fi
if test "x$enable_debug" = "xyes" ; then
AC_MSG_NOTICE([Debugging symbols enabled])
fi
AC_MSG_NOTICE([])
AC_MSG_NOTICE([ Architecture: ${host_cpu} ])
AC_MSG_NOTICE([])
if test "$have_x86cpu" = "true" ; then
AC_MSG_NOTICE([ x86 ])
AC_MSG_NOTICE([ MMX enabled : ${have_asm_mmx}])
AC_MSG_NOTICE([ MMX2 enabled : ${have_asm_mmx2}])
AC_MSG_NOTICE([ SSE enabled : ${have_asm_sse}])
AC_MSG_NOTICE([ SSE2 enabled : ${have_asm_sse2}])
AC_MSG_NOTICE([ 3DNOW enabled : ${have_asm_3dnow}])
AC_MSG_NOTICE([ CMOV enabled : ${have_cmov}])
AC_MSG_NOTICE([ Nasm enabled : ${have_asm_nasm}])
fi
if test "$have_ppccpu" = "true" ; then
AC_MSG_NOTICE([ ppc])
AC_MSG_NOTICE([ AltiVec enabled : ${have_altivec}])
fi
if test "$have_mips" = "true" ; then
AC_MSG_NOTICE([ mips])
AC_MSG_NOTICE([ PS/2 enabled : ${have_ps2}])
fi
AC_MSG_NOTICE([])
if test "$have_linux" = "true" ; then
AC_MSG_NOTICE([ Platform: Linux])
fi
if test "$have_darwin" = "true" ; then
AC_MSG_NOTICE([ Platform: Darwin])
AC_MSG_NOTICE([ Good luck! You can be the first! ])
fi
AC_MSG_NOTICE([])
AC_MSG_NOTICE([ Required dependencies:])
AC_MSG_NOTICE([ - POSIX Threads (pthread) : ${have_pthread}])
AC_MSG_NOTICE([ - MJPEGTools : ${have_mjpegtools}])
AC_MSG_NOTICE([ - SDL Video : ${have_sdl}])
AC_MSG_NOTICE([ Optional dependencies])
AC_MSG_NOTICE([ - video4linux : ${have_v4l}])
AC_MSG_NOTICE([ - libDV (digital video) support : ${have_libdv} ])
AC_MSG_NOTICE([ - Jack : ${have_jack}])
AC_MSG_NOTICE([ - xml c library for gnome : ${have_xml2}])

326
veejay-ng/cpuinfo.sh Executable file
View File

@@ -0,0 +1,326 @@
#!/bin/sh
if test x"$CC" = x; then
CC=gcc
fi
if test $# -ne 1; then
echo "Please give the arch (ppc or x86) as an argument!" 1>&2
exit 1
fi
if test `uname -s` = Darwin; then
IsDarwin=yes
else
IsDarwin=no
fi
target=$1
cc_version=`$CC -dumpversion`
_cc_major=`echo $cc_version | cut -d'.' -f1`
_cc_minor=`echo $cc_version | cut -d'.' -f2`
if test $_cc_major -ge 4; then
_opt_mcpu="-mtune"
else
_opt_mcpu="-mcpu"
fi
do_cc()
{
$CC -o conftest conftest.c $@ >/dev/null 2>&1
}
extcheck()
{
cat > conftest.c <<EOF
#include <signal.h>
void catch() { exit(1); }
int main(void){
signal(SIGILL, catch);
__asm__ __volatile__ ("$1":::"memory");
exit(0);
}
EOF
do_cc
if test -x ./conftest; then
./conftest
if test $? -ne 0; then
return 1
fi
return 0
else
return 1
fi
}
do_x86()
{
if test -r /proc/cpuinfo; then
_cpuinfo="cat /proc/cpuinfo"
else
$CC -o cpuinfo utils/cpuinfo.c
_cpuinfo="./cpuinfo"
fi
# Cpu determination logic adapted from the MPlayer configure script.
pname=`$_cpuinfo | grep 'model name' | cut -d ':' -f 2 | head -n 1`
pvendor=`$_cpuinfo | grep 'vendor_id' | cut -d':' -f2 | cut -d' ' -f2 | head -n 1`
pfamily=`$_cpuinfo | grep 'cpu family' | cut -d':' -f2 | cut -d' ' -f2 | head -n 1`
pmodel=`$_cpuinfo | grep -v 'model name' | grep 'model' | cut -d':' -f2 | cut -d' ' -f2 | head -n 1`
pstep=`$_cpuinfo | grep 'stepping' | cut -d':' -f2 | cut -d' ' -f2 | head -n 1`
pparam=`$_cpuinfo | grep 'features' | cut -d':' -f2 | head -n 1`
if test -z "$pparam" ; then
pparam=`$_cpuinfo | grep 'flags' | cut -d ':' -f 2 | head -n 1`
fi
_mmx=no
_3dnow=no
_3dnowex=no
_mmx2=no
_sse=no
_sse2=no
_mtrr=no
for i in $pparam ; do
case "$i" in
3dnow) _3dnow=yes ;;
3dnowext) _3dnow=yes _3dnowex=yes ;;
mmx) _mmx=yes ;;
mmxext) _mmx2=yes ;;
mtrr|k6_mtrr|cyrix_arr) _mtrr=yes ;;
xmm|sse|kni) _sse=yes _mmx2=yes ;;
sse2) _sse2=yes ;;
esac
done
case "$pvendor" in
AuthenticAMD)
case "$pfamily" in
3)proc=i386
;;
4) proc=i486
;;
5) iproc=586
# models are: K5/SSA5 K5 K5 K5 ? ? K6 K6 K6-2 K6-3
# K6 model 13 are the K6-2+ and K6-III+
if test "$pmodel" -eq 9 -o "$pmodel" -eq 13; then
proc=k6-3
elif test "$pmodel" -ge 8; then
proc=k6-2
elif test "$pmodel" -ge 6; then
proc=k6
else
proc=i586
fi
;;
6) iproc=686
if test "$pmodel" -ge 7; then
proc=athlon-4
elif test "$pmodel" -ge 6; then
if test "$_sse" = yes && test "$pstep" -ge 2; then
proc=athlon-xp
else
proc=athlon-4
fi
elif test "$pmodel" -ge 4; then
proc=athlon-tbird
else
proc=athlon
fi
;;
15)
# Despite what the gcc into says 'athlon64' is not accepted as
# synonym for 'k8'
proc=k8
;;
*) proc=athlon-xp
;;
esac
;;
GenuineIntel)
case "$pfamily" in
3) proc=i386
;;
4) proc=i486
;;
5) iproc=586
if test "$pmodel" -eq 4 || test "$pmodel" -eq 8; then
proc=pentium-mmx # 4 is desktop, 8 is mobile
else
proc=i586
fi
;;
6) iproc=686
if test "$pmodel" -ge 7; then
proc=pentium3
elif test "$pmodel" -ge 3; then
proc=pentium2
else
proc=i686
fi
;;
15) proc=pentium4
;;
*) proc=pentium4
;;
esac
;;
unknown)
case "$pfamily" in
3) proc=i386
;;
4) proc=i486
;;
*) proc=i586
;;
esac
;;
*)
proc=i586
;;
esac
# check that gcc supports our CPU, if not, fall back to earlier ones
cat > conftest.c << EOF
int main(void) { return 0; }
EOF
if test "$proc" = "athlon64" ; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=athlon-xp
fi
if test "$proc" = "athlon-xp" || test "$proc" = "athlon-4" || test "$proc" = "athlon-tbird"; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=athlon
fi
if test "$proc" = "k6-3" || test "$proc" = "k6-2"; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=k6
fi
if test "$proc" = "k6"; then
do_cc -march=$proc $_opt_mcpu=$proc
if test $? -ne 0; then
if do_cc -march=i586 $_opt_mcpu=i686; then
proc=i586-i686
else
proc=i586
fi
fi
fi
if test "$proc" = "pentium4" || test "$proc" = "pentium3" || test "$proc" = "pentium2" || test "$proc" = "athlon"; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=i686
fi
if test "$proc" = "i686" || test "$proc" = "pentium-mmx"; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=i586
fi
if test "$proc" = "i586" ; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=i486
fi
if test "$proc" = "i486" ; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=i386
fi
if test "$proc" = "i386" ; then
do_cc -march=$proc $_opt_mcpu=$proc || proc=error
fi
if test "$proc" = "error" ; then
echo "Your $_cc does not even support \"i386\" for '-march' and $_opt_mcpu."
_mcpu=""
_march=""
elif test "$proc" = "i586-i686"; then
_march="-march=i586"
_mcpu="$_opt_mcpu=i686"
else
_march="-march=$proc"
_mcpu="$_opt_mcpu=$proc"
fi
if test $_cc_major -ge 3; then
extcheck "xorps %%xmm0, %%xmm0" || _gcc3_ext="$_gcc3_ext -mno-sse"
extcheck "xorpd %%xmm0, %%xmm0" || _gcc3_ext="$_gcc3_ext -mno-sse2"
if test x"$_gcc3_ext" != "x"; then
# if we had to disable sse/sse2 because the active kernel does not
# support this instruction set extension, we also have to tell
# gcc3 to not generate sse/sse2 instructions for normal C code
cat > conftest.c << EOF
int main(void) { return 0; }
EOF
do_cc $_march $_gcc3_ext && _march="$_march $_gcc3_ext"
fi
fi
echo $_march $_mcpu
rm -f conftest.c conftest cpuinfo
return 0
}
do_ppc()
{
# Linux on a PPC has /proc/info
# Darwin (OS/X) has the hostinfo command
# If neither of those we have no idea what to do - so do nothing.
if test -r /proc/cpuinfo; then
proc=`grep cpu /proc/cpuinfo | cut -d':' -f2 | cut -d',' -f1 | cut -b 2- | head -n 1`
elif test $IsDarwin = yes; then
proc=`hostinfo | grep "Processor type" | cut -f3 -d' ' | sed 's/ppc//'`
else
return 0
fi
case "$proc" in
601) _march="$_opt_mcpu=601" _mcpu='-mtune=601'
;;
603) _march="$_opt_mcpu=603" _mcpu='-mtune=603'
;;
603e|603ev) _march="$_opt_mcpu=603e" _mcpu='-mtune=603e'
;;
604|604e|604r|604ev) _march="$_opt_mcpu=604" _mcpu='-mtune=604'
;;
740|740/750|745/755) _march="$_opt_mcpu=740" _mcpu='-mtune=740'
;;
750|750CX) _march="$_opt_mcpu=750" _mcpu='-mtune=750'
;;
*) ;;
esac
# gcc 3.1(.1) and up supports 7400 and 7450
if test "$_cc_major" -ge "3" && test "$_cc_minor" -ge "1" || test "$_cc_major" -ge "4"; then
case "$proc" in
7400*|7410*) _march="$_opt_mcpu=7400" _mcpu='-mtune=7400' ;;
7450*|7455*) _march="$_opt_mcpu=7450" _mcpu='-mtune=7450' ;;
*) ;;
esac
fi
# gcc 3.2 and up supports 970
if test "$_cc_major" -ge "3" && test "$_cc_minor" -ge "3" || test "$_cc_major" -ge "4"; then
case "$proc" in
970*) if test $IsDarwin = yes; then
_march="$_opt_mcpu=G5 -mpowerpc64 -mpowerpc-gpopt -falign-loops=16 -force_cpusubtype_ALL" _mcpu='-mtune=G5'
else
_march="$_opt_mcpu=970" _mcpu='-mtune=970'
fi
;;
*) ;;
esac
fi
echo $_march $_mcpu
return 0
}
#
# The script that runs the various functions above
#
if test $target = x86; then
do_x86
elif test $target = ppc; then
do_ppc
fi

529
veejay-ng/depcomp Executable file
View File

@@ -0,0 +1,529 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
scriptversion=2005-02-09.22
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
Run PROGRAMS ARGS to compile a file, generating dependencies
as side-effects.
Environment variables:
depmode Dependency tracking mode.
source Source file read by `PROGRAMS ARGS'.
object Object file output by `PROGRAMS ARGS'.
DEPDIR directory where to store dependencies.
depfile Dependency file to output.
tmpdepfile Temporary file to use when outputing dependencies.
libtool Whether libtool is used (yes/no).
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
exit $?
;;
esac
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
depfile=${depfile-`echo "$object" |
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. In older versions, this file always lives in the
# current directory. Also, the AIX compiler puts `$object:' at the
# start of each line; $object doesn't have directory information.
# Version 6 uses the directory in both cases.
stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test -f "$tmpdepfile"; then :
else
stripped=`echo "$stripped" | sed 's,^.*/,,'`
tmpdepfile="$stripped.u"
fi
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
outname="$stripped.o"
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
icc)
# Intel's C compiler understands `-MD -MF file'. However on
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
# ICC 7.0 will fill foo.d with something like
# foo.o: sub/foo.c
# foo.o: sub/foo.h
# which is wrong. We want:
# sub/foo.o: sub/foo.c
# sub/foo.o: sub/foo.h
# sub/foo.c:
# sub/foo.h:
# ICC 7.1 will output
# foo.o: sub/foo.c sub/foo.h
# and will wrap long lines using \ :
# foo.o: sub/foo.c ... \
# sub/foo.h ... \
# ...
"$@" -MD -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
# Each line is of the form `foo.o: dependent.h',
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
# Some versions of the HPUX 10.20 sed can't process this invocation
# correctly. Breaking it into two sed invocations is a workaround.
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
# With Tru64 cc, shared objects can also be used to make a
# static library. This mecanism is used in libtool 1.4 series to
# handle both shared and static libraries in a single compilation.
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
#
# With libtool 1.5 this exception was removed, and libtool now
# generates 2 separate objects for the 2 libraries. These two
# compilations output dependencies in in $dir.libs/$base.o.d and
# in $dir$base.o.d. We have to check for both files, because
# one of the two compilations can be disabled. We should prefer
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
# automatically cleaned when .libs/ is deleted, while ignoring
# the former would cause a distcleancheck panic.
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
tmpdepfile2=$dir$base.o.d # libtool 1.5
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
tmpdepfile1=$dir$base.o.d
tmpdepfile2=$dir$base.d
tmpdepfile3=$dir$base.d
tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
do
test -f "$tmpdepfile" && break
done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
# Require at least two characters before searching for `:'
# in the target name. This is to cope with DOS-style filenames:
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
"$@" $dashmflag |
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# Remove any Libtool call
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
# Strip any option that makedepend may not understand. Remove
# the object too, otherwise makedepend will parse it as a source file.
-*|$object)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the preprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

323
veejay-ng/install-sh Executable file
View File

@@ -0,0 +1,323 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2005-02-02.21
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
chmodcmd="$chmodprog 0755"
chowncmd=
chgrpcmd=
stripcmd=
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=
dst=
dir_arg=
dstarg=
no_target_directory=
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
-c (ignored)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
--help display this help and exit.
--version display version info and exit.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
"
while test -n "$1"; do
case $1 in
-c) shift
continue;;
-d) dir_arg=true
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
--help) echo "$usage"; exit $?;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-s) stripcmd=$stripprog
shift
continue;;
-t) dstarg=$2
shift
shift
continue;;
-T) no_target_directory=true
shift
continue;;
--version) echo "$0 $scriptversion"; exit $?;;
*) # When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
test -n "$dir_arg$dstarg" && break
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dstarg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dstarg"
shift # fnord
fi
shift # arg
dstarg=$arg
done
break;;
esac
done
if test -z "$1"; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call `install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src ;;
esac
if test -n "$dir_arg"; then
dst=$src
src=
if test -d "$dst"; then
mkdircmd=:
chmodcmd=
else
mkdircmd=$mkdirprog
fi
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dstarg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dstarg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst ;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
echo "$0: $dstarg: Is a directory" >&2
exit 1
fi
dst=$dst/`basename "$src"`
fi
fi
# This sed command emulates the dirname command.
dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# Skip lots of stat calls in the usual case.
if test ! -d "$dstdir"; then
defaultIFS='
'
IFS="${IFS-$defaultIFS}"
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
shift
IFS=$oIFS
pathcomp=
while test $# -ne 0 ; do
pathcomp=$pathcomp$1
shift
if test ! -d "$pathcomp"; then
$mkdirprog "$pathcomp"
# mkdir can fail with a `File exist' error in case several
# install-sh are creating the directory concurrently. This
# is OK.
test -d "$pathcomp" || exit
fi
pathcomp=$pathcomp/
done
fi
if test -n "$dir_arg"; then
$doit $mkdircmd "$dst" \
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
else
dstfile=`basename "$dst"`
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
trap '(exit $?); exit' 1 2 13 15
# Copy the file name to the temp name.
$doit $cpprog "$src" "$dsttmp" &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
# Now rename the file to the real destination.
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
|| {
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
if test -f "$dstdir/$dstfile"; then
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|| {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
(exit 1); exit 1
}
else
:
fi
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
}
}
fi || { (exit 1); exit 1; }
done
# The final little trick to "correctly" pass the exit status to the exit trap.
{
(exit 0); exit 0
}
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# End:

1
veejay-ng/libOSC/AUTHORS Normal file
View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,15 @@
INCLUDES = -I$(top_srcdir)/libOSC -I$(includedir)
OSC_LIB_FILE = libOSC.la
noinst_LTLIBRARIES = $(OSC_LIB_FILE)
libOSC_la_CFLAGS = $(AM_CFLAGS)
libOSC_la_SOURCES = OSC-address-space.c \
OSC-callbacklist.c \
OSC-drop.c \
OSC-pattern-match.c \
OSC-priority-queue.c \
OSC-receive.c \
OSC-string-help.c \
OSC-common.c \
OSC-timetag.c \
NetworkReturnAddress.c

View File

@@ -0,0 +1,596 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
SOURCES = $(libOSC_la_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = libOSC
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in AUTHORS NEWS
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libOSC_la_LIBADD =
am_libOSC_la_OBJECTS = libOSC_la-OSC-address-space.lo \
libOSC_la-OSC-callbacklist.lo libOSC_la-OSC-drop.lo \
libOSC_la-OSC-pattern-match.lo libOSC_la-OSC-priority-queue.lo \
libOSC_la-OSC-receive.lo libOSC_la-OSC-string-help.lo \
libOSC_la-OSC-common.lo libOSC_la-OSC-timetag.lo \
libOSC_la-NetworkReturnAddress.lo
libOSC_la_OBJECTS = $(am_libOSC_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libOSC_la_SOURCES)
DIST_SOURCES = $(libOSC_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALTIVEC_CFLAGS = @ALTIVEC_CFLAGS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_AVCODEC_CFLAGS = @FFMPEG_AVCODEC_CFLAGS@
FFMPEG_AVCODEC_LIBS = @FFMPEG_AVCODEC_LIBS@
FFMPEG_AVFORMAT_CFLAGS = @FFMPEG_AVFORMAT_CFLAGS@
FFMPEG_AVFORMAT_LIBS = @FFMPEG_AVFORMAT_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@
GLIB_LIBS = @GLIB_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
HAVE_ALTIVEC_FALSE = @HAVE_ALTIVEC_FALSE@
HAVE_ALTIVEC_TRUE = @HAVE_ALTIVEC_TRUE@
HAVE_ASM_MMX2_FALSE = @HAVE_ASM_MMX2_FALSE@
HAVE_ASM_MMX2_TRUE = @HAVE_ASM_MMX2_TRUE@
HAVE_ASM_MMX_FALSE = @HAVE_ASM_MMX_FALSE@
HAVE_ASM_MMX_TRUE = @HAVE_ASM_MMX_TRUE@
HAVE_ASM_NASM_FALSE = @HAVE_ASM_NASM_FALSE@
HAVE_ASM_NASM_TRUE = @HAVE_ASM_NASM_TRUE@
HAVE_ASM_SSE2_FALSE = @HAVE_ASM_SSE2_FALSE@
HAVE_ASM_SSE2_TRUE = @HAVE_ASM_SSE2_TRUE@
HAVE_ASM_SSE_FALSE = @HAVE_ASM_SSE_FALSE@
HAVE_ASM_SSE_TRUE = @HAVE_ASM_SSE_TRUE@
HAVE_DL_DLOPEN_FALSE = @HAVE_DL_DLOPEN_FALSE@
HAVE_DL_DLOPEN_TRUE = @HAVE_DL_DLOPEN_TRUE@
HAVE_JACK_FALSE = @HAVE_JACK_FALSE@
HAVE_JACK_TRUE = @HAVE_JACK_TRUE@
HAVE_MMX2_FALSE = @HAVE_MMX2_FALSE@
HAVE_MMX2_TRUE = @HAVE_MMX2_TRUE@
HAVE_MMX_FALSE = @HAVE_MMX_FALSE@
HAVE_MMX_TRUE = @HAVE_MMX_TRUE@
HAVE_PPCCPU_FALSE = @HAVE_PPCCPU_FALSE@
HAVE_PPCCPU_TRUE = @HAVE_PPCCPU_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SSE2_FALSE = @HAVE_SSE2_FALSE@
HAVE_SSE2_TRUE = @HAVE_SSE2_TRUE@
HAVE_SSE_FALSE = @HAVE_SSE_FALSE@
HAVE_SSE_TRUE = @HAVE_SSE_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_X86CPU_FALSE = @HAVE_X86CPU_FALSE@
HAVE_X86CPU_TRUE = @HAVE_X86CPU_TRUE@
HAVE_XML2_FALSE = @HAVE_XML2_FALSE@
HAVE_XML2_TRUE = @HAVE_XML2_TRUE@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
LIBGETOPT_LIB = @LIBGETOPT_LIB@
LIBM_LIBS = @LIBM_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_RELEASE = @LT_RELEASE@
LT_REVISION = @LT_REVISION@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MJPEGTOOLS_CFLAGS = @MJPEGTOOLS_CFLAGS@
MJPEGTOOLS_LIBS = @MJPEGTOOLS_LIBS@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PROGRAM_NOPIC = @PROGRAM_NOPIC@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUPPORT_READ_DV2_FALSE = @SUPPORT_READ_DV2_FALSE@
SUPPORT_READ_DV2_TRUE = @SUPPORT_READ_DV2_TRUE@
V4LCONF_LIBS = @V4LCONF_LIBS@
VERSION = @VERSION@
XML2_CONFIG = @XML2_CONFIG@
XML_CPPFLAGS = @XML_CPPFLAGS@
XML_LIBS = @XML_LIBS@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
INCLUDES = -I$(top_srcdir)/libOSC -I$(includedir)
OSC_LIB_FILE = libOSC.la
noinst_LTLIBRARIES = $(OSC_LIB_FILE)
libOSC_la_CFLAGS = $(AM_CFLAGS)
libOSC_la_SOURCES = OSC-address-space.c \
OSC-callbacklist.c \
OSC-drop.c \
OSC-pattern-match.c \
OSC-priority-queue.c \
OSC-receive.c \
OSC-string-help.c \
OSC-common.c \
OSC-timetag.c \
NetworkReturnAddress.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libOSC/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu libOSC/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libOSC.la: $(libOSC_la_OBJECTS) $(libOSC_la_DEPENDENCIES)
$(LINK) $(libOSC_la_LDFLAGS) $(libOSC_la_OBJECTS) $(libOSC_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-NetworkReturnAddress.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-address-space.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-callbacklist.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-common.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-drop.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-pattern-match.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-priority-queue.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-receive.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-string-help.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libOSC_la-OSC-timetag.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
libOSC_la-OSC-address-space.lo: OSC-address-space.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-address-space.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-address-space.Tpo" -c -o libOSC_la-OSC-address-space.lo `test -f 'OSC-address-space.c' || echo '$(srcdir)/'`OSC-address-space.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-address-space.Tpo" "$(DEPDIR)/libOSC_la-OSC-address-space.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-address-space.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-address-space.c' object='libOSC_la-OSC-address-space.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-address-space.lo `test -f 'OSC-address-space.c' || echo '$(srcdir)/'`OSC-address-space.c
libOSC_la-OSC-callbacklist.lo: OSC-callbacklist.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-callbacklist.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-callbacklist.Tpo" -c -o libOSC_la-OSC-callbacklist.lo `test -f 'OSC-callbacklist.c' || echo '$(srcdir)/'`OSC-callbacklist.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-callbacklist.Tpo" "$(DEPDIR)/libOSC_la-OSC-callbacklist.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-callbacklist.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-callbacklist.c' object='libOSC_la-OSC-callbacklist.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-callbacklist.lo `test -f 'OSC-callbacklist.c' || echo '$(srcdir)/'`OSC-callbacklist.c
libOSC_la-OSC-drop.lo: OSC-drop.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-drop.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-drop.Tpo" -c -o libOSC_la-OSC-drop.lo `test -f 'OSC-drop.c' || echo '$(srcdir)/'`OSC-drop.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-drop.Tpo" "$(DEPDIR)/libOSC_la-OSC-drop.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-drop.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-drop.c' object='libOSC_la-OSC-drop.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-drop.lo `test -f 'OSC-drop.c' || echo '$(srcdir)/'`OSC-drop.c
libOSC_la-OSC-pattern-match.lo: OSC-pattern-match.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-pattern-match.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-pattern-match.Tpo" -c -o libOSC_la-OSC-pattern-match.lo `test -f 'OSC-pattern-match.c' || echo '$(srcdir)/'`OSC-pattern-match.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-pattern-match.Tpo" "$(DEPDIR)/libOSC_la-OSC-pattern-match.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-pattern-match.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-pattern-match.c' object='libOSC_la-OSC-pattern-match.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-pattern-match.lo `test -f 'OSC-pattern-match.c' || echo '$(srcdir)/'`OSC-pattern-match.c
libOSC_la-OSC-priority-queue.lo: OSC-priority-queue.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-priority-queue.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-priority-queue.Tpo" -c -o libOSC_la-OSC-priority-queue.lo `test -f 'OSC-priority-queue.c' || echo '$(srcdir)/'`OSC-priority-queue.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-priority-queue.Tpo" "$(DEPDIR)/libOSC_la-OSC-priority-queue.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-priority-queue.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-priority-queue.c' object='libOSC_la-OSC-priority-queue.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-priority-queue.lo `test -f 'OSC-priority-queue.c' || echo '$(srcdir)/'`OSC-priority-queue.c
libOSC_la-OSC-receive.lo: OSC-receive.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-receive.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-receive.Tpo" -c -o libOSC_la-OSC-receive.lo `test -f 'OSC-receive.c' || echo '$(srcdir)/'`OSC-receive.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-receive.Tpo" "$(DEPDIR)/libOSC_la-OSC-receive.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-receive.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-receive.c' object='libOSC_la-OSC-receive.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-receive.lo `test -f 'OSC-receive.c' || echo '$(srcdir)/'`OSC-receive.c
libOSC_la-OSC-string-help.lo: OSC-string-help.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-string-help.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-string-help.Tpo" -c -o libOSC_la-OSC-string-help.lo `test -f 'OSC-string-help.c' || echo '$(srcdir)/'`OSC-string-help.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-string-help.Tpo" "$(DEPDIR)/libOSC_la-OSC-string-help.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-string-help.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-string-help.c' object='libOSC_la-OSC-string-help.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-string-help.lo `test -f 'OSC-string-help.c' || echo '$(srcdir)/'`OSC-string-help.c
libOSC_la-OSC-common.lo: OSC-common.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-common.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-common.Tpo" -c -o libOSC_la-OSC-common.lo `test -f 'OSC-common.c' || echo '$(srcdir)/'`OSC-common.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-common.Tpo" "$(DEPDIR)/libOSC_la-OSC-common.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-common.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-common.c' object='libOSC_la-OSC-common.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-common.lo `test -f 'OSC-common.c' || echo '$(srcdir)/'`OSC-common.c
libOSC_la-OSC-timetag.lo: OSC-timetag.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-OSC-timetag.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-OSC-timetag.Tpo" -c -o libOSC_la-OSC-timetag.lo `test -f 'OSC-timetag.c' || echo '$(srcdir)/'`OSC-timetag.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-OSC-timetag.Tpo" "$(DEPDIR)/libOSC_la-OSC-timetag.Plo"; else rm -f "$(DEPDIR)/libOSC_la-OSC-timetag.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='OSC-timetag.c' object='libOSC_la-OSC-timetag.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-OSC-timetag.lo `test -f 'OSC-timetag.c' || echo '$(srcdir)/'`OSC-timetag.c
libOSC_la-NetworkReturnAddress.lo: NetworkReturnAddress.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -MT libOSC_la-NetworkReturnAddress.lo -MD -MP -MF "$(DEPDIR)/libOSC_la-NetworkReturnAddress.Tpo" -c -o libOSC_la-NetworkReturnAddress.lo `test -f 'NetworkReturnAddress.c' || echo '$(srcdir)/'`NetworkReturnAddress.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libOSC_la-NetworkReturnAddress.Tpo" "$(DEPDIR)/libOSC_la-NetworkReturnAddress.Plo"; else rm -f "$(DEPDIR)/libOSC_la-NetworkReturnAddress.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='NetworkReturnAddress.c' object='libOSC_la-NetworkReturnAddress.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libOSC_la_CFLAGS) $(CFLAGS) -c -o libOSC_la-NetworkReturnAddress.lo `test -f 'NetworkReturnAddress.c' || echo '$(srcdir)/'`NetworkReturnAddress.c
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

0
veejay-ng/libOSC/NEWS Normal file
View File

View File

@@ -0,0 +1,58 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
NetworkReturnAddress.c
This version implements UDP return addresses on SGI
Matt Wright,
9/11/98
*/
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-timetag.h>
#include <libOSC/OSC-address-space.h>
#include <libOSC/NetworkReturnAddress.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <libOSC/NetworkUDP.h>
int SizeOfNetworkReturnAddress(void) {
return sizeof(struct NetworkReturnAddressStruct);
}
Boolean NetworkSendReturnMessage(NetworkReturnAddressPtr addr,
int n,
void *buf) {
if (addr == 0) return FALSE;
return n == sendto(addr->sockfd, buf, n, 0, &(addr->cl_addr), addr->clilen);
}

View File

@@ -0,0 +1,52 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
NetworkReturnAddress.h
API that the OSC Kit uses to deal with network return addresses. You will
fill in parts of this file and write NetworkReturnAddress.c to implement
this API via whatever network services you use.
NB: This API is the only interface the Kit uses for dealing with network
addresses, but of course the part of the application that accepts incoming
packets needs to know about network return addresses so it can fill in the
correct return address when it receives a packet.
Matt Wright,
6/3/98
*/
/* Return sizeof(struct NetworkReturnAddressStruct). */
int SizeOfNetworkReturnAddress(void);
/* Send a packet back to the client, or do nothing if addr==0 */
Boolean NetworkSendReturnMessage(NetworkReturnAddressPtr addr,
int n,
void *buf);

View File

@@ -0,0 +1,7 @@
#include <netinet/in.h>
struct NetworkReturnAddressStruct {
struct sockaddr_in cl_addr;
int clilen;
int sockfd;
};

View File

@@ -0,0 +1,599 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC-address-space.c
Matt Wright, 3/16/98
*/
#include <config.h>
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-timetag.h>
#include <libOSC/OSC-address-space.h>
#include <string.h>
#include <stdio.h>
#define MAX_ALIASES_PER_CONTAINER 3
#define MAX_CHILDREN_PER_CONTAINER 20
#define MAX_METHODS_PER_CONTAINER 30
#define BASE_NUM_TO_REALLOCATE 10
struct OSCContainerStruct {
struct OSCContainerStruct *parent;
int numChildren;
Name childrenNames[MAX_CHILDREN_PER_CONTAINER];
struct OSCContainerStruct *children[MAX_CHILDREN_PER_CONTAINER];
int numMethods;
Name methodNames[MAX_METHODS_PER_CONTAINER];
OSCMethod methods[MAX_METHODS_PER_CONTAINER];
struct OSCContainerQueryResponseInfoStruct QueryResponseInfo;
struct OSCContainerStruct *next;
};
struct OSCMethodStruct {
methodCallback callback;
void *context;
struct OSCMethodQueryResponseInfoStruct QueryResponseInfo;
struct OSCMethodStruct *next;
};
/* Globals */
static Boolean Initialized = FALSE;
static OSCcontainer OSCTopLevelContainer;
static OSCcontainer freeContainers; /* Linked list via next field. */
static OSCMethod freeMethods; /* Linked list via next field. */
static void *(*RealTimeMemoryAllocator)(int numBytes);
/* Note: The free list of containers should actually be a "free forest", so
that all the subcontainers recursively under a freed container are
automatically freed.
FREE: just stick the freed subtree on the front of the list.
ALLOC: Take all the children of the first container on the list and
insert them in the free list, then return that first container.
*/
/************************ Initialization and Memory ************************/
static void MakeFreeContainersList(int n) {
int i;
for (i = 0; i+1 < n; ++i) {
freeContainers[i].next = &(freeContainers[i+1]);
}
freeContainers[n-1].next = 0;
}
static void MakeFreeMethodsList(int n) {
int i;
for (i = 0; i+1 < n; ++i) {
freeMethods[i].next = &(freeMethods[i+1]);
}
freeMethods[n-1].next = 0;
}
OSCcontainer OSCInitAddressSpace(struct OSCAddressSpaceMemoryTuner *t) {
int bytesNeeded;
if (Initialized)
fatal_error("OSCInitAddressSpace: already initialized!");
Initialized = TRUE;
RealTimeMemoryAllocator = t->RealTimeMemoryAllocator;
bytesNeeded = (1 + t->initNumContainers) * sizeof(*freeContainers);
freeContainers = (OSCcontainer) (*(t->InitTimeMemoryAllocator))(bytesNeeded);
if (freeContainers == 0) {
fatal_error("OSCInitAddressSpace: couldn't allocate %d bytes for %d containers",
bytesNeeded, t->initNumContainers);
}
OSCTopLevelContainer = &freeContainers[t->initNumContainers];
MakeFreeContainersList(t->initNumContainers);
bytesNeeded = t->initNumMethods * sizeof(*freeMethods);
freeMethods = (OSCMethod) (*(t->InitTimeMemoryAllocator))(bytesNeeded);
if (freeMethods == 0) {
fatal_error("OSCInitAddressSpace: couldn't allocate %d bytes for %d methods",
bytesNeeded, t->initNumMethods);
}
MakeFreeMethodsList(t->initNumMethods);
/* Initialize the top-level container */
OSCTopLevelContainer->parent = 0;
OSCTopLevelContainer->numChildren = 0;
OSCTopLevelContainer->numMethods = 0;
OSCTopLevelContainer->QueryResponseInfo.comment = "OSC top-level container";
OSCTopLevelContainer->next = 0;
return OSCTopLevelContainer;
}
/* Container and method memory management: linked lists of free objects */
static OSCcontainer AllocContainer(void) {
static int numExtraAllocs = 0;
OSCcontainer result;
if (freeContainers != 0) {
result = freeContainers;
freeContainers = freeContainers->next;
return result;
}
OSCWarning("Out of memory for containers; trying to allocate more in real time");
{
int num = BASE_NUM_TO_REALLOCATE * ++numExtraAllocs;
freeContainers = (*RealTimeMemoryAllocator)(num * sizeof(*freeContainers));
if (freeContainers == 0) {
OSCWarning("Real-time allocation failed");
return 0;
}
MakeFreeContainersList(num);
return AllocContainer();
}
}
//static void FreeContainer(OSCcontainer c) {
// c->next = freeContainers;
// freeContainers = c;
//}
static OSCMethod AllocMethod(void) {
static int numExtraAllocs = 0;
OSCMethod result;
if (freeMethods != 0) {
result = freeMethods;
freeMethods = freeMethods->next;
return result;
}
OSCWarning("Out of memory for methods; trying to allocate more in real time");
{
int num = BASE_NUM_TO_REALLOCATE * ++numExtraAllocs;
freeMethods = (*RealTimeMemoryAllocator)(num * sizeof(*freeMethods));
if (freeMethods == 0) {
OSCWarning("Real-time allocation failed");
return 0;
}
MakeFreeMethodsList(num);
return AllocMethod();
}
}
//static void FreeMethod(OSCMethod c) {
// c->next = freeMethods;
// freeMethods = c;
//}
/**************************** Containers ****************************/
/* Managing the tree of containers and subcontainers, with aliases */
void AddSubContainer(OSCcontainer parent, OSCcontainer child, Name name) {
if (parent->numChildren >= MAX_CHILDREN_PER_CONTAINER) {
fatal_error("AddSubContainer: exceeded MAX_CHILDREN_PER_CONTAINER (%d)\n"
"Increase the value in OSC-address-space.c and recompile.",
MAX_CHILDREN_PER_CONTAINER);
}
parent->childrenNames[parent->numChildren] = name;
parent->children[parent->numChildren] = child;
++(parent->numChildren);
}
Boolean OSCAddContainerAlias(OSCcontainer container, Name otherName) {
if (container->parent->numChildren >= MAX_CHILDREN_PER_CONTAINER) {
return FALSE;
}
AddSubContainer(container->parent, container, otherName);
return TRUE;
}
void RemoveSubContainer(OSCcontainer parent, OSCcontainer child) {
int i, numRemoved;
/* Remove every pointer to the container, even if it has multiple aliases */
numRemoved = 0;
for (i = 0; i < parent->numChildren; ++i) {
if (parent->children[i] != child) {
parent->children[i-numRemoved] = parent->children[i];
parent->childrenNames[i-numRemoved] = parent->childrenNames[i];
} else {
++numRemoved;
}
}
parent->numChildren -= numRemoved;
if (numRemoved == 0) {
fatal_error("RemoveSubContainer: subcontainer not found!\n");
}
}
Boolean OSCRemoveContainerAlias(OSCcontainer container, Name otherName) {
int i, j;
OSCcontainer parent = container->parent;
Boolean found = FALSE;
for (i = 0; i < parent->numChildren; ++i) {
if (parent->childrenNames[i] == otherName) {
if (parent->children[i] != container) {
fatal_error("OSCRemoveContainerAlias: %s is actually a sibling's name!",
otherName);
}
found = TRUE;
for (j = i+1; j < parent->numChildren; ++j) {
parent->children[j-1] = parent->children[j];
parent->childrenNames[j-1] = parent->childrenNames[j];
--(parent->numChildren);
}
}
}
if (!found) {
fatal_error("OSCRemoveContainerAlias: %s not found!", otherName);
}
/* Now make sure the child still exists under another name */
for (i = 0; i < parent->numChildren; ++i) {
if (parent->children[i] == container) return TRUE;
}
OSCWarning("OSCRemoveContainerAlias: %s was the last name for that subcontainer");
/* xxx should recursively free the container and its children... */
return TRUE;
}
OSCcontainer OSCNewContainer(Name name, OSCcontainer parent,
struct OSCContainerQueryResponseInfoStruct *QueryResponseInfo) {
OSCcontainer me;
me = AllocContainer();
if (me == 0) return 0;
if (strchr(name, '/') != NULL) {
OSCProblem("Container name \"%s\" contains a slash --- not good.",
name);
return 0;
}
me->parent = parent;
AddSubContainer(me->parent, me, name);
me->numChildren = 0;
me->numMethods = 0;
me->QueryResponseInfo = (*QueryResponseInfo);
return me;
}
static const char *ContainerName(OSCcontainer c) {
/* Return the first name associated with me in my parent's child list.
(Assume all later ones are aliases.) */
int i;
for (i = 0; i < c->parent->numChildren; ++i) {
if (c->parent->children[i] == c) {
return c->parent->childrenNames[i];
}
}
fatal_error("ContainerName: Container %p isn't in its parent's child list.", c);
return 0;
}
static int gasHelp(char *target, int maxlength, OSCcontainer c );
Boolean OSCGetAddressString(char *target, int maxLength, OSCcontainer c) {
int lenNeeded;
if (maxLength <= 1) return FALSE;
lenNeeded = gasHelp(target, maxLength-1, c) + 1; /* -1, +1 are for null char. */
if (lenNeeded > maxLength) {
OSCProblem("Address string too long (room for %d chars; need %d)",
maxLength, lenNeeded);
target[0] = '\0';
return FALSE;
}
return TRUE;
}
static int gasHelp(char *target, int maxLength, OSCcontainer c) {
int sublength, length;
const char *myName;
/* printf("*** gasHelp %s %d %p %s\n", target, maxLength, c, c->name); */
if (c == OSCTopLevelContainer) {
target[0] = '/';
target[1] = '\0';
return 1;
}
myName = ContainerName(c);
sublength = gasHelp(target, maxLength, c->parent);
length = sublength + strlen(myName) + 1; /* +1 is for trailing slash */
if (length > maxLength) {
return length;
}
strcpy(target+sublength, myName);
target[length-1] = '/';
target[length] = '\0';
return length;
}
/**************************** Methods ****************************/
#define LONG_ADDR_SIZE 1000 /* Just for error messages */
OSCMethod OSCNewMethod(Name name, OSCcontainer me, methodCallback callback,
void *context, struct OSCMethodQueryResponseInfoStruct *QueryResponseInfo) {
char addr[LONG_ADDR_SIZE];
OSCMethod m;
if (strchr(name, '/') != NULL) {
OSCProblem("Method name \"%s\" contains a slash --- not good.",
name);
return 0;
}
if (me->numMethods >= MAX_METHODS_PER_CONTAINER) {
addr[0] = '\0';
OSCGetAddressString(addr, LONG_ADDR_SIZE, me);
OSCProblem("OSCNewMethod: container %s already has %d methods; can't add another\n"
"Change MAX_METHODS_PER_CONTAINER in OSC-address-space.c and recompile.",
addr, me->numMethods);
return 0;
}
m = AllocMethod();
if (!m) return 0;
m->callback = callback;
m->context = context;
m->QueryResponseInfo = *QueryResponseInfo;
me->methodNames[me->numMethods] = name;
me->methods[me->numMethods] = m;
++(me->numMethods);
return m;
}
/**************************** Queries ****************************/
void OSCInitContainerQueryResponseInfo(struct OSCContainerQueryResponseInfoStruct *i) {
i->comment = 0;
}
void OSCInitMethodQueryResponseInfo(struct OSCMethodQueryResponseInfoStruct *i) {
i->description = 0;
i->pvq = 0;
}
/******************************* Debug ********************************/
static int ContainerAliases(OSCcontainer c, char *target) {
/* Write a space-delimited list of alias names in the given string,
and return the number */
int i, n;
if (c == OSCTopLevelContainer) return 0;
target[0] = '\0';
n = 0;
for (i = 0; i < c->parent->numChildren; ++i) {
if (c->parent->children[i] == c) {
if (n > 0) {
strcat(target, " ");
strcat(target, c->parent->childrenNames[i]);
}
++n;
}
}
if (n == 0) fatal_error("ContainerAliases: internal inconsistency");
return n-1;
}
#define BIG_ADDRESS 50
static void PrintHelp(OSCcontainer c) {
char addr[BIG_ADDRESS];
char aliasNames[1000];
int i, j, numAliases;
if (OSCGetAddressString(addr, BIG_ADDRESS, c) == FALSE) {
printf(" /.../%s", ContainerName(c));
} else {
printf(" %s", addr);
}
numAliases = ContainerAliases(c, aliasNames);
if (numAliases > 0) {
printf(" (%d aliases:%s)", numAliases, aliasNames);
}
printf("\n");
for (i = 0; i < c->numMethods; ++i) {
printf(" %s%s: %s\n", addr, c->methodNames[i],
c->methods[i]->QueryResponseInfo.description);
}
/* Forgive this quadratic kludge: */
for (i = 0; i < c->numChildren; ++i) {
int matches = 0;
for (j = 0; j < i; ++j) {
if (c->children[j] == c->children[i]) {
/* c->children[i] is just an alias to c->children[j],
which we already printed, so ignore it. */
matches ++;
}
}
if(matches == 0 ) PrintHelp(c->children[i]);
}
}
void OSCPrintWholeAddressSpace(void) {
printf("\n----- The OSC address space -----\n");
PrintHelp(OSCTopLevelContainer);
printf("...end of OSC address space.\n\n\n");
}
/***************************** Dispatching *****************************/
#include <libOSC/OSC-dispatch.h>
#include <libOSC/OSC-callbacklist.h>
#include <libOSC/OSC-pattern-match.h>
/* To do quick concatenation of singly-linked lists, we pass around
this data structure that points to the first and last elements: */
typedef struct callbackListEnds_struct {
callbackList begin;
callbackList end;
} callbackListEnds;
/* Helper proc. declarations */
static callbackListEnds DispatchSubMessage(char *pattern, OSCcontainer c);
static char *NextSlashOrNull(char *p);
callbackList OSCDispatchMessage(char *pattern) {
callbackListEnds result;
if (pattern[0] != '/') {
OSCProblem("Invalid address \"%s\" does not begin with /", pattern);
return 0;
}
result = DispatchSubMessage(pattern+1, OSCTopLevelContainer);
return result.begin;
}
#define LONG_ADDR_LEN 100
static callbackListEnds DispatchSubMessage(char *pattern, OSCcontainer c) {
callbackListEnds result;
char *nextSlash, *restOfPattern;
char offendingAddr[LONG_ADDR_LEN];
int i;
result.begin = result.end = 0;
nextSlash = NextSlashOrNull(pattern);
if (*nextSlash == '\0') {
/* Base case: the pattern names methods of this container. */
for (i = 0; i < c->numMethods; i++) {
if (PatternMatch(pattern, c->methodNames[i])) {
callbackList node = AllocCallbackListNode(c->methods[i]->callback,
c->methods[i]->context,
result.begin);
if (node == 0) {
/* Excuse the hairyness of the code to generate the error message. */
if (OSCGetAddressString(offendingAddr,
LONG_ADDR_LEN-strlen(c->methodNames[i]),
c)) {
strcat(offendingAddr, c->methodNames[i]);
} else {
strcpy(offendingAddr, c->methodNames[i]);
}
OSCWarning("No memory for callback node; not invoking %s",
offendingAddr);
} else {
if (result.end == 0) {
result.end = node;
}
result.begin = node;
}
}
}
} else {
/* Recursive case: in the middle of an address, so the job at this
step is to look for containers that match. We temporarily turn
the next slash into a null so pattern will be a null-terminated
string of the stuff between the slashes. */
*nextSlash = '\0';
restOfPattern = nextSlash + 1;
for (i = 0; i < c->numChildren; ++i) {
if (PatternMatch(pattern, c->childrenNames[i])) {
callbackListEnds subResult =
DispatchSubMessage(restOfPattern, c->children[i]);
if (result.end == 0) {
result = subResult;
} else {
subResult.end->next = result.begin;
result.begin = subResult.begin;
}
}
}
*nextSlash = '/';
}
return result;
}
static char *NextSlashOrNull(char *p) {
while (*p != '/' && *p != '\0') {
p++;
}
return p;
}

View File

@@ -0,0 +1,364 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC-address-space.h
Matt Wright, 11/20/97
Version 2.0 5/28/98
C interface for registering the nodes in the OSC address space for an
application.
include OSC-timetag.h before this file
****************************** Introduction ******************************
The model is based on our original C++ design and consists of two kinds of
objects:
methods are the leaf nodes of the address space hierarchy. A complete OSC
address corresponds to a particular method, which has a corresponding
callback procedure that will be invoked to implement commands sent by an
OSC client.
containers are branch nodes of the address space hierarchy, and contain
methods and other containers. Each container has a single namespace;
it cannot contain a method and a subcontainer with the same name.
For example, let's examine the OSC message "/resonators/foo/decay 2.5". The
address of this message is "/resonators/foo/decay" and the message has a
single argument, 2.5. We'd say that the object corresponding to the prefix
"/resonators" is a container, and that it contains another container whose
address is "/resonators/foo". The "/resonators/foo" container has a method
"decay".
The memory model used by this module is pre-allocation of fixed-size objects
for containers, methods, and other internal objects. This preallocated
memory is dynamically managed internally by a custom high-performance memory
allocator. When the preallocated memory runs out, this module calls an
optional realtime memory allocator that you provide. If your memory allocator
gives this module more memory, it will add it to the pool of objects and
never free the memory. If your system does not have a realtime memory
allocator, provide a procedure that always returns 0.
*/
/*************************** Type Definitions ******************************/
/* Users of this module don't get to see what's inside these objects */
typedef struct OSCContainerStruct *OSCcontainer;
typedef struct OSCMethodStruct *OSCMethod;
/* This makes it easy to change the way we represent symbolic names: */
typedef const char *Name;
/************************ Initialization and Memory ************************/
/* You will fill an OSCAddressSpaceMemoryTuner struct with the parameters that
determine how memory will be allocated.
initNumContainers is the number of containers that will be allocated at
initialization time. This should be the maximum number of containers you
ever expect to have in your address space.
initNumMethods is the number of methods that will be allocated at
initialization time. If you register the same method callback procedure
multiple times at different places in the address space, each of these
locations counts as a separate method as far as memory allocation is
concerned.
The MemoryAllocator fields are procedures you will provide that allocate
memory. Like malloc(), they take the number of bytes as arguments and return
either a pointer to the new memory or 0 for failure. This memory will never
be freed.
The InitTimeMemoryAllocator will be called only at initialization time,
i.e., before OSCInitAddressSpace() returns. If it ever returns 0, that's
a fatal error.
The RealTimeMemoryAllocator will be called if, while the application is
running, the address space grows larger than can fit in what was allocated
at initialization time. If the RealTimeMemoryAllocator() returns 0, the
operation attempting to grow the address space will fail. If your system
does not have real-time memory allocation, RealTimeMemoryAllocator should
be a procedure that always returns 0.
*/
struct OSCAddressSpaceMemoryTuner {
int initNumContainers;
int initNumMethods;
void *(*InitTimeMemoryAllocator)(int numBytes);
void *(*RealTimeMemoryAllocator)(int numBytes);
};
/* Given an OSCAddressSpaceMemoryTuner, return the number of bytes of
memory that would be allocated if OSCInitAddressSpace() were called
on it. */
int OSCAddressSpaceMemoryThatWouldBeAllocated(struct OSCAddressSpaceMemoryTuner *t);
/* Call this before you call anything else. It returns the container that
corresponds to the address "/" and is the root of the address space tree.
*/
OSCcontainer OSCInitAddressSpace(struct OSCAddressSpaceMemoryTuner *t);
/**************************** Containers ****************************/
/* Here's how this system deals with the standard OSC queries addressed to
containers. This module handles the details of listening for these queries
and returning a correctly-formatted answer; all it needs from you is the
actual data that constitute the answers to these queries.
You pass this data in an OSCContainerQueryResponseInfo structure. Future versions
of this module may have new kinds of queries that they can deal with, so
the list of fields in this structure may grow. That's why your code should
call OSCInitContainerQueryResponseInfo() on your struct before putting new values
into it; this procedure will initialize all of the fields to 0, meaning
"don't have that information", which will cause the associated queries to
fail.
The "null" message, i.e., a message with a trailing slash, requesting the
list of addresses under a given container, is handled automatically.
*/
struct OSCContainerQueryResponseInfoStruct {
char *comment;
/* Other fields may go here */
};
void OSCInitContainerQueryResponseInfo(struct OSCContainerQueryResponseInfoStruct *i);
/* Allocate a new container and initialize it. Returns 0 if it cannot
allocate a new container, e.g., if you've exceeded the initNumContainers
limit of the OSCAddressSpaceMemoryTuner() and the RealTimeMemoryAllocator()
didn't return any new memory.
This procedure doesn't make a copy of the name string or any of the
contents of the OSCContainerQueryResponseInfoStruct. It does copy the fields
of the OSCContainerQueryResponseInfoStruct.
*/
OSCcontainer OSCNewContainer(Name name, OSCcontainer parent,
struct OSCContainerQueryResponseInfoStruct *queryInfo);
/* Remove a container from the address space. This also removes all the
container's methods and recursively removes all sub-containers. Memory
freed by removing a container is kept in this module's internal pool.
*/
void OSCRemoveContainer(OSCcontainer container);
/* Given a pointer to a container, and another name for that container, add or
remove that name as an alias for the container. Return FALSE for failure. */
Boolean OSCAddContainerAlias(OSCcontainer container, Name otherName);
Boolean OSCRemoveContainerAlias(OSCcontainer container, Name otherName);
/* Write the OSC address of the given container into the given string.
Return FALSE if the address won't fit in the string. */
Boolean OSCGetAddressString(char *target, int maxLength, OSCcontainer c);
/* Given an address (not a pattern!), return the single OSCcontainer it names,
or 0 if there is no container at that address */
OSCcontainer OSCLookUpContainer(Name address);
/**************************** Methods ****************************/
/* A methodCallback is a procedure that you write that will be called at the
time that an OSC message is to take effect. It will be called with 5
arguments:
- A context pointer that was registered with the methodNode
this is a method of. (Something like the C++ "this" pointer.)
- The number of bytes of argument data
- A pointer to the argument portion of the OSC message
- The time tag at which this message is supposed to take effect.
- A "return address" object you can use to send a message back to the
client that sent this message. This return channel is guaranteed
to be usable only during the invocation of your method, so your method
must use the return address immediately or ignore it, not store it away
for later use.
*/
typedef struct NetworkReturnAddressStruct *NetworkReturnAddressPtr;
/* removed const */
typedef void (*methodCallback)(void *context, int arglen, const void *args,
OSCTimeTag when, NetworkReturnAddressPtr returnAddr);
/* A ParamValQuerier is a procedure that the OSC system will call when the
user wants to know the current value of a parameter. It will be passed the
same context pointer as the associated method. It should write its return
value in the given buffer in the same format as the associated
methodCallback would expect its "args" argument, and should return the
length of data just like the method would expect in its "arglen" argument.
It doesn't have to worry about the address portion of the OSC message.
*/
typedef char OSCData; /* For pointers to OSC-formatted data */
typedef int (*ParamValQuerier)(OSCData *result, void *context);
/* This system deals with other standard per-method queries, such as
documentation, valid parameter types and ranges, units, default values,
etc., pretty much just like per-container queries.
*/
struct OSCMethodQueryResponseInfoStruct {
char *description;
ParamValQuerier pvq;
/* For each argument of the method:
min, max, default, units */
};
void OSCInitMethodQueryResponseInfo(struct OSCMethodQueryResponseInfoStruct *i);
/* Allocate a new method, initialize it, and add it to a container. Returns 0
for failure, e.g., if you've exceeded the initNumMethods limit of the
OSCAddressSpaceMemoryTuner() and the RealTimeMemoryAllocator() didn't return any
new memory.
This procedure doesn't make a copy of the name string or any of the
contents of the OSCMethodQueryResponseInfoStruct.
*/
OSCMethod OSCNewMethod(Name name, OSCcontainer container, methodCallback meth,
void *context, struct OSCMethodQueryResponseInfoStruct *queryInfo);
/******************************* Debug ********************************/
void OSCPrintWholeAddressSpace(void);
/**************************** Sample Code *****************************/
/* Here's a gross approximation of how your application will invoke the
procedures in this module. It registers an address space with
containers with addresses "/foo", "/foo/foochild", and "/bar",
and gives each of them "play" and "shuddup" messages.
#include "OSC-common.h"
#include "OSC-timetag.h"
#include "OSC-address-space.h"
typedef struct {
int playing;
int param;
float otherParam;
} Player;
void PlayCallback(void *context, int arglen, const void *vargs,
OSCTimeTag when, NetworkReturnAddressPtr ra) {
Player *p = context;
const int *args = vargs;
p->playing = 1;
if (arglen >= 4) {
p->param = args[0];
}
}
void ShuddupCallback(void *context, int arglen, const void *vargs,
OSCTimeTag when, NetworkReturnAddressPtr ra) {
Player *p = context;
const float *args = vargs;
p->playing = 0;
if (arglen >= 4) {
p->otherParam = args[0];
}
}
void *InitTimeMalloc(int numBytes) {
return malloc(numBytes);
}
void *NoRealTimeMalloc(int numBytes) {
return 0;
}
main() {
struct OSCAddressSpaceMemoryTuner oasmt;
OSCcontainer topLevelContainer, foo, foochild, bar;
struct OSCContainerQueryResponseInfoStruct ocqris;
struct OSCMethodQueryResponseInfoStruct omqris;
Player *players;
players = (Player *) malloc(3 * sizeof(*players));
if (!players) exit(1);
oasmt.initNumContainers = 10;
oasmt.initNumMethods = 10;
oasmt.InitTimeMemoryAllocator = InitTimeMalloc;
oasmt.RealTimeMemoryAllocator = NoRealTimeMalloc;
topLevelContainer = OSCInitAddressSpace(&oasmt);
OSCInitContainerQueryResponseInfo(&ocqris);
ocqris.comment = "Foo for you";
foo = OSCNewContainer("foo", topLevelContainer, &ocqris);
OSCInitContainerQueryResponseInfo(&ocqris);
ocqris.comment = "Beware the son of foo!";
foochild = OSCNewContainer("foochild", foo, &ocqris);
OSCInitContainerQueryResponseInfo(&ocqris);
ocqris.comment = "Belly up to the bar";
bar = OSCNewContainer("bar", topLevelContainer, &ocqris);
if (foo == 0 || foochild == 0 || bar == 0) {
fprintf(stderr, "Problem!\n");
exit(1);
}
OSCInitMethodQueryResponseInfo(&omqris);
OSCNewMethod("play", foo, PlayCallback, &(players[0]), &omqris);
OSCNewMethod("shuddup", foo, ShuddupCallback, &(players[0]), &omqris);
OSCNewMethod("play", foochild, PlayCallback, &(players[1]), &omqris);
OSCNewMethod("shuddup", foochild, ShuddupCallback, &(players[1]), &omqris);
OSCNewMethod("play", bar, PlayCallback, &(players[2]), &omqris);
OSCNewMethod("shuddup", bar, ShuddupCallback, &(players[2]), &omqris);
}
*/

View File

@@ -0,0 +1,95 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC-callbacklist.c
Linked lists of methods
Matt Wright, 11/20/97
Allocator is a simple linked list of free nodes.
*/
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-timetag.h>
#include <libOSC/OSC-address-space.h>
#include <libOSC/OSC-dispatch.h>
#include <libOSC/OSC-callbacklist.h>
static callbackList allNodes;
static callbackList freeNodes;
/* Call this before you call anything else */
Boolean InitCallbackListNodes(int numNodes, void *(*InitTimeMalloc)(int numBytes)) {
int i;
allNodes = (*InitTimeMalloc)(numNodes * sizeof(*allNodes));
if (allNodes == 0) return FALSE;
/* Initialize list of freeNodes */
freeNodes = &(allNodes[0]);
for (i = 0; i < numNodes-1; ++i) {
allNodes[i].next = &(allNodes[i+1]);
}
allNodes[numNodes-1].next = 0;
return TRUE;
}
callbackList AllocCallbackListNode(methodCallback callback, void *context,
struct callbackListNode *next) {
callbackList result;
if (freeNodes == 0) {
/* OSCProblem("Out of memory for callback lists!"); */
return 0;
}
result = freeNodes;
freeNodes = freeNodes->next;
result->callback = callback;
result->context = context;
result->next = next;
#ifdef DEBUG_CBL
printf("AllocCallbackListNode: returning %p (cb %p, context %p, next %p)\n",
result, result->callback, result->context, result->next);
#endif
return result;
}
void FreeCallbackListNode(callbackList cb) {
#ifdef DEBUG_CBL
printf("FreeCallbackListNode(%p)\n", cb);
#endif
cb->next = freeNodes;
freeNodes = cb;
}

View File

@@ -0,0 +1,49 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC-callbacklist.h
Linked lists of methods
Matt Wright, 3/13/98
include "OSC-dispatch.h" before this file.
*/
/* Call this before you call anything else. */
Boolean InitCallbackListNodes(int numNodes, void *(*InitTimeMalloc)(int numBytes));
callbackList AllocCallbackListNode(methodCallback callback, void *context,
struct callbackListNode *next);
void FreeCallbackListNode(callbackList);

View File

@@ -0,0 +1,87 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-system-dependent.c
Matt Wright, 3/13/98
File of procedures OSC has to call that are not part of the OSC package
and that you, the developer adding OSC addressability to an application,
must write in a way that makes sense in the context of your system.
You should also look at OSC-timetag.c and see if there's a better way
to handle time tags on your system.
*/
#include <libOSC/OSC-common.h>
/* Printing stuff: for now, use stderr. Some cleverer stuff we could do:
- Make a silent mode where these don't do anything.
- Return error messages via OSC to some client
*/
#include <stdarg.h>
#include <stdio.h>
#include <unistd.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <stdint.h>
void fatal_error(char *s, ...) {
va_list ap;
fprintf(stderr, "Fatal error: ");
va_start(ap, s);
vfprintf(stderr, s, ap);
fprintf(stderr, "\n");
va_end(ap);
exit(-321);
}
void OSCProblem(char *s, ...) {
va_list ap;
fprintf(stderr, "OSC Problem: ");
va_start(ap, s);
vfprintf(stderr, s, ap);
fprintf(stderr, "\n");
va_end(ap);
}
void OSCWarning(char *s, ...) {
/* va_list ap;
fprintf(stderr, "OSC Warning: ");
va_start(ap, s);
vfprintf(stderr, s, ap);
fprintf(stderr, "\n");
va_end(ap);*/
}

View File

@@ -0,0 +1,60 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-common.h
Simple stuff to #include everywhere in the OSC package
by Matt Wright, 3/13/98
*/
/* Boolean type */
#ifndef TRUE
typedef int Boolean;
#define TRUE 1
#define FALSE 0
#endif
/* Fixed byte width types */
typedef int int4; /* 4 byte int */
/* Printing type procedures. All take printf-style format string */
/* Catastrophic failure: print message and halt system */
void fatal_error(char *s, ...);
/* Error message for user */
void OSCProblem(char *s, ...);
/* Warning for user */
void OSCWarning(char *s, ...);

View File

@@ -0,0 +1,52 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-dispatch.h
Given an OSC message pattern from an incoming message, match the
pattern against the OSC address space and produce a list of the
callbacks corresponding to all the addresses that were matched.
Matt Wright, 6/5/98
*/
/***************************** Dispatching *****************************/
typedef struct callbackListNode {
methodCallback callback;
void *context;
struct callbackListNode *next;
} *callbackList;
/* Given an OSC message pattern from an incoming message, match the
pattern against the OSC address space and produce a list of the
callbacks corresponding to all the addresses that were matched. */
callbackList OSCDispatchMessage(char *pattern);

View File

@@ -0,0 +1,58 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-drop.c
This implementation just prints a warning.
Matt Wright, 3/16/98
*/
#include <stdint.h>
#include <sys/types.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-timetag.h>
#include <libOSC/OSC-address-space.h>
#include <libOSC/NetworkReturnAddress.h>
#include <libOSC/OSC-receive.h>
#include <libOSC/OSC-drop.h>
void DropPacket(OSCPacketBuffer p) {
OSCWarning("Packet dropped.");
}
void DropBundle(char *buf, int n, OSCPacketBuffer p) {
OSCWarning("Bundle dropped.");
}
void DropMessage(char *buf, int n, OSCPacketBuffer p) {
OSCWarning("Message dropped.");
}

View File

@@ -0,0 +1,43 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-drop.h
These procedures will be called on a packet, bundle, or message that's
being dropped for whatever reason. They can do nothing, print (or
otherwise inform the user of) a warning, save the offending data somewhere,
etc.
Matt Wright, 3/16/98
*/
void DropPacket(OSCPacketBuffer p);
void DropBundle(char *buf, int n, OSCPacketBuffer p);
void DropMessage(char *buf, int n, OSCPacketBuffer p);

View File

@@ -0,0 +1,70 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-internal-messages.h
Interface for having an application send OSC messages to itself
internally.
All these procedures return FALSE if unable to deliver the message.
Matt Wright, 3/17/98
*/
/* Send a message immediately, with no return address. This procedure
returns after the message has been sent (or has failed to be sent),
so the memory for address and args can be on the stack. Returns FALSE
if there's a problem; TRUE otherwise. */
Boolean OSCSendInternalMessage(char *address, int arglen, void *args);
/* Same thing, but with a return address supplied. */
Boolean OSCSendInternalMessageWithRSVP(char *address, int arglen, void *args,
NetworkReturnAddressPtr returnAddr);
/* Schedule some messages to occur at a given time. This allocates one of the
OSCPacketBuffer structures (see OSC-receive.h) to hold the addresses and argument
data until the messages take effect, so if you're going to call this, you
should take this use of packets into account in setting the
numReceiveBuffers argument to OSCInitReceive().
This provides an less general interface than OSC's bundle mechanism, because
the bundle of messages you provide cannot include subbundles.
The addresses, arglens, and args arguments are arrays of size numMessages.
There's no return address argument because you're not allowed to save a network
return address for later use.
*/
Boolean OSCScheduleInternalMessages(OSCTimeTag when, int numMessages,
char **addresses, int *arglens,
void **args);

View File

@@ -0,0 +1,193 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC-pattern-match.c
Matt Wright, 3/16/98
Adapted from oscpattern.c, by Matt Wright and Amar Chaudhury
*/
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-pattern-match.h>
#include <stdint.h>
#include <sys/time.h>
static const char *theWholePattern; /* Just for warning messages */
static Boolean MatchBrackets (const char *pattern, const char *test);
static Boolean MatchList (const char *pattern, const char *test);
Boolean PatternMatch (const char * pattern, const char * test) {
theWholePattern = pattern;
if (pattern == 0 || pattern[0] == 0) {
return test[0] == 0;
}
if (test[0] == 0) {
if (pattern[0] == '*')
return PatternMatch (pattern+1,test);
else
return FALSE;
}
switch (pattern[0]) {
case 0 : return test[0] == 0;
case '?' : return PatternMatch (pattern + 1, test + 1);
case '*' :
if (PatternMatch (pattern+1, test)) {
return TRUE;
} else {
return PatternMatch (pattern, test+1);
}
case ']' :
case '}' :
OSCWarning("Spurious %c in pattern \".../%s/...\"",pattern[0], theWholePattern);
return FALSE;
case '[' :
return MatchBrackets (pattern,test);
case '{' :
return MatchList (pattern,test);
case '\\' :
if (pattern[1] == 0) {
return test[0] == 0;
} else if (pattern[1] == test[0]) {
return PatternMatch (pattern+2,test+1);
} else {
return FALSE;
}
default :
if (pattern[0] == test[0]) {
return PatternMatch (pattern+1,test+1);
} else {
return FALSE;
}
}
}
/* we know that pattern[0] == '[' and test[0] != 0 */
static Boolean MatchBrackets (const char *pattern, const char *test) {
Boolean result;
Boolean negated = FALSE;
const char *p = pattern;
if (pattern[1] == 0) {
OSCWarning("Unterminated [ in pattern \".../%s/...\"", theWholePattern);
return FALSE;
}
if (pattern[1] == '!') {
negated = TRUE;
p++;
}
while (*p != ']') {
if (*p == 0) {
OSCWarning("Unterminated [ in pattern \".../%s/...\"", theWholePattern);
return FALSE;
}
if (p[1] == '-' && p[2] != 0) {
if (test[0] >= p[0] && test[0] <= p[2]) {
result = !negated;
goto advance;
}
}
if (p[0] == test[0]) {
result = !negated;
goto advance;
}
p++;
}
result = negated;
advance:
if (!result)
return FALSE;
while (*p != ']') {
if (*p == 0) {
OSCWarning("Unterminated [ in pattern \".../%s/...\"", theWholePattern);
return FALSE;
}
p++;
}
return PatternMatch (p+1,test+1);
}
static Boolean MatchList (const char *pattern, const char *test) {
const char *restOfPattern, *tp = test;
for(restOfPattern = pattern; *restOfPattern != '}'; restOfPattern++) {
if (*restOfPattern == 0) {
OSCWarning("Unterminated { in pattern \".../%s/...\"", theWholePattern);
return FALSE;
}
}
restOfPattern++; /* skip close curly brace */
pattern++; /* skip open curly brace */
while (1) {
if (*pattern == ',') {
if (PatternMatch (restOfPattern, tp)) {
return TRUE;
} else {
tp = test;
++pattern;
}
} else if (*pattern == '}') {
return PatternMatch (restOfPattern, tp);
} else if (*pattern == *tp) {
++pattern;
++tp;
} else {
tp = test;
while (*pattern != ',' && *pattern != '}') {
pattern++;
}
if (*pattern == ',') {
pattern++;
}
}
}
}

View File

@@ -0,0 +1,35 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC-pattern-match.h
*/
Boolean PatternMatch (const char *pattern, const char *test);

View File

@@ -0,0 +1,190 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-priority-queue.c
Priority queue used by OSC time tag scheduler
This is the most trivial implementation, an unsorted array of queued
objects, mostly for debug purposes.
Matt Wright, 9/17/98
*/
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-timetag.h>
#include <libOSC/OSC-priority-queue.h>
#include <stdint.h>
#include <sys/time.h>
#define PRINT_PRIORITY_QUEUE
#ifdef DEBUG_OSC_PRIORITY_QUEUE
#define PRINT_PRIORITY_QUEUE
#endif
#if defined(PRINT_PRIORITY_QUEUE) || defined(DEBUG_OSC_PRIORITY_QUEUE)
#include <stdio.h>
void OSCQueuePrint(OSCQueue q);
#endif
#define CAPACITY 1000
struct OSCQueueStruct {
OSCSchedulableObject list[CAPACITY];
int n;
int scanIndex;
};
OSCQueue OSCNewQueue(int maxItems, void *(*InitTimeMalloc)(int numBytes)) {
OSCQueue result;
if (maxItems > CAPACITY) fatal_error("Increase CAPACITY in OSC-priority-queue.c");
result = (*InitTimeMalloc)(sizeof(*result));
if (result == 0) return 0;
result->n = 0;
#ifdef DEBUG_OSC_PRIORITY_QUEUE
OSCQueuePrint(result);
#endif
return result;
}
int OSCQueueInsert(OSCQueue q, OSCSchedulableObject new) {
if (q->n == CAPACITY) return FALSE;
q->list[q->n] = new;
++(q->n);
#ifdef DEBUG_OSC_PRIORITY_QUEUE
printf("OSCQueueInsert: just inserted %p\n", new);
OSCQueuePrint(q);
#endif
return TRUE;
}
OSCTimeTag OSCQueueEarliestTimeTag(OSCQueue q) {
int i;
OSCTimeTag smallest = OSCTT_BiggestPossibleTimeTag();
for (i = 0; i < q->n; ++i) {
if (OSCTT_Compare(smallest, q->list[i]->timetag) > 0) {
smallest = q->list[i]->timetag;
}
}
#ifdef DEBUG_OSC_PRIORITY_QUEUE
printf("OSCQueueEarliestTimeTag: about to return %llx\n", smallest);
OSCQueuePrint(q);
#endif
return smallest;
}
static void RemoveElement(int goner, OSCQueue q) {
int i;
--(q->n);
for (i = goner; i < q->n; ++i) {
q->list[i] = q->list[i+1];
}
}
OSCSchedulableObject OSCQueueRemoveEarliest(OSCQueue q) {
OSCSchedulableObject result;
int i, smallestIndex;
if (q->n == 0) {
OSCWarning("OSCQueueRemoveEarliest: empty queue");
return NULL;
}
#ifdef DEBUG_OSC_PRIORITY_QUEUE
printf("OSCQueueRemoveEarliest: begin\n");
OSCQueuePrint(q);
#endif
smallestIndex = 0;
for (i = 1; i < q->n; ++i) {
if (OSCTT_Compare(q->list[smallestIndex]->timetag, q->list[i]->timetag) > 0) {
smallestIndex = i;
}
}
result = q->list[smallestIndex];
RemoveElement(smallestIndex, q);
#ifdef DEBUG_OSC_PRIORITY_QUEUE
printf("OSCQueueRemoveEarliest: done\n");
OSCQueuePrint(q);
#endif
return result;
}
#ifdef PRINT_PRIORITY_QUEUE
void OSCQueuePrint(OSCQueue q) {
int i;
printf("OSC Priority queue at %p has %d elements:\n", q, q->n);
for (i = 0; i < q->n; ++i) {
printf(" list[%2d] is %p, timetag = %llx\n", i, q->list[i], q->list[i]->timetag);
}
printf("\n\n");
}
#endif
void OSCQueueScanStart(OSCQueue q) {
q->scanIndex = 0;
}
OSCSchedulableObject OSCQueueScanNext(OSCQueue q) {
if (q->scanIndex >= q->n) return 0;
return (q->list[(q->scanIndex)++]);
}
void OSCQueueRemoveCurrentScanItem(OSCQueue q) {
/* Remember that q->scanIndex is the index of the *next*
item that will be returned, so the "current" item, i.e.,
the one most recently returned by OSCQueueScanNext(),
is q->scanIndex-1. */
RemoveElement(q->scanIndex-1, q);
--(q->scanIndex);
}
void CheckWholeQueue(void) {
}

View File

@@ -0,0 +1,90 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-priority-queue.h
Interface to priority queue used by OSC time tag scheduler
Matt Wright, 3/13/98
*/
/* include OSC-timetag.h before this file. */
/* This queue manages pointers to data objects. It doesn't care what's in the
objects except that the first element has to be an OSCTimeTag. So whatever
data you want to store, cast your pointer to it to a pointer to this type. */
typedef struct {
OSCTimeTag timetag;
/* There will be other stuff... */
} *OSCSchedulableObject;
typedef struct OSCQueueStruct *OSCQueue;
/* Make a new queue, or return 0 for failure. */
OSCQueue OSCNewQueue(int maxItems, void *(*InitTimeMalloc)(int numBytes));
/* Put something into the queue. Return FALSE if quque is full. */
Boolean OSCQueueInsert(OSCQueue q, OSCSchedulableObject o);
/* What's the time tag of the earliest item in the queue?
Return OSCTT_BiggestPossibleTimeTag() if queue is empty. */
OSCTimeTag OSCQueueEarliestTimeTag(OSCQueue q);
/* Remove the item from the front of the queue. Fatal error
if the queue is empty. */
OSCSchedulableObject OSCQueueRemoveEarliest(OSCQueue q);
/* Interface for examining items currently stored on the queue:
- To start, call OSCQueueScanStart().
- Then each subsequent call to OSCQueueScanNext() returns a pointer to an
OSCSchedulableObject that is stored on the queue, until
OSCQueueScanNext() returns 0 to indicate that all objects on the queue
have been scanned.
The objects returned by OSCQueueScanNext() come in chronological order (or
approximately chronological order, depending on the underlying queue data
structure).
If you call OSCQueueRemoveCurrentScanItem(), the object most recently
returned by OSCQueueScanNext() will be removed from the queue.
If there are any insertions or deletions to the queue, the sequence of
scanned objects must still include every object in the queue. This may
cause a particular object to be returned more than once by
OSCQueueScanNext().
*/
void OSCQueueScanStart(OSCQueue q);
OSCSchedulableObject OSCQueueScanNext(OSCQueue q);
void OSCQueueRemoveCurrentScanItem(OSCQueue q);

View File

@@ -0,0 +1,893 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
#define PARANOID 0
/*
OSC-receive.c
Matt Wright, 3/13/98, 6/3/98
Adapted from OSC-addressability.c (and seriously cleaned up!)
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdint.h>
#include <sys/time.h>
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-timetag.h>
#include <libOSC/OSC-address-space.h>
#include <libOSC/NetworkReturnAddress.h>
#include <libOSC/OSC-receive.h>
#include <libOSC/OSC-priority-queue.h>
#include <libOSC/OSC-string-help.h>
#include <libOSC/OSC-drop.h>
#include <libOSC/OSC-dispatch.h>
#include <libOSC/NetworkUDP.h>
#include <libOSC/OSC-callbacklist.h>
#if defined(DEBUG_INTERNAL) || defined(DEBUG) || defined(DEBUG_PACKET_MEM) || defined(DEBUG_QD_MEM) || defined(DEBUG_8BYTE_ALIGN) || defined(SUSPECT_QD_PROB)
#include <stdio.h>
#endif
static int use_mcast_ = 0;
static char mcast_groupname[200];
struct {
OSCQueue TheQueue; /* The Priority Queue */
OSCTimeTag lastTimeTag; /* Best approximation to current time */
Boolean timePassed; /* TRUE if OSCInvokeMessagesThatAreReady() has been
called since the last time OSCBeProductiveWhileWaiting() was. */
int recvBufSize; /* Size of all receive buffers */
void *(*InitTimeMalloc)(int numBytes);
void *(*RealTimeMemoryAllocator)(int numBytes);
} globals;
/* Data structures */
struct OSCPacketBuffer_struct {
char *buf; /* Contents of network packet go here */
int n; /* Overall size of packet */
int refcount; /* # queued things using memory from this buffer */
struct OSCPacketBuffer_struct *nextFree; /* For linked list of free packets */
Boolean returnAddrOK; /* Because returnAddr points to memory we need to
store future return addresses, we set this
field to FALSE in situations where a packet
buffer "has no return address" instead of
setting returnAddr to 0 */
NetworkReturnAddressPtr returnAddr;
//void *returnAddr; /* Addr of client this packet is from */
/* This was of type NetworkReturnAddressPtr, but the constness
was making it impossible for me to initialize it. There's
probably a better way that I don't understand. */
};
/* These are the data objects that are inserted and removed from the
scheduler. The idea is that we can insert a single message or
an entire bundle on the scheduler, and we can leave it in various
states of being parsed and pattern matched. */
#define NOT_DISPATCHED_YET ((callbackList) -1)
typedef struct queuedDataStruct {
OSCTimeTag timetag; /* When this bundle or message is supposed to happen */
OSCPacketBuffer myPacket; /* Ptr. to buffer this is contained in */
enum {MESSAGE, BUNDLE} type;
union {
struct {
char *bytes;
int length;
} bundle;
struct {
char *messageName; /* Ptr. into receive buffer */
int length; /* Includes name and arugments */
void *args; /* 0 if not yet parsed */
int argLength;
callbackList callbacks; /* May be NOT_DISPATCHED_YET */
} message;
} data;
struct queuedDataStruct *nextFree; /* For linked list of free structures */
} queuedData;
/* Static procedure declatations */
static Boolean InitPackets(int receiveBufferSize, int clientAddrSize, int numReceiveBuffers);
static Boolean InitQueuedData(int numQueuedObjects);
static queuedData *AllocQD(void);
static void FreeQD(queuedData *qd);
static void CallWholeCallbackList(callbackList l, int argLength, void *args, OSCTimeTag when, NetworkReturnAddressPtr returnAddr);
static void InsertBundleOrMessage(char *buf, int n, OSCPacketBuffer packet, OSCTimeTag enclosingTimeTag);
static void ParseBundle(queuedData *qd);
static Boolean ParseMessage(queuedData *qd);
/* static void CheckPacketRefcount(OSCPacketBuffer packet); */
static void PacketAddRef(OSCPacketBuffer packet);
static void PacketRemoveRef(OSCPacketBuffer packet);
/**************************************************
Initialization and memory pre-allocation
**************************************************/
Boolean OSCInitReceive(struct OSCReceiveMemoryTuner *t) {
globals.recvBufSize = t->receiveBufferSize;
globals.InitTimeMalloc = t->InitTimeMemoryAllocator;
globals.RealTimeMemoryAllocator = t->RealTimeMemoryAllocator;
globals.TheQueue = OSCNewQueue(t->numQueuedObjects, t->InitTimeMemoryAllocator);
if (globals.TheQueue == 0) return FALSE;
globals.lastTimeTag = OSCTT_Immediately();
globals.timePassed = TRUE;
if (InitPackets(t->receiveBufferSize, SizeOfNetworkReturnAddress(),
t->numReceiveBuffers) == FALSE) return FALSE;
if (InitQueuedData(t->numQueuedObjects) == FALSE) return FALSE;
if (InitCallbackListNodes(t->numCallbackListNodes, t->InitTimeMemoryAllocator)
== FALSE) return FALSE;
return TRUE;
}
/**************************************************
Managing packet data structures
**************************************************/
static struct OSCPacketBuffer_struct *freePackets;
#ifdef DEBUG_PACKET_MEM
static void PrintPacketFreeList(void) {
struct OSCPacketBuffer_struct *p;
printf("- freePackets:");
if (freePackets == 0) {
printf(" [none]");
}
for (p = freePackets; p != 0; p = p->nextFree) {
printf(" %p", p);
}
printf("\n");
}
#endif
#define MIN_REASONABLE_RCV_BUFSIZE 128
void OSCFreeReceiver(void)
{
if( freePackets) free(freePackets);
if( globals.TheQueue ) free( globals.TheQueue );
}
static Boolean InitPackets(int receiveBufferSize, int clientAddrSize, int numReceiveBuffers) {
int i;
struct OSCPacketBuffer_struct *allPackets;
if (receiveBufferSize < MIN_REASONABLE_RCV_BUFSIZE) {
fatal_error("OSCInitReceive: receiveBufferSize of %d is unreasonably small.",
receiveBufferSize);
}
allPackets = (*(globals.InitTimeMalloc))(numReceiveBuffers * sizeof(*allPackets));
if (allPackets == 0) return FALSE;
for (i = 0; i < numReceiveBuffers; ++i) {
allPackets[i].returnAddr = (*(globals.InitTimeMalloc))(clientAddrSize);
if (allPackets[i].returnAddr == 0) return FALSE;
allPackets[i].buf = (*(globals.InitTimeMalloc))(receiveBufferSize);
if (allPackets[i].buf == 0) return FALSE;
allPackets[i].nextFree = &(allPackets[i+1]);
}
allPackets[numReceiveBuffers-1].nextFree = ((struct OSCPacketBuffer_struct *) 0);
freePackets = allPackets;
return TRUE;
}
char *OSCPacketBufferGetBuffer(OSCPacketBuffer p) {
return p->buf;
}
int *OSCPacketBufferGetSize(OSCPacketBuffer p) {
return &(p->n);
}
int OSCGetReceiveBufferSize(void) {
return globals.recvBufSize;
}
NetworkReturnAddressPtr OSCPacketBufferGetClientAddr(OSCPacketBuffer p) {
return p->returnAddr;
}
#ifdef DEBUG
void PrintPacket(OSCPacketBuffer p) {
printf("Packet %p. buf %p, n %d, refcount %d, nextFree %p\n",
p, p->buf, p->n, p->refcount, p->nextFree);
}
#endif
OSCPacketBuffer OSCAllocPacketBuffer(void) {
OSCPacketBuffer result;
if (freePackets == 0) {
/* Could try to call the real-time memory allocator here */
OSCWarning("OSCAllocPacketBuffer: no free packets!");
return 0;
}
result = freePackets;
freePackets = result->nextFree;
result->refcount = 0;
#ifdef DEBUG_PACKET_MEM
printf("OSCAllocPacketBuffer: allocating %p ", result);
PrintPacketFreeList();
#endif
return result;
}
void OSCFreePacket(OSCPacketBuffer p) {
#ifdef PARANOID
if (p->refcount != 0) {
OSCWarning("OSCFreePacket: %p's refcount is %d!\n", p, p->refcount);
}
#endif
p->nextFree = freePackets;
freePackets = p;
#ifdef DEBUG_PACKET_MEM
printf("OSCFreePacket: freed %p ", p);
PrintPacketFreeList();
#endif
}
/**************************************************
Dealing with OpenSoundControl packets and
making the messages take effect.
**************************************************/
static queuedData *freeQDList;
#ifdef DEBUG_QD_MEM
static void PrintQDFreeList(void) {
static queuedData *p;
printf("- freeQDList:");
if (freeQDList == 0) {
printf(" [none]");
}
for (p = freeQDList; p != 0; p = p->nextFree) {
printf(" %p", p);
}
printf("\n");
}
#endif
static Boolean InitQueuedData(int numQueuedObjects) {
int i;
queuedData *allQD;
allQD = (*(globals.InitTimeMalloc))(numQueuedObjects * (sizeof(*allQD)));
if (allQD == 0) return FALSE;
for (i = 0; i < numQueuedObjects; ++i) {
allQD[i].nextFree = &(allQD[i+1]);
}
allQD[numQueuedObjects-1].nextFree = 0;
freeQDList = &(allQD[0]);
return TRUE;
}
static queuedData *AllocQD(void) {
queuedData *result;
if (freeQDList == 0) {
/* Could try to call realtime malloc() */
OSCWarning("AllocQD: no QD objects free now; returning 0.");
return 0;
}
result = freeQDList;
freeQDList = freeQDList->nextFree;
return result;
}
static void FreeQD(queuedData *qd) {
qd->nextFree = freeQDList;
freeQDList = qd;
}
void OSCAcceptPacket(OSCPacketBuffer packet) {
if ((packet->n % 4) != 0) {
OSCProblem("OSC packet size (%d bytes) not a multiple of 4.", packet->n);
DropPacket(packet);
return;
}
#ifdef DEBUG
printf("OSCAcceptPacket(OSCPacketBuffer %p, buf %p, size %d)\n",
packet, packet->buf, packet->n);
#endif
/* If the packet came from the user, it's return address is OK. */
packet->returnAddrOK = TRUE;
InsertBundleOrMessage(packet->buf, packet->n, packet, OSCTT_Immediately());
#ifdef PARANOID
if (packet->refcount == 0) {
if (freePackets != packet) {
fatal_error("OSCAcceptPacket: packet refcount 0, but it's not the head of the free list!");
}
}
#endif
OSCInvokeAllMessagesThatAreReady(globals.lastTimeTag);
}
Boolean OSCBeProductiveWhileWaiting(void) {
/* Here's where we could be clever if an allocation fails.
(I.e., if we're out of QD objects, we should avoid
parsing bundles.) The code isn't that smart yet. */
queuedData *qd;
if (globals.timePassed) {
OSCQueueScanStart(globals.TheQueue);
}
while (1) {
qd = (queuedData *) OSCQueueScanNext(globals.TheQueue);
if (qd == 0) return FALSE;
if (qd->type == BUNDLE) {
ParseBundle(qd);
OSCQueueRemoveCurrentScanItem(globals.TheQueue);
return TRUE;
} else {
if (qd->data.message.callbacks == NOT_DISPATCHED_YET) {
if (ParseMessage(qd) == FALSE) {
/* Problem with this message - flush it. */
DropMessage(qd->data.message.messageName,
qd->data.message.length,
qd->myPacket);
OSCQueueRemoveCurrentScanItem(globals.TheQueue);
PacketRemoveRef(qd->myPacket);
FreeQD(qd);
}
return TRUE;
}
/* The item we found was an already-dispatched message,
so continue the while loop. */
}
}
}
Boolean OSCInvokeMessagesThatAreReady(OSCTimeTag now) {
queuedData *x;
OSCTimeTag thisTimeTag;
globals.lastTimeTag = now;
globals.timePassed = TRUE;
thisTimeTag = OSCQueueEarliestTimeTag(globals.TheQueue);
if (OSCTT_Compare(thisTimeTag, now) > 0) {
/* No messages ready yet. */
return FALSE;
}
#ifdef DEBUG
printf("OSCInvokeMessagesThatAreReady(%llx) - yes, some are ready; earliest %llx\n", now, thisTimeTag);
#endif
while (OSCTT_Compare(thisTimeTag, OSCQueueEarliestTimeTag(globals.TheQueue)) == 0) {
x = (queuedData *) OSCQueueRemoveEarliest(globals.TheQueue);
if (!x) return FALSE;
#ifdef DEBUG
printf("...Just removed earliest entry from queue: %p, TT %llx, %s\n",
x, x->timetag, x->type == MESSAGE ? "message" : "bundle");
if (x->type == MESSAGE) {
printf("...message %s, len %d, args %p, arglen %d, callbacks %p\n",
x->data.message.messageName, x->data.message.length, x->data.message.args,
x->data.message.argLength, x->data.message.callbacks);
} else {
if (x->data.bundle.length == 0) {
printf("...bundle is empty.\n");
} else {
printf("...bundle len %d, first count %d, first msg %s\n",
x->data.bundle.length, *((int *) x->data.bundle.bytes), x->data.bundle.bytes+4);
}
}
PrintPacket(x->myPacket);
#endif
if (x->type == BUNDLE) {
ParseBundle(x);
} else {
if (x->data.message.callbacks == NOT_DISPATCHED_YET) {
if (ParseMessage(x) == FALSE) {
/* Problem with this message - flush it. */
PacketRemoveRef(x->myPacket);
FreeQD(x);
continue;
}
}
CallWholeCallbackList(x->data.message.callbacks,
x->data.message.argLength,
x->data.message.args,
thisTimeTag,
x->myPacket->returnAddrOK ? x->myPacket->returnAddr : 0);
PacketRemoveRef(x->myPacket);
FreeQD(x);
}
}
#ifdef PARANOID
if (OSCTT_Compare(thisTimeTag, OSCQueueEarliestTimeTag(globals.TheQueue)) > 0) {
fatal_error("OSCInvokeMessagesThatAreReady: corrupt queue!\n"
" just did %llx; earliest in queue is now %llx",
thisTimeTag, OSCQueueEarliestTimeTag(globals.TheQueue));
}
#endif
return OSCTT_Compare(OSCQueueEarliestTimeTag(globals.TheQueue), now) <= 0;
}
void OSCInvokeAllMessagesThatAreReady(OSCTimeTag now) {
while (OSCInvokeMessagesThatAreReady(now)) {
/* Do nothing */
}
}
static void CallWholeCallbackList(callbackList l, int argLength, void *args, OSCTimeTag when,
NetworkReturnAddressPtr returnAddr) {
/* In a multithreaded application, this might run in a different thread
than the thread that deals with the priority queue. */
callbackList next;
while (l != 0) {
(*(l->callback))(l->context, argLength, args, when, returnAddr);
next = l->next;
FreeCallbackListNode(l);
l = next;
}
}
static void InsertBundleOrMessage(char *buf, int n, OSCPacketBuffer packet, OSCTimeTag enclosingTimeTag) {
Boolean IsBundle;
queuedData *qd;
/* We add the reference first thing so in case any of the upcoming
potential failure situations come we can call PacketRemoveRef, thereby
freeing the packet if necessary. */
PacketAddRef(packet);
if ((n % 4) != 0) {
OSCProblem("OSC message or bundle size (%d bytes) not a multiple of 4.", n);
DropMessage(buf, n, packet);
PacketRemoveRef(packet);
return;
}
if ((n >= 8) && (strncmp(buf, "#bundle", 8) == 0)) {
IsBundle = TRUE;
if (n < 16) {
OSCProblem("Bundle message too small (%d bytes) for time tag.", n);
DropBundle(buf, n, packet);
PacketRemoveRef(packet);
return;
}
} else {
IsBundle = FALSE;
}
qd = AllocQD();
if (qd == 0) {
OSCProblem("Not enough memory for queued data!");
DropBundle(buf, n, packet);
PacketRemoveRef(packet);
return;
}
qd->myPacket = packet;
qd->type = IsBundle ? BUNDLE : MESSAGE;
if (IsBundle) {
/* Be careful of 8-byte alignment when copying the time tag. Here's a good
way to get a bus error when buf happens not to be 8-byte aligned:
qd->timetag = *((OSCTimeTag *)(buf+8));
*/
memcpy(&(qd->timetag), buf+8, sizeof(OSCTimeTag));
if (OSCTT_Compare(qd->timetag, enclosingTimeTag) < 0) {
OSCProblem("Time tag of sub-bundle is before time tag of enclosing bundle.");
DropBundle(buf, n, packet);
PacketRemoveRef(packet);
FreeQD(qd);
return;
}
qd->data.bundle.bytes = buf + 16;
qd->data.bundle.length = n - 16;
} else {
qd->timetag = enclosingTimeTag;
qd->data.message.messageName = buf;
qd->data.message.length = n;
qd->data.message.callbacks = NOT_DISPATCHED_YET;
}
OSCQueueInsert(globals.TheQueue, (OSCSchedulableObject) qd);
}
static void ParseBundle(queuedData *qd) {
/* A queued bundle has been removed from the scheduler queue, and now it's
time to parse all the stuff inside it and schedule the enclosed
messages and bundles. Once all the contents of the bundle have been
parsed and scheduled, we trash the bundle, decrementing the packet
count and freeing the QD. */
int size;
int i = 0;
if (qd->type != BUNDLE) {
fatal_error("This can't happen: bundle isn't a bundle!");
}
while (i < qd->data.bundle.length) {
size = *((int *) (qd->data.bundle.bytes + i));
if ((size % 4) != 0) {
OSCProblem("Bad size count %d in bundle (not a multiple of 4).", size);
DropBundle(qd->data.bundle.bytes, qd->data.bundle.length, qd->myPacket);
goto bag;
}
if ((size + i + 4) > qd->data.bundle.length) {
OSCProblem("Bad size count %d in bundle (only %d bytes left in entire bundle).",
size, qd->data.bundle.length-i-4);
DropBundle(qd->data.bundle.bytes, qd->data.bundle.length, qd->myPacket);
goto bag;
}
/* Recursively handle element of bundle */
InsertBundleOrMessage(qd->data.bundle.bytes+i+4, size, qd->myPacket, qd->timetag);
i += 4 + size;
}
if (i != qd->data.bundle.length) {
fatal_error("This can't happen: internal logic error parsing bundle");
}
bag:
/* If we got here successfully, we've added to the packet's reference count for
each message or subbundle by calling InsertBundleOrMessage(), so we remove the one
reference for bundle that we just parsed. If we got here by "goto bag", there's a
problem with the bundle so we also want to lose the reference count. */
PacketRemoveRef(qd->myPacket);
FreeQD(qd);
}
static Boolean ParseMessage(queuedData *qd) {
/* Fill in all the information we'll need to execute the message as
quickly as possible when the time comes. This means figuring out where
the address ends and the arguments begin, and also pattern matching the
address to find the callbacks associated with it.
The message may be something we have to invoke now, or it may be some
message scheduled for the future that's just waiting on the queue; this
procedure doesn't care. */
char *args; /* char * so we can do pointer subtraction */
int messageLen;
char *DAAS_errormsg;
if (qd->type != MESSAGE) {
fatal_error("This can't happen: message isn't a message!");
}
args = OSCDataAfterAlignedString(qd->data.message.messageName,
qd->data.message.messageName+qd->data.message.length,
&DAAS_errormsg);
if (args == 0) {
OSCProblem("Bad message name string: %s\n", DAAS_errormsg);
DropMessage(qd->data.message.messageName, qd->data.message.length, qd->myPacket);
return FALSE;
}
qd->data.message.args = args;
messageLen = args - qd->data.message.messageName;
qd->data.message.argLength = qd->data.message.length - messageLen;
qd->data.message.callbacks = OSCDispatchMessage(qd->data.message.messageName);
if (qd->data.message.callbacks == 0) {
OSCWarning("Message pattern \"%s\" did not correspond to any address in the synth.",
qd->data.message.messageName);
return FALSE;
}
return TRUE;
}
static void PacketAddRef(OSCPacketBuffer packet) {
++(packet->refcount);
}
static void PacketRemoveRef(OSCPacketBuffer packet) {
--(packet->refcount);
if (packet->refcount == 0) {
OSCFreePacket(packet);
}
}
/**************************************************
Implementation of procedures declared in
OSC-internal-messages.h
**************************************************/
#include <libOSC/OSC-internal-messages.h>
Boolean OSCSendInternalMessage(char *address, int arglen, void *args) {
return OSCSendInternalMessageWithRSVP(address, arglen, args, 0);
}
Boolean OSCSendInternalMessageWithRSVP(char *address, int arglen, void *args,
NetworkReturnAddressPtr returnAddr) {
callbackList l = OSCDispatchMessage(address);
if (l == 0) return FALSE;
CallWholeCallbackList(l, arglen, args, OSCTT_Immediately(), returnAddr);
return TRUE;
}
Boolean OSCScheduleInternalMessages(OSCTimeTag when, int numMessages,
char **addresses, int *arglens, void **args) {
int i, bufSizeNeeded;
OSCPacketBuffer p;
queuedData *qd;
char *bufPtr;
/* Figure out how big of a buffer we'll need to hold this huge bundle.
We don't store the "#bundle" string or the time tag, just the 4-byte
size counts, the addresses, possible extra null padding for the
addresses, and the arguments. */
bufSizeNeeded = 0;
for (i = 0; i < numMessages; ++i) {
bufSizeNeeded += 4 + OSCPaddedStrlen(addresses[i]) + arglens[i];
}
if (bufSizeNeeded > OSCGetReceiveBufferSize()) {
return FALSE;
}
/* Now try to allocate the data objects to hold these messages */
qd = AllocQD();
if (qd == 0) return FALSE;
p = OSCAllocPacketBuffer();
if (p == 0) {
FreeQD(qd);
return FALSE;
}
/* Now fill in the buffer with a fake #bundle message. This is almost like
putting a real #bundle message in the buffer and then calling OSCAcceptPacket,
except that we save a little time and memory by not writing "#bundle" or the time tag,
and by pre-parsing the messages a little. Thus, this code duplicates a lot
of what's in InsertBundleOrMessage() */
bufPtr = p->buf;
for (i = 0; i < numMessages; ++i) {
/* First the size count of this bundle element */
*((int4 *) bufPtr) = OSCPaddedStrlen(addresses[i]) + arglens[i];
bufPtr += sizeof(int4);
/* Then the address */
bufPtr = OSCPaddedStrcpy(bufPtr, addresses[i]);
/* Then the arguments */
memcpy(bufPtr, args[i], arglens[i]);
bufPtr += arglens[i];
}
#ifdef PARANOID
if (bufPtr != p->buf+bufSizeNeeded) {
fatal_error("OSCScheduleInternalMessages: internal error");
}
#endif
/* Fill in the rest of the packet fields */
p->n = bufSizeNeeded;
p->returnAddrOK = FALSE;
PacketAddRef(p);
/* Now fill in the queuedData object */
qd->timetag = when;
qd->myPacket = p;
qd->type = BUNDLE;
qd->data.bundle.length = bufSizeNeeded;
qd->data.bundle.bytes = p->buf;
/* Now we can put it into the scheduling queue. */
OSCQueueInsert(globals.TheQueue, (OSCSchedulableObject) qd);
return TRUE;
}
Boolean NetworkPacketWaiting(OSCPacketBuffer packet) {
int n;
NetworkReturnAddressPtr na = OSCPacketBufferGetClientAddr(packet);
// if( use_mcast_ )
// {
fd_set fds;
struct timeval no_wait;
int status;
memset( &no_wait, 0, sizeof(no_wait));
FD_ZERO(&fds);
FD_SET( na->sockfd , &fds );
status = select( na->sockfd + 1, &fds, 0, 0, &no_wait );
if(status <= 0)
return FALSE;
if(FD_ISSET( na->sockfd, &fds ))
return TRUE;
// }
// else
// {
// if( ioctl( na->sockfd, FIONREAD, &n, 0)==-1) return FALSE;
// if( n==0 ) return FALSE;
// }
// return TRUE;
return FALSE;
}
Boolean NetworkReceivePacket( OSCPacketBuffer packet ) {
int n;
NetworkReturnAddressPtr na = OSCPacketBufferGetClientAddr(packet);
if( use_mcast_ )
{
n = recv( na->sockfd, packet->buf, 100, 0 );
if( n<= 0)
return FALSE;
packet->n = n;
}
else
{
n = recvfrom( na->sockfd, packet->buf, 100, 0,
(struct sockaddr*) &(na->cl_addr), &(na->clilen));
if(n<=0) {
return FALSE;
}
packet->n = n;
}
return TRUE;
}
void GoMultiCast( const char *group_name )
{
use_mcast_ = 1;
strncpy( mcast_groupname, group_name, strlen(group_name ));
}
int IsMultiCast( char *dst )
{
if(use_mcast_)
sprintf(dst, "%s", mcast_groupname );
return use_mcast_;
}
Boolean NetworkStartUDPServer(OSCPacketBuffer packet, int port_id) {
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port_id);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset( &(my_addr.sin_zero), 0, 8);
if( use_mcast_ )
{
struct ip_mreq mcast_req;
int on = 1;
int err= 0;
memset( &mcast_req, 0, sizeof(mcast_req));
packet->returnAddr->sockfd = socket( AF_INET, SOCK_DGRAM, 0);
#ifdef SO_REUSEADDR
setsockopt( packet->returnAddr->sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
#endif
#ifdef SO_REUSEPORT
setsockopt( packet->returnAddr->sockfd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on));
#endif
err = bind( packet->returnAddr->sockfd, (struct sockaddr*) &my_addr, sizeof( my_addr ));
if( err < 0 )
return FALSE;
mcast_req.imr_multiaddr.s_addr = inet_addr( mcast_groupname );
mcast_req.imr_interface.s_addr = htonl( INADDR_ANY );
setsockopt( packet->returnAddr->sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
&mcast_req, sizeof(mcast_req) );
}
else
{
packet->returnAddr->sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if( bind( packet->returnAddr->sockfd,
(struct sockaddr*) &my_addr,
sizeof(struct sockaddr)) == -1) return FALSE;
packet->returnAddr->clilen = sizeof(struct sockaddr);
}
return TRUE;
}

View File

@@ -0,0 +1,242 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC-receive.h
Matt Wright, 11/18/97
include OSC-timetag.h and NetworkReturnAddress.h before this file.
*/
/**************************************************
Initialization and memory pre-allocation
**************************************************/
/* The memory model used by this module is pre-allocation of fixed-size
objects for network buffers and other internal objects. This preallocated
memory is dynamically managed internally by a custom high-performance memory
allocator. When the preallocated memory runs out, this module calls an
optional realtime memory allocator that you provide. If your memory
allocator gives this module more memory, it will add it to the pool of
objects and never free the memory. If your system does not have a realtime
memory allocator, provide a procedure that always returns 0.
You will fill an OSCReceiveMemoryTuner struct with the parameters that
determine how memory will be allocated.
The MemoryAllocator fields are procedures you will provide that allocate
memory. Like malloc(), they take the number of bytes as arguments and return
either a pointer to the new memory or 0 for failure. This memory will never
be freed.
- The InitTimeMemoryAllocator will be called only at initialization time,
i.e., before OSCInitAddressSpace() returns. If it ever returns 0, that's
a fatal error.
- The RealTimeMemoryAllocator will be called if, while the application is
running, the address space grows larger than can fit in what was allocated
at initialization time. If the RealTimeMemoryAllocator() returns 0, the
operation attempting to grow the address space will fail. If your system
does not have real-time memory allocation, RealTimeMemoryAllocator should
be a procedure that always returns 0.
The remaining fields say how much memory to allocate at initialization time:
- receiveBufferSize is the maximum packet size that can be received. Is the
maximum UDP packet size 4096? OSC clients can send a query to this system
asking for this maximum packet size.
- numReceiveBuffers determines how many packets at a time can be sitting
on the scheduler with messages waiting to take effect. If all the
receive buffers are tied up like this, you won't be able to receive
new packets.
- numQueuedObjects is the number of messages and packets that can be sitting
on the scheduler waiting to take effect.
- Because a message pattern may be dispatched before the message takes effect,
we need memory to store the callback pointers corresponding to a message.
numCallbackListNodes is the number of callbacks that may be stored in this
fashion. It must be at least as large as the maximum number of methods that
any one message pattern may match, but if you want to take advantage of
pre-dispatching, this should be large enough to hold all the callbacks for
all the messages waiting in the scheduler.
*/
struct OSCReceiveMemoryTuner {
void *(*InitTimeMemoryAllocator)(int numBytes);
void *(*RealTimeMemoryAllocator)(int numBytes);
int receiveBufferSize;
int numReceiveBuffers;
int numQueuedObjects;
int numCallbackListNodes;
};
/* Given an OSCReceiveMemoryTuner, return the number of bytes of
memory that would be allocated if OSCInitReceive() were called
on it. */
int OSCReceiveMemoryThatWouldBeAllocated(struct OSCReceiveMemoryTuner *t);
/* Returns FALSE if it fails to initialize */
Boolean OSCInitReceive(struct OSCReceiveMemoryTuner *t);
/**************************************************
Managing packet data structures
**************************************************/
/* You don't get to know what's in an OSCPacketBuffer. */
typedef struct OSCPacketBuffer_struct *OSCPacketBuffer;
/* Get an unused packet. Returns 0 if none are free. If you get a packet
with this procedure, it is your responsibility either to call
OSCAcceptPacket() on it (in which case the internals of the OSC Kit free
the OSCPacketBuffer after the last message in it takes effect) or to call
OSCFreePacket() on it. */
OSCPacketBuffer OSCAllocPacketBuffer(void);
/* Free. This is called automatically after the last message that was
in the packet is invoked. You shouldn't need to call this unless
you get a packet with OSCAllocPacketBuffer() and then for some reason
decide not to call OSCAcceptPacket() on it. */
void OSCFreePacket(OSCPacketBuffer p);
void OSCFreeReceiver(void);
/* Whatever code actually gets packets from the network should use these
three selectors to access the fields in the packet structure that need
to be filled in with the data from the network. */
/* Selector to get the buffer from a packet. This buffer's size will be
equal to the receiveBufferSize you passed to OSCInitReceive(). */
char *OSCPacketBufferGetBuffer(OSCPacketBuffer p);
/* Selector to get a pointer to the int that's the size count for the
data currently in a packet. (Not the capacity of the packet's buffer,
but the size of the packet that's actually stored in the buffer.) */
int *OSCPacketBufferGetSize(OSCPacketBuffer);
/* Selector to get the client's network address from a packet. This buffer's
size will be equal to the clientAddrSize you passed to OSCInitReceive().
Note that the NetworkReturnAddressPtr type is full of "const"s, so your
code that fills in the return address will probably have to cast the return
value of this procedure to some non-const type to be able to write into it. */
NetworkReturnAddressPtr OSCPacketBufferGetClientAddr(OSCPacketBuffer p);
/* Returns the capacity of packet buffers (the receiveBufferSize you passed
to OSCInitReceive()). */
int OSCGetReceiveBufferSize(void);
/**************************************************
Dealing with OpenSoundControl packets and
making the messages take effect.
**************************************************/
/* Call this as soon as a packet comes in from the network.
It will take care of anything that has to happen immediately,
but put off as much as possible of the work of parsing the
packet. (This tries to be as fast as possible in case a
lot of packets come in.) */
void OSCAcceptPacket(OSCPacketBuffer packet);
/* Call this during an otherwise idle time. It goes through
everything that's sitting in the OSC scheduler waiting to
happen and does some of the work of parsing, pattern
matching, dispatching, etc., that will have to be done
at some point before the scheduled messages can take
effect.
The return value indicates whether there is more work of
this sort that could be done. (Each time you call this,
it does only a small unit of this kind of work. If it
returns TRUE and you still have time before the next thing
you have to do, call it again.) */
Boolean OSCBeProductiveWhileWaiting(void);
/* Call this whenever enough time has passed that you want to see which
messages are now ready and have them take effect. (For example, in a
synthesizer, you might call this once per synthesis frame, just before
synthesizing the audio for that frame.)
This procedure finds the earliest time tag of all the queued messages
and invokes *all* of the queued messages with that time tag. (OSC
guarantees that messages with the same tag take effect atomically.)
If there are more messages that are ready, but with a different time
tag, this procedure does not invoke them, but returns TRUE to indicate
that more messages are ready.
*/
Boolean OSCInvokeMessagesThatAreReady(OSCTimeTag now);
/* Same thing, but invokes all of the messages whose time has come. */
void OSCInvokeAllMessagesThatAreReady(OSCTimeTag now);
Boolean NetworkReceivePacket(OSCPacketBuffer packet);
Boolean NetworkStartUDPServer(OSCPacketBuffer packet, int port_id);
Boolean NetworkPacketWaiting(OSCPacketBuffer packet);
void GoMultiCast(const char *groupname);
int IsMultiCast( char *dst);
/**************************************************
How to use this stuff
**************************************************/
/* Here's a gross approximation of how your application will invoke the
procedures in this module:
while (1) {
OSCTimeTag now = CurrentTime();
do {
if (WeAreSoLateThatWeNeedToDelayOSCMessagesToAvoidACrisis()) break;
} while (OSCInvokeMessagesThatAreReady(now) == TRUE);
SynthesizeSomeSound();
if (NetworkPacketWaiting()) {
OSCPacketBuffer p = OSCAllocPacketBuffer();
if (!p) {
Bummer();
} else {
NetworkReceivePacket(p);
OSCAcceptPacket(p);
}
}
while (TimeLeftBeforeWeHaveDoSomething()) {
if (!OSCBeProductiveWhileWaiting()) break;
}
}
*/

View File

@@ -0,0 +1,123 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-string-help.c
Procedures that could be useful to programmers writing OSC methods that
take string arguments.
by Matt Wright, 3/19/98
*/
#include <libOSC/OSC-common.h> /* For Boolean */
#include <stdint.h>
#include <sys/time.h>
#define STRING_ALIGN_PAD 4
char *OSCDataAfterAlignedString(const char *string, const char *boundary, char **errorMsg) {
int i;
if ((boundary - string) %4 != 0) {
fatal_error("DataAfterAlignedString: bad boundary\n");
}
for (i = 0; string[i] != '\0'; i++) {
if (string + i >= boundary) {
(*errorMsg) = "DataAfterAlignedString: Unreasonably long string";
return 0;
}
}
/* Now string[i] is the first null character */
i++;
for (; (i % STRING_ALIGN_PAD) != 0; i++) {
if (string + i >= boundary) {
(*errorMsg) = "Unreasonably long string";
return 0;
}
if (string[i] != '\0') {
(*errorMsg) = "Incorrectly padded string.";
return 0;
}
}
return (char *) (string+i);
}
int OSCPaddedStrlen(const char *s) {
int i;
for (i = 0; *s != '\0'; s++, i++) {
/* do nothing */
}
/* Now i is the length with no null bytes. We need 1-4 null bytes,
to make the total length a multiple of 4. So we add 4, as if
we need 4 null bytes, then & 0xfffffffc to round down to the nearest
multiple of 4. */
return (i + 4) & 0xfffffffc;
}
char *OSCPaddedStrcpy(char *target, const char *source) {
while ( (*target++) = (*source++)) {
/* do nothing */
}
/* That copied one null byte */
while (((int) target) % 4 != 0) {
*target = '\0';
target++;
}
return target;
}
Boolean OSCParseStringList(const char *result[], int *numStrings, int maxStrings,
const char *args, int numBytes) {
int numFound;
const char *p;
const char *boundary = args + numBytes;
char *errorMessage;
p = args;
for (numFound = 0; numFound < maxStrings; ++numFound) {
if (p == boundary) {
*numStrings = numFound;
return TRUE;
}
result[numFound] = p;
p = OSCDataAfterAlignedString(p, boundary, &errorMessage);
if (p == 0) return FALSE;
}
return FALSE;
}

View File

@@ -0,0 +1,70 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/* OSC-string-help.h
Procedures that could be useful to programmers writing OSC methods that
take string arguments.
by Matt Wright, 3/19/98
*/
/* Use this to deal with OSC null-padded 4 byte-aligned strings
The argument is a block of data beginning with a string. The string
has (presumably) been padded with extra null characters so that the
overall length is a multiple of 4 bytes. Return a pointer to the next
byte after the null byte(s). The boundary argument points to the
character after the last valid character in the buffer---if the string
hasn't ended by there, something's wrong.
If the data looks wrong, return 0, and set *errorMsg */
char *OSCDataAfterAlignedString(const char *string, const char *boundary, char **errorMsg);
/* Given a normal C-style string with a single padding byte, return the
length of the string including the necessary 1-4 padding bytes.
(Basically strlen()+1 rounded up to the next multiple of 4.) */
int OSCPaddedStrlen(const char *s);
/* Copy a given C-style string into the given destination, including the
requisite padding byte(s). Unlike strcpy(), this returns a pointer to
the next character after the copied string's null bytes, like
what OSCDataAfterAlignedString() returns. */
char *OSCPaddedStrcpy(char *target, const char *source);
/* Given an args pointer that should be nothing but a list of strings, fill
result[] with pointers to the beginnings of each string, and set
*numStrings to be the number of strings found. maxStrings gives the size
of the result array. Return FALSE if any strings are malformatted or if
there are more than maxStrings many strings. */
Boolean OSCParseStringList(const char *result[], int *numStrings, int maxStrings,
const char *args, int numBytes);

View File

@@ -0,0 +1,56 @@
#include <netinet/in.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#ifndef OSCH
#define OSCH
#ifndef TRUE
typedef int Boolean;
#define TRUE 1
#define FALSE 0
#endif
/* Fixed byte width types */
typedef int int4; /* 4 byte int */
typedef struct NetworkReturnAddressStruct_t {
struct sockaddr_in cl_addr; /* client information */
struct sockaddr_in my_addr; /* us */
int clilen;
int sockfd;
fd_set readfds;
struct timeval tv;
int fdmax;
} NetworkReturnAddressStruct;
typedef struct OSCPacketBuffer_struct {
char *buf; /* Contents of network packet go here */
int n; /* Overall size of packet */
int refcount; /* # queued things using memory from this buffer */
struct OSCPacketBuffer_struct *nextFree; /* For linked list of free packets */
Boolean returnAddrOK; /* Because returnAddr points to memory we need to
store future return addresses, we set this
field to FALSE in situations where a packet
buffer "has no return address" instead of
setting returnAddr to 0 */
void *returnAddr; /* Addr of client this packet is from */
/* This was of type NetworkReturnAddressPtr, but the constness
was making it impossible for me to initialize it. There's
probably a better way that I don't understand. */
} OSCPacketBuffer;
struct OSCReceiveMemoryTuner {
void *(*InitTimeMemoryAllocator)(int numBytes);
void *(*RealTimeMemoryAllocator)(int numBytes);
int receiveBufferSize;
int numReceiveBuffers;
int numQueuedObjects;
int numCallbackListNodes;
};
#endif

View File

@@ -0,0 +1,174 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC_timeTag.c: library for manipulating OSC time tags
Matt Wright, 5/29/97
Version 0.2 (9/11/98): cleaned up so no explicit type names in the .c file.
*/
#include <libOSC/OSC-timetag.h>
#include <stdint.h>
#include <sys/time.h>
#ifdef HAS8BYTEINT
#define TWO_TO_THE_32_FLOAT 4294967296.0f
OSCTimeTag OSCTT_Immediately(void) {
return (OSCTimeTag) 1;
}
OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) {
return (OSCTimeTag) 0xffffffffffffffff;
}
OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) {
int8 offset = (int8) (secondsOffset * TWO_TO_THE_32_FLOAT);
/* printf("* OSCTT_PlusSeconds %llx plus %f seconds (i.e., %lld offset) is %llx\n", original,
secondsOffset, offset, original + offset); */
return original + offset;
}
int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) {
#if 0
printf("***** OSCTT_Compare(%llx, %llx): %d\n", left, right,
(left<right) ? -1 : ((left == right) ? 0 : 1));
#endif
if (left < right) {
return -1;
} else if (left == right) {
return 0;
} else {
return 1;
}
}
#ifdef __sgi
#include <sys/time.h>
#define SECONDS_FROM_1900_to_1970 2208988800 /* 17 leap years */
#define TWO_TO_THE_32_OVER_ONE_MILLION 4295
OSCTimeTag OSCTT_CurrentTime(void) {
uint8 result;
uint4 usecOffset;
struct timeval tv;
struct timezone tz;
BSDgettimeofday(&tv, &tz);
/* First get the seconds right */
result = (unsigned) SECONDS_FROM_1900_to_1970 +
(unsigned) tv.tv_sec -
(unsigned) 60 * tz.tz_minuteswest +
(unsigned) (tz.tz_dsttime ? 3600 : 0);
#if 0
/* No timezone, no DST version ... */
result = (unsigned) SECONDS_FROM_1900_to_1970 +
(unsigned) tv.tv_sec;
#endif
/* make seconds the high-order 32 bits */
result = result << 32;
/* Now get the fractional part. */
usecOffset = (unsigned) tv.tv_usec * (unsigned) TWO_TO_THE_32_OVER_ONE_MILLION;
/* printf("** %ld microsec is offset %x\n", tv.tv_usec, usecOffset); */
result += usecOffset;
/* printf("* OSCTT_CurrentTime is %llx\n", result); */
return result;
}
#else /* __sgi */
/* Instead of asking your operating system what time it is, it might be
clever to find out the current time at the instant your application
starts audio processing, and then keep track of the number of samples
output to know how much time has passed. */
/* Loser version for systems that have no ability to tell the current time: */
OSCTimeTag OSCTT_CurrentTime(void) {
return (OSCTimeTag) 1;
}
#endif /* __sgi */
#else /* Not HAS8BYTEINT */
OSCTimeTag OSCTT_CurrentTime(void) {
OSCTimeTag result;
result.seconds = 0;
result.fraction = 1;
return result;
}
OSCTimeTag OSCTT_BiggestPossibleTimeTag(void) {
OSCTimeTag result;
result.seconds = 0xffffffff;
result.fraction = 0xffffffff;
return result;
}
OSCTimeTag OSCTT_Immediately(void) {
OSCTimeTag result;
result.seconds = 0;
result.fraction = 1;
return result;
}
OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset) {
OSCTimeTag result;
result.seconds = 0;
result.fraction = 1;
return result;
}
int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right) {
/* Untested! */
int highResult = left.seconds - right.seconds;
if (highResult != 0) return highResult;
return left.fraction - right.fraction;
}
#endif /* HAS8BYTEINT */

View File

@@ -0,0 +1,91 @@
/*
Copyright <20> 1998. The Regents of the University of California (Regents).
All Rights Reserved.
Written by Matt Wright, The Center for New Music and Audio Technologies,
University of California, Berkeley.
Permission to use, copy, modify, distribute, and distribute modified versions
of this software and its documentation without fee and without a signed
licensing agreement, is hereby granted, provided that the above copyright
notice, this paragraph and the following two paragraphs appear in all copies,
modifications, and distributions.
IN NO EVENT SHALL REGENTS BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING
OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF REGENTS HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
REGENTS SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED
HEREUNDER IS PROVIDED "AS IS". REGENTS HAS NO OBLIGATION TO PROVIDE
MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
The OpenSound Control WWW page is
http://www.cnmat.berkeley.edu/OpenSoundControl
*/
/*
OSC_timeTag.h: library for manipulating OSC time tags
Matt Wright, 5/29/97
Time tags in OSC have the same format as in NTP: 64 bit fixed point, with the
top 32 bits giving number of seconds sinve midnight 1/1/1900 and the bottom
32 bits giving fractional parts of a second. We represent this by an 8-byte
unsigned long if possible, or else a struct.
NB: On many architectures with 8-byte ints, it's illegal (like maybe a bus error)
to dereference a pointer to an 8 byte int that's not 8-byte aligned.
*/
#ifndef OSC_TIMETAG
#define OSC_TIMETAG
#ifdef __sgi
#define HAS8BYTEINT
/* You may have to change this typedef if there's some other
way to specify 8 byte ints on your system */
typedef long long int8;
typedef unsigned long long uint8;
typedef unsigned long uint4;
#else
/* You may have to redefine this typedef if ints on your system
aren't 4 bytes. */
typedef unsigned int uint4;
#endif
#ifdef HAS8BYTEINT
typedef uint8 OSCTimeTag;
#else
typedef struct {
uint4 seconds;
uint4 fraction;
} OSCTimeTag;
#endif
/* Return a time tag representing the current time (as of when this
procedure is called). */
OSCTimeTag OSCTT_CurrentTime(void);
/* Return the time tag 0x0000000000000001, indicating to the receiving device
that it should process the message immediately. */
OSCTimeTag OSCTT_Immediately(void);
/* Return the time tag 0xffffffffffffffff, a time so far in the future that
it's effectively infinity. */
OSCTimeTag OSCTT_BiggestPossibleTimeTag(void);
/* Given a time tag and a number of seconds to add to the time tag, return
the new time tag */
OSCTimeTag OSCTT_PlusSeconds(OSCTimeTag original, float secondsOffset);
/* Compare two time tags. Return negative if first is < second, 0 if
they're equal, and positive if first > second. */
int OSCTT_Compare(OSCTimeTag left, OSCTimeTag right);
#endif /* OSC_TIMETAG */

26
veejay-ng/libOSC/libosc.h Normal file
View File

@@ -0,0 +1,26 @@
#ifndef _LIBOSC_H_INCLUDED
#define _LIBOSC_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#include <libOSC/OSC-common.h>
#include <libOSC/OSC-timetag.h>
#include <libOSC/OSC-address-space.h>
#include <libOSC/OSC-dispatch.h>
#include <libOSC/OSC-receive.h>
#include <libOSC/OSC-callbacklist.h>
#include <libOSC/OSC-drop.h>
#include <libOSC/OSC-internal-messages.h>
#include <libOSC/OSC-pattern-match.h>
#include <libOSC/OSC-priority-queue.h>
#include <libOSC/OSC-string-help.h>
#include <libOSC/NetworkReturnAddress.h>
#include <libOSC/NetworkUDP.h>
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,11 @@
# Makefile for veejay
MAINTAINERCLEANFILES = Makefile.in
INCLUDES = -I$(top_srcdir) -I$(includedir) -I$(top_srcdir)/vjmem \
-I$(top_srcdir)/vjmsg \
$(MJPEGTOOLS_CFLAGS) ${FFMPEG_CFLAGS}
VJEL_LIB_FILE = libel.la
noinst_LTLIBRARIES = $(VJEL_LIB_FILE)
libel_la_SOURCES = vj-mmap.c elcache.c avilib.c lav_io.c vj-dv.c rawdv.c vj-avcodec.c vj-el.c

516
veejay-ng/libel/Makefile.in Normal file
View File

@@ -0,0 +1,516 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Makefile for veejay
SOURCES = $(libel_la_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = libel
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libel_la_LIBADD =
am_libel_la_OBJECTS = vj-mmap.lo elcache.lo avilib.lo lav_io.lo \
vj-dv.lo rawdv.lo vj-avcodec.lo vj-el.lo
libel_la_OBJECTS = $(am_libel_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libel_la_SOURCES)
DIST_SOURCES = $(libel_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALTIVEC_CFLAGS = @ALTIVEC_CFLAGS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_AVCODEC_CFLAGS = @FFMPEG_AVCODEC_CFLAGS@
FFMPEG_AVCODEC_LIBS = @FFMPEG_AVCODEC_LIBS@
FFMPEG_AVFORMAT_CFLAGS = @FFMPEG_AVFORMAT_CFLAGS@
FFMPEG_AVFORMAT_LIBS = @FFMPEG_AVFORMAT_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@
GLIB_LIBS = @GLIB_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
HAVE_ALTIVEC_FALSE = @HAVE_ALTIVEC_FALSE@
HAVE_ALTIVEC_TRUE = @HAVE_ALTIVEC_TRUE@
HAVE_ASM_MMX2_FALSE = @HAVE_ASM_MMX2_FALSE@
HAVE_ASM_MMX2_TRUE = @HAVE_ASM_MMX2_TRUE@
HAVE_ASM_MMX_FALSE = @HAVE_ASM_MMX_FALSE@
HAVE_ASM_MMX_TRUE = @HAVE_ASM_MMX_TRUE@
HAVE_ASM_NASM_FALSE = @HAVE_ASM_NASM_FALSE@
HAVE_ASM_NASM_TRUE = @HAVE_ASM_NASM_TRUE@
HAVE_ASM_SSE2_FALSE = @HAVE_ASM_SSE2_FALSE@
HAVE_ASM_SSE2_TRUE = @HAVE_ASM_SSE2_TRUE@
HAVE_ASM_SSE_FALSE = @HAVE_ASM_SSE_FALSE@
HAVE_ASM_SSE_TRUE = @HAVE_ASM_SSE_TRUE@
HAVE_DL_DLOPEN_FALSE = @HAVE_DL_DLOPEN_FALSE@
HAVE_DL_DLOPEN_TRUE = @HAVE_DL_DLOPEN_TRUE@
HAVE_JACK_FALSE = @HAVE_JACK_FALSE@
HAVE_JACK_TRUE = @HAVE_JACK_TRUE@
HAVE_MMX2_FALSE = @HAVE_MMX2_FALSE@
HAVE_MMX2_TRUE = @HAVE_MMX2_TRUE@
HAVE_MMX_FALSE = @HAVE_MMX_FALSE@
HAVE_MMX_TRUE = @HAVE_MMX_TRUE@
HAVE_PPCCPU_FALSE = @HAVE_PPCCPU_FALSE@
HAVE_PPCCPU_TRUE = @HAVE_PPCCPU_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SSE2_FALSE = @HAVE_SSE2_FALSE@
HAVE_SSE2_TRUE = @HAVE_SSE2_TRUE@
HAVE_SSE_FALSE = @HAVE_SSE_FALSE@
HAVE_SSE_TRUE = @HAVE_SSE_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_X86CPU_FALSE = @HAVE_X86CPU_FALSE@
HAVE_X86CPU_TRUE = @HAVE_X86CPU_TRUE@
HAVE_XML2_FALSE = @HAVE_XML2_FALSE@
HAVE_XML2_TRUE = @HAVE_XML2_TRUE@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
LIBGETOPT_LIB = @LIBGETOPT_LIB@
LIBM_LIBS = @LIBM_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_RELEASE = @LT_RELEASE@
LT_REVISION = @LT_REVISION@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MJPEGTOOLS_CFLAGS = @MJPEGTOOLS_CFLAGS@
MJPEGTOOLS_LIBS = @MJPEGTOOLS_LIBS@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PROGRAM_NOPIC = @PROGRAM_NOPIC@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUPPORT_READ_DV2_FALSE = @SUPPORT_READ_DV2_FALSE@
SUPPORT_READ_DV2_TRUE = @SUPPORT_READ_DV2_TRUE@
V4LCONF_LIBS = @V4LCONF_LIBS@
VERSION = @VERSION@
XML2_CONFIG = @XML2_CONFIG@
XML_CPPFLAGS = @XML_CPPFLAGS@
XML_LIBS = @XML_LIBS@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
MAINTAINERCLEANFILES = Makefile.in
INCLUDES = -I$(top_srcdir) -I$(includedir) -I$(top_srcdir)/vjmem \
-I$(top_srcdir)/vjmsg \
$(MJPEGTOOLS_CFLAGS) ${FFMPEG_CFLAGS}
VJEL_LIB_FILE = libel.la
noinst_LTLIBRARIES = $(VJEL_LIB_FILE)
libel_la_SOURCES = vj-mmap.c elcache.c avilib.c lav_io.c vj-dv.c rawdv.c vj-avcodec.c vj-el.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libel/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu libel/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libel.la: $(libel_la_OBJECTS) $(libel_la_DEPENDENCIES)
$(LINK) $(libel_la_LDFLAGS) $(libel_la_OBJECTS) $(libel_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/avilib.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elcache.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lav_io.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawdv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vj-avcodec.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vj-dv.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vj-el.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vj-mmap.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

1299
veejay-ng/libel/avilib.c Normal file

File diff suppressed because it is too large Load Diff

186
veejay-ng/libel/avilib.h Normal file
View File

@@ -0,0 +1,186 @@
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef AVILIB_H
#define AVILIB_H
#include <mjpegtools/mjpeg_types.h>
#include <libel/vj-mmap.h>
typedef struct
{
long pos;
long len;
} video_index_entry;
typedef struct
{
long pos;
long len;
long tot;
} audio_index_entry;
typedef struct
{
long fdes; /* File descriptor of AVI file */
long mode; /* 0 for reading, 1 for writing */
long width; /* Width of a video frame */
long height; /* Height of a video frame */
double fps; /* Frames per second */
char compressor[8]; /* Type of compressor, 4 bytes + padding for 0 byte */
int ffmpeg_codec_id; /* Codec ID to avoid strcmp for compressor */
long video_strn; /* Video stream number */
long video_frames; /* Number of video frames */
uint8_t video_tag[4]; /* Tag of video data */
long video_pos; /* Number of next frame to be read
(if index present) */
long a_fmt; /* Audio format, see #defines below */
long a_chans; /* Audio channels, 0 for no audio */
long a_rate; /* Rate in Hz */
long a_bits; /* bits per audio clip */
long audio_strn; /* Audio stream number */
long audio_bytes; /* Total number of bytes of audio data */
long audio_chunks; /* Chunks of audio data in the file */
uint8_t audio_tag[4]; /* Tag of audio data */
long audio_posc; /* Audio position: chunk */
long audio_posb; /* Audio position: byte within chunk */
long pos; /* position in file */
long n_idx; /* number of index entries actually filled */
long max_idx; /* number of index entries actually allocated */
uint8_t (*idx)[16]; /* index entries (AVI idx1 tag) */
video_index_entry * video_index;
audio_index_entry * audio_index;
long last_pos; /* Position of last frame written */
long last_len; /* Length of last frame written */
int must_use_index; /* Flag if frames are duplicated */
long movi_start;
mmap_region_t *mmap_region;
off_t mmap_offset;
size_t mmap_size;
} avi_t;
#define AVI_MODE_WRITE 0
#define AVI_MODE_READ 1
/* The error codes delivered by avi_open_input_file */
#define AVI_ERR_SIZELIM 1 /* The write of the data would exceed
the maximum size of the AVI file.
This is more a warning than an error
since the file may be closed safely */
#define AVI_ERR_OPEN 2 /* Error opening the AVI file - wrong path
name or file nor readable/writable */
#define AVI_ERR_READ 3 /* Error reading from AVI File */
#define AVI_ERR_WRITE 4 /* Error writing to AVI File,
disk full ??? */
#define AVI_ERR_WRITE_INDEX 5 /* Could not write index to AVI file
during close, file may still be
usable */
#define AVI_ERR_CLOSE 6 /* Could not write header to AVI file
or not truncate the file during close,
file is most probably corrupted */
#define AVI_ERR_NOT_PERM 7 /* Operation not permitted:
trying to read from a file open
for writing or vice versa */
#define AVI_ERR_NO_MEM 8 /* malloc failed */
#define AVI_ERR_NO_AVI 9 /* Not an AVI file */
#define AVI_ERR_NO_HDRL 10 /* AVI file has no has no header list,
corrupted ??? */
#define AVI_ERR_NO_MOVI 11 /* AVI file has no has no MOVI list,
corrupted ??? */
#define AVI_ERR_NO_VIDS 12 /* AVI file contains no video data */
#define AVI_ERR_NO_IDX 13 /* The file has been opened with
getIndex==0, but an operation has been
performed that needs an index */
#define AVI_ERR_EMPTY 15 /* AVI file is empty (only header) */
/* Possible Audio formats */
#define WAVE_FORMAT_UNKNOWN (0x0000)
#define WAVE_FORMAT_PCM (0x0001)
#define WAVE_FORMAT_ADPCM (0x0002)
#define WAVE_FORMAT_IBM_CVSD (0x0005)
#define WAVE_FORMAT_ALAW (0x0006)
#define WAVE_FORMAT_MULAW (0x0007)
#define WAVE_FORMAT_OKI_ADPCM (0x0010)
#define WAVE_FORMAT_DVI_ADPCM (0x0011)
#define WAVE_FORMAT_DIGISTD (0x0015)
#define WAVE_FORMAT_DIGIFIX (0x0016)
#define WAVE_FORMAT_YAMAHA_ADPCM (0x0020)
#define WAVE_FORMAT_DSP_TRUESPEECH (0x0022)
#define WAVE_FORMAT_GSM610 (0x0031)
#define IBM_FORMAT_MULAW (0x0101)
#define IBM_FORMAT_ALAW (0x0102)
#define IBM_FORMAT_ADPCM (0x0103)
avi_t* AVI_open_output_file(char * filename);
void AVI_set_video(avi_t *AVI, int width, int height, double fps, const char *compressor);
void AVI_set_audio(avi_t *AVI, int channels, long rate, int bits, int format);
int AVI_write_frame(avi_t *AVI, uint8_t *data, long bytes);
int AVI_dup_frame(avi_t *AVI);
int AVI_write_audio(avi_t *AVI, uint8_t *data, long bytes);
long AVI_bytes_remain(avi_t *AVI);
int AVI_close(avi_t *AVI);
int AVI_fileno(avi_t *AVI);
avi_t *AVI_open_input_file(char *filename, int getIndex, int mmap_size);
long AVI_video_frames(avi_t *AVI);
int AVI_video_width(avi_t *AVI);
int AVI_video_height(avi_t *AVI);
double AVI_frame_rate(avi_t *AVI);
char* AVI_video_compressor(avi_t *AVI);
int AVI_video_compressor_type(avi_t *AVI);
int AVI_audio_channels(avi_t *AVI);
int AVI_audio_bits(avi_t *AVI);
int AVI_audio_format(avi_t *AVI);
long AVI_audio_rate(avi_t *AVI);
long AVI_audio_bytes(avi_t *AVI);
long AVI_frame_size(avi_t *AVI, long frame);
int AVI_seek_start(avi_t *AVI);
int AVI_set_video_position(avi_t *AVI, long frame);
long AVI_read_frame(avi_t *AVI, uint8_t *vidbuf);
int AVI_set_audio_position(avi_t *AVI, long byte);
long AVI_read_audio(avi_t *AVI, uint8_t *audbuf, long bytes);
int AVI_read_data(avi_t *AVI, uint8_t *vidbuf, long max_vidbuf,
uint8_t *audbuf, long max_audbuf,
long *len);
void AVI_print_error(const char *str);
const char *AVI_strerror(void);
const char *AVI_syserror(void);
#endif

267
veejay-ng/libel/elcache.c Normal file
View File

@@ -0,0 +1,267 @@
/*
* Copyright (C) 2002-2006 Niels Elburg <nelburg@looze.net>
*
* This program is free software you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
/*
Cache frames from file to memory
*/
/** \defgroup elcache Efficient Frame Caching
*
* Veejay stores each retrieved frame (from the EDL) in a temporary cache.
* The cache has at most N slots, in each slot an image buffer is placed
* together with a minimum of bookkeeping (frame number and decoder ID)
*
* The caching mechanism will trash when loading a new series of frames.
* As unknown frames are loaded, old frames will be discarded.
* A very long sample will thus beat the caching mechanism if the sample only
* loops forward.
*
* This cache does *not* read-ahead, instead it keeps already played frames for repated usage.
* The caching mechanism is intended for sample playback usage. It is
* only used when looping samples that typically access compressed image data repeatedly.
* The price for such a situation is the time needed to memory-to-memory copy the image buffer.
*
* Veejay estimates the number of slots it can claim by taking a percentage
* of the available system memory.
* The caching mechanism is disabled by default.
*
*/
#include <config.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <libvjmem/vjmem.h>
#include <libvjmsg/vj-common.h>
#include <libel/elcache.h>
#ifdef STRICT_CHECKING
#include <assert.h>
#endif
//! \typedef cache_slot_t Cache Slot for holding an image buffer
typedef struct
{
int size;
int fmt;
long num;
void *buffer;
} cache_slot_t;
//! \typedef cache_t Cache Container for holding N cache slots
typedef struct
{
cache_slot_t **cache;
int len;
long *index;
} cache_t;
//! Find an available slot
/**
\param v Cache
\return Index
*/
static int cache_free_slot(cache_t *v)
{
int i;
for( i = 0; i < v->len; i ++ )
if( v->index[i] == -1 ) return i;
return -1;
}
static long total_mem_used_ = 0;
//! Push an image buffer to a slot
/**
\param v Cache
\param free_slot Cache Index
\param linbuf Image buffer
\param frame_num Frame Number
\param buf_len Length of Image Buffer
\param decoder_id Decoder ID
*/
static void cache_claim_slot(cache_t *v, int free_slot, uint8_t *linbuf, long frame_num,int buf_len, int decoder_id)
{
// create new node
cache_slot_t *data = (cache_slot_t*) vj_malloc(sizeof(cache_slot_t));
data->size = buf_len;
data->num = frame_num;
data->fmt = decoder_id;
data->buffer = vj_malloc( buf_len );
#ifdef STRICT_CHECKING
assert( v->index[free_slot] != frame_num );
#endif
// clear old buffer
if( v->index[free_slot] >= 0 )
{
cache_slot_t *del_slot = v->cache[free_slot];
total_mem_used_ -= del_slot->size;
free( del_slot->buffer );
free( del_slot );
v->cache[free_slot] = NULL;
}
veejay_memcpy( data->buffer, linbuf, buf_len );
v->index[ free_slot ] = frame_num;
v->cache[ free_slot ] = data;
total_mem_used_ += buf_len;
}
//! Find a cached frame
/**
\param v Cache
\param frame_num Frame Number
\return Index of cached frame
*/
static int cache_find_slot( cache_t *v, long frame_num )
{
int i;
int k = 0;
long n = 0;
for( i = 0; i < v->len ; i ++ )
{
long d = abs( v->index[i] - frame_num );
if( d > n )
{ n = d; k = i ; }
}
return k;
}
//! Find a Frame in the Cache
/**
\param v Cache
\param frame_num Frame Number
\return Error or Index
*/
static int cache_locate_slot( cache_t *v, long frame_num)
{
int i;
for( i = 0; i < v->len ; i ++ )
if( v->index[i] == frame_num )
return i;
return -1;
}
//! Initialize the Caching System
/**
\param n_slots Maximum slots for this Cache
\return New Cache
*/
void *init_cache( unsigned int n_slots )
{
if(n_slots <= 0)
return NULL;
cache_t *v = (cache_t*) vj_malloc(sizeof(cache_t));
v->len = n_slots;
v->cache = (cache_slot_t**) vj_malloc(sizeof(cache_slot_t*) * v->len );
memset( v->cache, 0, sizeof(cache_slot_t*) * v->len );
v->index = (long*) malloc(sizeof(long) * v->len );
memset( v->index, -1, sizeof(long) * v->len );
return (void*) v;
}
//! Clear all slots in Cache
/**
\param cache Cache
*/
void reset_cache(void *cache)
{
int i = 0;
cache_t *v = (cache_t*) cache;
memset( v->index, -1, sizeof(long) * v->len );
for( i = 0; i < v->len; i ++ )
{
if( v->cache[i] )
{
total_mem_used_ -= v->cache[i]->size;
if(v->cache[i]->buffer)
free(v->cache[i]->buffer);
free(v->cache[i]);
v->cache[i] = NULL;
};
}
}
int cache_avail_mb()
{
return ( total_mem_used_ == 0 ? 0 : total_mem_used_ / (1024 * 1024 ));
}
//! Destroy Cache
/**
\param cache Cache
*/
void free_cache(void *cache)
{
cache_t *v = (cache_t*) cache;
reset_cache( cache );
free(v->cache);
free(v->index);
free(v);
}
int cache_frame( void *cache, uint8_t *linbuf, int buflen, long frame_num , int decoder_id)
{
cache_t *v = (cache_t*) cache;
#ifdef STRICT_CHECKING
assert( cache != NULL );
assert( linbuf != NULL );
assert( buflen > 0 );
assert( frame_num >= 0 );
#endif
int slot_num = cache_free_slot( cache );
if( slot_num == -1 )
slot_num = cache_find_slot( v, frame_num );
#ifdef STRICT_CHECKING
assert(slot_num >= 0 );
#endif
cache_claim_slot(v, slot_num, linbuf, frame_num, buflen, decoder_id);
return 1;
}
//! Get a Frame from the Cache
/**
\param cache Cache
\param frame_num Frame Number
\param buf_len Buffer Length
\param decoder_id Decoder ID
\return Pointer to Image buffer or NULL
*/
uint8_t *get_cached_frame( void *cache, long frame_num, int *buf_len, int *decoder_id )
{
cache_t *v = (cache_t*) cache;
int slot = cache_locate_slot( v, frame_num );
if( slot == -1 )
return NULL;
cache_slot_t *data = v->cache[ slot ];
*buf_len = data->size;
*decoder_id = data->fmt;
#ifdef STRICT_CHECKING
assert( data->num == frame_num );
#endif
return (uint8_t*) data->buffer;
}

28
veejay-ng/libel/elcache.h Normal file
View File

@@ -0,0 +1,28 @@
/*
* Copyright (C) 2002-2006 Niels Elburg <nelburg@looze.net>
*
* This program is free software you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#ifndef ELCACHE_H
#define ELCACHE_H
uint8_t *get_cached_frame( void *cache, long frame_num, int *buf_len, int *decoder_id );
int cache_frame( void *cache, uint8_t *linbuf, int buflen, long frame_num , int decoder_id);
void free_cache(void *cache);
void *init_cache( unsigned int n_slots );
#endif

1214
veejay-ng/libel/lav_io.c Normal file

File diff suppressed because it is too large Load Diff

124
veejay-ng/libel/lav_io.h Normal file
View File

@@ -0,0 +1,124 @@
/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef LAV_IO_H
#define LAV_IO_H
#include <config.h>
#ifdef HAVE_MLT
#include <mlt/framework/mlt.h>
#endif
#include <libel/avilib.h>
#ifdef SUPPORT_READ_DV2
#include <libel/rawdv.h>
#endif
// play with mlt here, avformat producer/several consumers (we can write to)
// for normalized output (720x576/480) , dv1394 capture and playback
#include <mjpegtools/yuv4mpeg.h>
#define LAV_INTER_UNKNOWN Y4M_UNKNOWN
#define LAV_NOT_INTERLACED Y4M_ILACE_NONE
#define LAV_INTER_TOP_FIRST Y4M_ILACE_TOP_FIRST
#define LAV_INTER_BOTTOM_FIRST Y4M_ILACE_BOTTOM_FIRST
/* chroma_format */
#define CHROMAUNKNOWN 0
#define CHROMA420 1
#define CHROMA422 2
#define CHROMA444 3
#define CHROMA411 4
/* raw data format of a single frame */
#define DATAFORMAT_MJPG 0
#define DATAFORMAT_DV2 1
#define DATAFORMAT_YUV420 2
#define DATAFORMAT_YUV422 3
#define DATAFORMAT_DIVX 4
#define DATAFORMAT_MPEG4 5
typedef struct
{
#ifdef HAVE_MLT
mlt_properties properties;
mlt_producer producer;
mlt_image_format format;
mlt_audio_format afmt;
#endif
avi_t *avi_fd;
#ifdef SUPPORT_READ_DV2
dv_t *dv_fd;
#endif
int jpeg_fd;
char *jpeg_filename;
#ifdef USE_GDK_PIXBUF
void *picture;
#endif
int format;
int interlacing;
int sar_w; /* "clip aspect ratio" width */
int sar_h; /* "clip aspect ratio" height */
int has_audio;
int bps;
int is_MJPG;
int MJPG_chroma;
int mmap_size;
} lav_file_t;
int lav_query_APP_marker(char format);
int lav_query_APP_length(char format);
int lav_query_polarity(char format);
lav_file_t *lav_open_output_file(char *filename, char format,
int width, int height, int interlaced, double fps,
int asize, int achans, long arate);
int lav_close(lav_file_t *lav_file);
int lav_write_frame(lav_file_t *lav_file, uint8_t *buff, long size, long count);
int lav_write_audio(lav_file_t *lav_file, uint8_t *buff, long samps);
long lav_video_frames(lav_file_t *lav_file);
int lav_video_width(lav_file_t *lav_file);
int lav_video_height(lav_file_t *lav_file);
double lav_frame_rate(lav_file_t *lav_file);
int lav_video_interlacing(lav_file_t *lav_file);
void lav_video_clipaspect(lav_file_t *lav_file, int *sar_w, int *sar_h);
int lav_video_is_MJPG(lav_file_t *lav_file);
int lav_is_DV(lav_file_t *lav_file);
int lav_video_MJPG_chroma(lav_file_t *lav_file);
const char *lav_video_compressor(lav_file_t *lav_file);
int lav_video_compressor_type(lav_file_t *lav_file);
int lav_audio_channels(lav_file_t *lav_file);
int lav_audio_bits(lav_file_t *lav_file);
long lav_audio_rate(lav_file_t *lav_file);
long lav_audio_clips(lav_file_t *lav_file);
long lav_frame_size(lav_file_t *lav_file, long frame);
int lav_seek_start(lav_file_t *lav_file);
int lav_set_video_position(lav_file_t *lav_file, long frame);
int lav_read_frame(lav_file_t *lav_file, uint8_t *vidbuf);
int lav_set_audio_position(lav_file_t *lav_file, long clip);
long lav_read_audio(lav_file_t *lav_file, uint8_t *audbuf, long samps);
int lav_filetype(lav_file_t *lav_file);
lav_file_t *lav_open_input_file(char *filename, int mmap_size);
int lav_get_field_size(uint8_t * jpegdata, long jpeglen);
const char *lav_strerror(void);
int lav_fileno( lav_file_t *lav_file );
void lav_set_default_chroma(int c);
#ifdef USE_GDK_PIXBUF
uint8_t *lav_get_frame_ptr( lav_file_t *lav_file );
void lav_set_project( int w, int h, float fps, int shift );
#endif
#endif

325
veejay-ng/libel/rawdv.c Normal file
View File

@@ -0,0 +1,325 @@
/*
* Linux VeeJay
*
* Copyright(C)2002-2004 Niels Elburg <nelburg@looze.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License , or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
*/
#include <config.h>
#include <sys/types.h>
#ifdef SUPPORT_READ_DV2
#include <libel/rawdv.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <libvjmsg/vj-common.h>
#include <libvjmem/vjmem.h>
#include <libel/vj-mmap.h>
#include <libdv/dv.h>
#include <ffmpeg/avcodec.h>
#include <errno.h>
#define DV_PAL_SIZE 144000
#define DV_NTSC_SIZE 120000
static void rawdv_free(dv_t *dv)
{
if(dv->filename) free(dv->filename);
if(dv->buf) free(dv->buf);
if(dv) free(dv);
}
int rawdv_close(dv_t *dv)
{
close(dv->fd);
mmap_free(dv->mmap_region);
rawdv_free( dv);
return 1;
}
int rawdv_sampling(dv_t *dv)
{
switch(dv->fmt)
{
case e_dv_sample_411: return 4;
case e_dv_sample_422: return 2;
case e_dv_sample_420: return 1;
}
return 3;
}
#define DV_HEADER_SIZE 120000
dv_t *rawdv_open_input_file(const char *filename, int mmap_size)
{
dv_t *dv = (dv_t*) vj_malloc(sizeof(dv_t));
if(!dv) return NULL;
memset(dv, 0, sizeof(dv_t));
dv_decoder_t *decoder = NULL;
uint8_t *tmp = (uint8_t*) vj_malloc(sizeof(uint8_t) * DV_HEADER_SIZE);
memset( tmp, 0, sizeof(uint8_t) * DV_HEADER_SIZE);
off_t file_size = 0;
int n = 0;
decoder = dv_decoder_new( 1,0,0);
dv->fd = open( filename, O_RDONLY );
if(!dv->fd)
{
dv_decoder_free(decoder);
rawdv_free(dv);
veejay_msg(VEEJAY_MSG_ERROR, "Cannot open '%s'",filename);
if(tmp)free(tmp);
return NULL;
}
/* fseek sometimes lies about filesize - seek to end (lseek returns file offset from start)*/
file_size = lseek( dv->fd, 0, SEEK_END );
if( file_size < DV_HEADER_SIZE)
{
dv_decoder_free(decoder);
veejay_msg(VEEJAY_MSG_ERROR, "% is too small! ", filename);
rawdv_free(dv);
if(tmp) free(tmp);
return NULL;
}
/* And back to start offset */
if( lseek(dv->fd,0, SEEK_SET ) < 0)
{
dv_decoder_free(decoder);
veejay_msg(VEEJAY_MSG_ERROR, "Seek errror");
rawdv_free(dv);
if(tmp) free(tmp);
return NULL;
}
dv->mmap_region = NULL;
if( mmap_size > 0 ) // user wants mmap
{
dv->mmap_region = mmap_file( dv->fd, 0, (mmap_size * 720 * 576 * 3),
file_size );
}
if( dv->mmap_region == NULL )
{
if(mmap_size>0)
veejay_msg(VEEJAY_MSG_DEBUG, "Mmap failed - fallback to read");
n = read( dv->fd, tmp, DV_HEADER_SIZE );
}
else
{
n = mmap_read( dv->mmap_region, 0, DV_HEADER_SIZE, tmp );
}
if( n <= 0 )
{
dv_decoder_free(decoder);
rawdv_free(dv);
if(tmp) free(tmp);
veejay_msg(VEEJAY_MSG_ERROR, "Cannot read from '%s'", filename);
return NULL;
}
if( dv_parse_header( decoder, tmp) < 0 )
{
dv_decoder_free( decoder );
rawdv_free(dv);
if(tmp) free(tmp);
veejay_msg(VEEJAY_MSG_ERROR, "Cannot parse header");
return NULL;
}
/* if(decoder->sampling == e_dv_sample_411)
{
dv_decoder_free( decoder );
rawdv_free(dv);
if(tmp) free(tmp);
return NULL;
}*/
if(dv_is_PAL( decoder ) )
dv->chunk_size = DV_PAL_SIZE;
else
dv->chunk_size = DV_NTSC_SIZE;
dv->width = decoder->width;
dv->height = decoder->height;
dv->audio_rate = decoder->audio->frequency;
dv->audio_chans = decoder->audio->num_channels;
dv->audio_qbytes = decoder->audio->quantization;
dv->fps = ( dv_is_PAL( decoder) ? 25.0 : 29.97 );
dv->size = decoder->frame_size;
dv->num_frames = (file_size - DV_HEADER_SIZE) / dv->size;
dv->fmt = decoder->sampling;
// dv->fmt = ( decoder->sampling == e_dv_sample_422 ? 1 : 0);
dv->buf = (uint8_t*) vj_malloc(sizeof(uint8_t*) * dv->size);
dv->offset = 0;
dv_decoder_free( decoder );
if(tmp)
free(tmp);
/* if(dv->audio_rate)
{
int i;
for( i = 0; i < 4; i ++ )
dv->audio_buffers[i] = (int16_t*) vj_malloc(sizeof(int16_t) * 2 * DV_AUDIO_MAX_SAMPLES);
}*/
/*
veejay_msg(VEEJAY_MSG_DEBUG,
"rawDV: num frames %ld, dimensions %d x %d, at %2.2f in %s",
dv->num_frames,
dv->width,
dv->height,
dv->fps,
(dv->fmt==1?"422":"420"));
veejay_msg(VEEJAY_MSG_DEBUG,
"rawDV: frame size %d, rate %d, channels %d, bits %d",
dv->size,
dv->audio_rate,
dv->audio_chans,
dv->audio_qbytes);*/
return dv;
}
int rawdv_set_position(dv_t *dv, long nframe)
{
off_t offset = nframe * dv->size;
if(nframe <= 0 )
offset = 0;
else
if(nframe > dv->num_frames)
offset = dv->num_frames * dv->size;
dv->offset = offset;
if( lseek( dv->fd, offset, SEEK_SET ) < 0 )
return -1;
return 0;
}
int rawdv_read_frame(dv_t *dv, uint8_t *buf )
{
int n = 0;
if(dv->mmap_region == NULL)
{
n = read( dv->fd, dv->buf, dv->size );
memcpy( buf, dv->buf, dv->size );
}
else
{
n = mmap_read( dv->mmap_region, dv->offset, dv->size, buf );
}
return n;
}
int rawdv_read_audio_frame(dv_t *dv, uint8_t *audio )
{
return 0;
/*
int n = dv_decode_full_audio( dv->decoder, dv->buf, dv->audio_buffers );
// interleave buffers to audio
int n_samples = dv_get_num_samples( dv->decoder );
int n_chans = dv->audio_chans;
int16_t *ch0 = dv->audio_buffers[0];
int16_t *ch1 = dv->audio_buffers[1];
int i,j;
for( i = 0; i < n_samples; i ++ )
{
*(audio) = *(ch0) & 0xff;
*(audio+1) = (*(ch0) << 8) & 0xff;
*(audio+2) = *(ch1) & 0xff;
*(audio+3) = (*(ch1)<<8) & 0xff;
*(ch0) ++;
*(ch1) ++;
*(audio) += 4;
}
return n_samples * 4;
*/
}
int rawdv_video_frames(dv_t *dv)
{
return dv->num_frames;
}
int rawdv_width(dv_t *dv)
{
return dv->width;
}
int rawdv_height(dv_t *dv)
{
return dv->height;
}
double rawdv_fps(dv_t *dv)
{
return (double) dv->fps;
}
int rawdv_compressor(dv_t *dv)
{
return CODEC_ID_DVVIDEO;
}
char *rawdv_video_compressor(dv_t *dv)
{
char *res = "dvsd\0";
return res;
}
int rawdv_audio_channels(dv_t *dv)
{
return dv->audio_chans;
}
int rawdv_audio_bits(dv_t *dv)
{
return dv->audio_qbytes;
}
int rawdv_audio_format(dv_t *dv)
{
// pcm wave format
return (0x0001);
}
int rawdv_audio_rate(dv_t *dv)
{
return dv->audio_rate;
}
int rawdv_audio_bps(dv_t *dv)
{
return 4;
}
int rawdv_frame_size(dv_t *dv)
{
return dv->size;
}
int rawdv_interlacing(dv_t *dv)
{
return 0;
}
#endif

67
veejay-ng/libel/rawdv.h Normal file
View File

@@ -0,0 +1,67 @@
#ifndef RAWDV_H
#define RAWDV_H
/*
* Linux VeeJay
*
* Copyright(C)2002-2004 Niels Elburg <nelburg@looze.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License , or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
*/
#include <config.h>
#include <stdint.h>
#include <sys/types.h>
#include <libdv/dv.h>
#include <libel/vj-mmap.h>
typedef struct
{
int fd;
char *filename;
long num_frames;
int width;
int height;
float fps;
int chunk_size;
long audio_rate;
int audio_chans;
int audio_qbytes;
dv_decoder_t *decoder;
int16_t *audio_buffers[4];
off_t offset;
uint8_t *buf;
int size;
int fmt;
mmap_region_t *mmap_region;
} dv_t;
int rawdv_sampling(dv_t *dv);
int rawdv_close(dv_t *dv);
dv_t *rawdv_open_input_file(const char *filename, int mmap_size);
int rawdv_set_position(dv_t *dv, long nframe);
int rawdv_read_frame(dv_t *dv, uint8_t *buf );
int rawdv_read_audio_frame(dv_t *dv, uint8_t *buf);
int rawdv_video_frames(dv_t *dv);
int rawdv_width(dv_t *dv);
int rawdv_height(dv_t *dv);
double rawdv_fps(dv_t *dv);
int rawdv_compressor(dv_t *dv);
char *rawdv_video_compressor(dv_t *dv);
int rawdv_audio_channels(dv_t *dv);
int rawdv_audio_bits(dv_t *dv);
int rawdv_audio_format(dv_t *dv);
int rawdv_audio_rate(dv_t *dv);
int rawdv_audio_bps(dv_t *dv);
int rawdv_frame_size(dv_t *dv);
int rawdv_interlacing(dv_t *dv);
#endif

View File

@@ -0,0 +1,484 @@
/* veejay - Linux VeeJay
* (C) 2002-2004 Niels Elburg <nelburg@looze.net>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** \defgroup avcodec FFmpeg AVCodec
*/
#include <config.h>
#include <libel/vj-avcodec.h>
#include <libel/vj-el.h>
#include <libvjmsg/vj-common.h>
#include <libvjmem/vjmem.h>
#include <string.h>
#include <libyuv/yuvconv.h>
#include <veejay/defs.h>
#ifdef SUPPORT_READ_DV2
#define __FALLBACK_LIBDV
#include <libel/vj-dv.h>
static vj_dv_encoder *dv_encoder = NULL;
#endif
//@@ FIXME
static int out_pixel_format = FMT_420;
#define YUV420_ONLY_CODEC(id) ( ( id == CODEC_ID_MJPEG || id == CODEC_ID_MJPEGB || id == CODEC_ID_MSMPEG4V3 || id == CODEC_ID_MPEG4 ) ? 1: 0)
static char* el_get_codec_name(int codec_id )
{
char name[20];
switch(codec_id)
{
case CODEC_ID_MJPEG: sprintf(name, "MJPEG"); break;
case CODEC_ID_MPEG4: sprintf(name, "MPEG4"); break;
case CODEC_ID_MSMPEG4V3: sprintf(name, "DIVX"); break;
case CODEC_ID_DVVIDEO: sprintf(name, "DVVideo"); break;
case -1 : sprintf(name, "RAW YUV"); break;
default:
sprintf(name, "Unknown"); break;
}
char *res = strdup(name);
return res;
}
static vj_encoder *_encoders[NUM_ENCODERS];
static vj_encoder *vj_avcodec_new_encoder( int id, void *edl, int pixel_format)
{
vj_encoder *e = (vj_encoder*) vj_malloc(sizeof(vj_encoder));
if(!e) return NULL;
memset(e, 0, sizeof(vj_encoder));
/* if( YUV420_ONLY_CODEC(id ))
{
e->data[0] = (uint8_t*) vj_malloc(sizeof(uint8_t) *
el->video_width * el->video_height );
e->data[1] = (uint8_t*) vj_malloc(sizeof(uint8_t) *
el->video_width * el->video_height /2 );
e->data[2] = (uint8_t*) vj_malloc(sizeof(uint8_t) *
el->video_width * el->video_height /2);
memset( e->data[0], 0, el->video_width * el->video_height );
memset( e->data[1], 0, el->video_width * el->video_height/2 );
memset( e->data[2], 0, el->video_width * el->video_height/2 );
}*/
if(id != 998 && id != 999 )
{
#ifdef __FALLBACK_LIBDV
if(id != CODEC_ID_DVVIDEO)
{
#endif
e->codec = avcodec_find_encoder( id );
if(!e->codec)
{
char *descr = el_get_codec_name(id);
veejay_msg(VEEJAY_MSG_ERROR, "Cannot find Encoder codec %s", descr );
free(descr);
}
#ifdef __FALLBACK_LIBDV
}
#endif
}
if( id != 998 && id != 999 )
{
#ifdef __FALLBACK_LIBDV
if(id != CODEC_ID_DVVIDEO )
{
#endif
e->context = avcodec_alloc_context();
e->context->bit_rate = 2750 * 1024;
e->context->max_b_frames =0;
//e->context->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
e->context->width = vj_el_get_width(edl);
e->context->height = vj_el_get_height(edl);
#if LIBAVCODEC_BUILD > 5010
e->context->time_base = (AVRational) { 1, vj_el_get_fps(edl) };
#else
e->context->frame_rate = vj_el_get_fps( edl );
e->context->frame_rate_base = 1;
#endif
e->context->qcompress = 0.0;
e->context->qblur = 0.0;
e->context->flags = CODEC_FLAG_QSCALE;
e->context->gop_size = 0;
e->context->sub_id = 0;
e->context->me_method = 0; // motion estimation algorithm
e->context->workaround_bugs = FF_BUG_AUTODETECT;
e->context->prediction_method = 0;
e->context->dct_algo = FF_DCT_AUTO; //global_quality?
// e->context->pix_fmt = (pixel_format == FMT_420 ? PIX_FMT_YUV420P : PIX_FMT_YUV422P );
/*
#if LIBAVCODEC_BUILD > 5010
if( YUV420_ONLY_CODEC(id) )
e->context->pix_fmt = PIX_FMT_YUV420P;
else
e->context->pix_fmt = (pixel_format == FMT_420 ? PIX_FMT_YUVJ420P : PIX_FMT_YU
VJ422P );
//@@ mjpeg encoder requires 4:2:0 planar ? wow
//(pixel_format == FMT_420 ?
// PIX_FMT_YUVJ420P : PIX_FMT_YUVJ422P );
#else
e->context->pix_fmt = (pixel_format == FMT_420 ? PIX_FMT_YUV420P : PIX_FMT_YUV422P );
#endif
if ( avcodec_open( e->context, e->codec ) < 0 )
{
char *descr = el_get_codec_name( id );
veejay_msg(VEEJAY_MSG_DEBUG, "Cannot open codec '%s'" , descr );
if(e) free(e);
if(descr) free(descr);
return NULL;
}*/
if ( avcodec_open( e->context, e->codec ) < 0 )
{
if(e) free(e);
return NULL;
}
#ifdef __FALLBACK_LIBDV
}
#endif
}
e->len = vj_el_get_width(edl) * vj_el_get_height(edl);
if(pixel_format == PIX_FMT_YUV422P)
e->uv_len = e->len / 2;
else
e->uv_len = e->len / 4;
e->width = vj_el_get_width(edl);
e->height = vj_el_get_height(edl);
e->out_fmt = pixel_format;
e->encoder_id = id;
/*
if( el->has_audio )
{
e->audiocodec = avcodec_find_encoder( CODEC_ID_PCM_U8 );
if(!e->audiocodec)
{
veejay_msg(VEEJAY_MSG_ERROR, "Error initializing audio codec");
if(e) free(e);
}
e->context->sample_rate = el->audio_rate;
e->context->channels = el->audio_chans;
if( avcodec_open( e->context, e->audiocodec ) < 0)
{
veejay_msg(VEEJAY_MSG_ERROR, "Cannot open audio context");
if(e) free(e);
return NULL;
}
}
*/
return e;
}
static void vj_avcodec_close_encoder( vj_encoder *av )
{
if(av)
{
if(av->context)
{
avcodec_close( av->context );
free(av->context);
}
free(av);
}
av = NULL;
}
int vj_avcodec_init(void *el)
{
int fmt;
// fmt = out_pixel_format = vj_el_get_fmt(el);
fmt = 1;
veejay_msg(0, "Warning: Encoder in fmt 1");
_encoders[ENCODER_MJPEG] = vj_avcodec_new_encoder( CODEC_ID_MJPEG, el, fmt );
if(!_encoders[ENCODER_MJPEG]) return 0;
#ifdef __FALLBACK_LIBDV
dv_encoder = vj_dv_init_encoder( (void*)el , out_pixel_format);
if(!dv_encoder)
{
veejay_msg(VEEJAY_MSG_ERROR, "Unable to initialize quasar DV codec");
return 0;
}
#else
_encoders[ENCODER_DVVIDEO] = vj_avcodec_new_encoder( CODEC_ID_DVVIDEO, el, fmt );
if(!_encoders[ENCODER_DVVIDEO]) return 0;
#endif
_encoders[ENCODER_DIVX] = vj_avcodec_new_encoder( CODEC_ID_MSMPEG4V3 , el, fmt);
if(!_encoders[ENCODER_DIVX]) return 0;
_encoders[ENCODER_MPEG4] = vj_avcodec_new_encoder( CODEC_ID_MPEG4, el, fmt);
if(!_encoders[ENCODER_MPEG4]) return 0;
_encoders[ENCODER_YUV420] = vj_avcodec_new_encoder( 999, el, fmt);
if(!_encoders[ENCODER_YUV420]) return 0;
_encoders[ENCODER_YUV422] = vj_avcodec_new_encoder( 998, el, fmt);
if(!_encoders[ENCODER_YUV422]) return 0;
return 1;
}
int vj_avcodec_free()
{
int i;
for( i = 0; i < NUM_ENCODERS; i++)
{
if(_encoders[i]) vj_avcodec_close_encoder(_encoders[i]);
}
#ifdef __FALLBACK_LIBDV
vj_dv_free_encoder(dv_encoder);
#endif
return 1;
}
void yuv422p_to_yuv420p3( uint8_t *src, uint8_t *dst[3], int w, int h)
{
AVPicture pict1,pict2;
memset(&pict1,0,sizeof(pict1));
memset(&pict2,0,sizeof(pict2));
pict1.data[0] = src;
pict1.data[1] = src+(w*h);
pict1.data[2] = src+(w*h)+((w*h)/2);
pict1.linesize[0] = w;
pict1.linesize[1] = w >> 1;
pict1.linesize[2] = w >> 1;
pict2.data[0] = dst[0];
pict2.data[1] = dst[1];
pict2.data[2] = dst[2];
pict2.linesize[0] = w;
pict2.linesize[1] = w >> 1;
pict2.linesize[2] = w >> 1;
img_convert( &pict2, PIX_FMT_YUV420P, &pict1, PIX_FMT_YUV422P, w, h );
return;
}
void yuv422p_to_yuv420p2( uint8_t *src[3], uint8_t *dst[3], int w, int h)
{
AVPicture pict1,pict2;
memset(&pict1,0,sizeof(pict1));
memset(&pict2,0,sizeof(pict2));
pict1.data[0] = src[0];
pict1.data[1] = src[1];
pict1.data[2] = src[2];
pict1.linesize[0] = w;
pict1.linesize[1] = w >> 1;
pict1.linesize[2] = w >> 1;
pict2.data[0] = dst[0];
pict2.data[1] = dst[1];
pict2.data[2] = dst[2];
pict2.linesize[0] = w;
pict2.linesize[1] = w >> 1;
pict2.linesize[2] = w >> 1;
img_convert( &pict2, PIX_FMT_YUV420P, &pict1, PIX_FMT_YUV422P, w, h );
return;
}
int yuv422p_to_yuv420p( uint8_t *src[3], uint8_t *dst, int w, int h)
{
int len = w* h ;
int uv_len = len / 4;
AVPicture pict1,pict2;
memset(&pict1,0,sizeof(pict1));
memset(&pict2,0,sizeof(pict2));
pict1.data[0] = src[0];
pict1.data[1] = src[1];
pict1.data[2] = src[2];
pict1.linesize[0] = w;
pict1.linesize[1] = w >> 1;
pict1.linesize[2] = w >> 1;
pict2.data[0] = dst;
pict2.data[1] = dst + len;
pict2.data[2] = dst + len + uv_len;
pict2.linesize[0] = w;
pict2.linesize[1] = w >> 1;
pict2.linesize[2] = w >> 1;
img_convert( &pict2, PIX_FMT_YUV420P, &pict1, PIX_FMT_YUV422P, w, h );
return (len + uv_len + uv_len);
}
int yuv420p_to_yuv422p2( uint8_t *sY,uint8_t *sCb, uint8_t *sCr, uint8_t *dst[3], int w, int h )
{
const int len = w * h;
const int uv_len = len / 2;
AVPicture pict1,pict2;
memset(&pict1,0,sizeof(pict1));
memset(&pict2,0,sizeof(pict2));
pict1.data[0] = sY;
pict1.data[1] = sCb;
pict1.data[2] = sCr;
pict1.linesize[0] = w;
pict1.linesize[1] = w >> 1;
pict1.linesize[2] = w >> 1;
pict2.data[0] = dst[0];
pict2.data[1] = dst[1];
pict2.data[2] = dst[2];
pict2.linesize[0] = w;
pict2.linesize[1] = w >> 1;
pict2.linesize[2] = w >> 1;
img_convert( &pict2, PIX_FMT_YUV422P, &pict1, PIX_FMT_YUV420P, w, h );
return (len + uv_len + uv_len);
}
int yuv420p_to_yuv422p( uint8_t *sY,uint8_t *sCb, uint8_t *sCr, uint8_t *dst[3], int w, int h )
{
const int len = w * h;
const int uv_len = len / 2;
AVPicture pict1,pict2;
memset(&pict1,0,sizeof(pict1));
memset(&pict2,0,sizeof(pict2));
pict1.data[0] = sY;
pict1.data[1] = sCb;
pict1.data[2] = sCr;
pict1.linesize[0] = w;
pict1.linesize[1] = w >> 1;
pict1.linesize[2] = w >> 1;
pict2.data[0] = dst[0];
pict2.data[1] = dst[1];
pict2.data[2] = dst[2];
pict2.linesize[0] = w;
pict2.linesize[1] = w >> 1;
pict2.linesize[2] = w >> 1;
img_convert( &pict2, PIX_FMT_YUV422P, &pict1, PIX_FMT_YUV420P, w, h );
return (len + uv_len + uv_len);
}
static int vj_avcodec_copy_frame( vj_encoder *av, uint8_t *src[3], uint8_t *dst )
{
if(!av)
{
veejay_msg(VEEJAY_MSG_ERROR, "No encoder !!");
return 0;
}
if( (av->encoder_id == 999 && av->out_fmt == PIX_FMT_YUV420P) || (av->encoder_id == 998 && av->out_fmt == PIX_FMT_YUV422P))
{
/* copy */
veejay_memcpy( dst, src[0], av->len );
veejay_memcpy( dst+(av->len), src[1], av->uv_len );
veejay_memcpy( dst+(av->len+av->uv_len) , src[2], av->uv_len);
return ( av->len + av->uv_len + av->uv_len );
}
/* copy by converting */
if( av->encoder_id == 999 && av->out_fmt == PIX_FMT_YUV422P)
{
yuv422p_to_yuv420p( src, dst, av->width, av->height);
return ( av->len + (av->len/4) + (av->len/4));
}
if( av->encoder_id == 998 && av->out_fmt == PIX_FMT_YUV420P)
{
uint8_t *d[3];
d[0] = dst;
d[1] = dst + av->len;
d[2] = dst + av->len + (av->len / 2);
yuv420p_to_yuv422p2( src[0],src[1],src[2], d, av->width,av->height );
return ( av->len + av->len );
}
/* if(av->sub_sample)
{
return(yuv422p_to_yuv420p(src,dst, av->width, av->height ));
}
else
{
veejay_memcpy( dst, src[0], av->len );
veejay_memcpy( dst+(av->len), src[1], av->uv_len );
veejay_memcpy( dst+(av->len+av->uv_len) , src[2], av->uv_len);
}
return (av->len + av->uv_len + av->uv_len);
*/
return 0;
}
int vj_avcodec_encode_frame( int format, uint8_t *src[3], uint8_t *buf, int buf_len)
{
AVFrame pict;
vj_encoder *av = _encoders[format];
int res=0;
memset( &pict, 0, sizeof(pict));
if(format == ENCODER_YUV420) // no compression, just copy
return vj_avcodec_copy_frame( _encoders[ENCODER_YUV420],src, buf );
if(format == ENCODER_YUV422) // no compression, just copy
return vj_avcodec_copy_frame( _encoders[ENCODER_YUV422],src, buf );
#ifdef __FALLBACK_LIBDV
if(format == ENCODER_DVVIDEO )
return vj_dv_encode_frame( dv_encoder,src, buf );
#endif
pict.quality = 1;
pict.data[0] = src[0];
pict.data[1] = src[1];
pict.data[2] = src[2];
if( out_pixel_format == FMT_422 )
{
pict.linesize[0] = av->context->width;
pict.linesize[1] = av->context->width;
pict.linesize[2] = av->context->width;
}
else
{
pict.linesize[0] = av->context->width;
pict.linesize[1] = av->context->width >> 1;
pict.linesize[2] = av->context->width >> 1;
}
res = avcodec_encode_video( av->context, buf, buf_len, &pict );
return res;
}
/*
static int vj_avcodec_copy_audio_frame( uint8_t *src, uint8_t *buf, int len)
{
veejay_memcpy( buf, src, len );
return len;
}
int vj_avcodec_encode_audio( int format, uint8_t *src, uint8_t *dst, int len, int nsamples )
{
if(format == ENCODER_YUV420)
return vj_avcodec_copy_audio_frame;
if(format == ENCODER_YUV422)
return vj_avcodec_copy_audio_frame;
vj_encoder *av = _encoders[format];
int len = avcodec_encode_audio( av->context, src, len, nsamples );
return len;
}
*/

View File

@@ -0,0 +1,70 @@
/* veejay - Linux VeeJay
* (C) 2002-2004 Niels Elburg <nelburg@looze.net>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef VJ_AVCODEC_H
#define VJ_AVCODEC_H
//@ todo: encapsulate
#include <ffmpeg/avcodec.h>
#define ENCODER_MJPEG 0
#define ENCODER_DVVIDEO 1
#define ENCODER_DIVX 2
#define ENCODER_MPEG4 3
#define ENCODER_YUV420 4
#define ENCODER_YUV422 5
#define NUM_ENCODERS 6
typedef struct
{
AVCodec *codec;
AVCodec *audiocodec;
AVFrame *frame;
AVCodecContext *context;
int out_fmt;
int uv_len;
int len;
int sub_sample;
int super_sample;
int encoder_id;
int width;
int height;
} vj_encoder;
int vj_avcodec_init(void *el);
int vj_avcodec_encode_frame( int format, uint8_t *src[3], uint8_t *dst, int dst_len);
int vj_avcodec_free();
/* color space conversion routines, should go somewhere else someday
together with subsample.c/colorspace.c into some lib
*/
void yuv_planar_to_rgb24(uint8_t *src[3], int fmt, uint8_t *dst, int w, int h );
// from yuv 4:2:0 planar to yuv 4:2:2 planar
int yuv420p_to_yuv422p( uint8_t *Y, uint8_t *Cb, uint8_t *Cr, uint8_t *dst[3], int w, int h );
void yuv422p_to_yuv420p2( uint8_t *src[3], uint8_t *dst[3], int w, int h );
int yuv420p_to_yuv422p2( uint8_t *sY,uint8_t *sCb, uint8_t *sCr, uint8_t *dst[3], int w, int h );
void yuv422p_to_yuv420p3( uint8_t *src, uint8_t *dst[3], int w, int h);
#endif

278
veejay-ng/libel/vj-dv.c Normal file
View File

@@ -0,0 +1,278 @@
/*
* Linux VeeJay
*
* Copyright(C)2002-2004 Niels Elburg <nelburg@looze.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License , or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
*/
/** \defgroup dvvideo DV Video
*
*
* This module provides basic support for decoding and encoding raw DV files
*/
#include <config.h>
#include <libvjmsg/vj-common.h>
#ifdef SUPPORT_READ_DV2
#include <libdv/dv.h>
#include <veejay/defs.h>
#include <libel/vj-el.h>
#include <stdint.h>
#include <libel/vj-dv.h>
#include <libel/vj-avcodec.h>
#include <string.h>
#define NTSC_W 720
#define NTSC_H 480
#define PAL_W 720
#define PAL_H 576
#define DV_PAL_SIZE 144000
#define DV_NTSC_SIZE 120000
#define DV_AUDIO_MAX_SAMPLES 1944
int is_dv_resolution(int w, int h)
{
if( h == NTSC_H && w == NTSC_W )
return 1;
if( h == PAL_H && w == PAL_W )
return 1;
return 0;
}
/* init the dv decoder and decode buffer*/
vj_dv_decoder *vj_dv_decoder_init(int quality, int width, int height, int pixel_format)
{
int dv_q = DV_QUALITY_COLOR;
vj_dv_decoder *d = (vj_dv_decoder*)vj_malloc(sizeof(vj_dv_decoder));
if(!d) return NULL;
d->decoder = dv_decoder_new( 1,1,0 );
if( quality == 0 )
dv_q = DV_QUALITY_FASTEST;
if( quality == 1 )
dv_q = DV_QUALITY_BEST;
d->decoder->quality = dv_q;
d->dv_video = (uint8_t*) vj_malloc(sizeof(uint8_t) * width * height * 4);
memset( d->dv_video, 0, (width*height*4));
d->fmt = pixel_format;
d->audio = 0; // audio off
return d;
}
/* init the dv encoder and encode buffer */
vj_dv_encoder *vj_dv_init_encoder(void * edl, int pixel_format)
{
vj_dv_encoder *e = (vj_dv_encoder*) vj_malloc(sizeof(vj_dv_encoder));
if(!e) return NULL;
e->encoder = dv_encoder_new(0,0,0);
e->encoder->isPAL = (vj_el_get_norm(edl) == 'p' ? 1 : 0);
e->encoder->is16x9 = (vj_el_get_width(edl) / vj_el_get_height(edl) >= 1.777 ? 1: 0);
e->encoder->vlc_encode_passes = 3;
e->encoder->static_qno = 0;
e->encoder->force_dct = DV_DCT_AUTO;
e->fmt = pixel_format;
e->dv_video =
(uint8_t *) vj_malloc(sizeof(uint8_t) *
(e->encoder->isPAL ?
DV_PAL_SIZE : DV_NTSC_SIZE));
memset( e->dv_video, 0 ,
(e->encoder->isPAL ? DV_PAL_SIZE: DV_NTSC_SIZE ) );
return e;
}
/* encode frame to dv format, dv frame will be in output_buf */
int vj_dv_encode_frame(vj_dv_encoder *encoder, uint8_t *input_buf[3], uint8_t *output_buf)
{
time_t now = time(NULL);
uint8_t *pixels[3];
int w=0; int h = 0;
if (!input_buf)
return 0;
pixels[0] = (uint8_t *) encoder->dv_video;
if (encoder->encoder->isPAL)
{
h = PAL_H;
w = PAL_W;
}
else
{
h = NTSC_H;
w = NTSC_W;
}
if( encoder->fmt == FMT_420)
{
pixels[1] = (uint8_t *) encoder->dv_video + (w * h);
pixels[2] = (uint8_t *) encoder->dv_video + (w * h * 5) / 4;
yuv420p_to_yuv422(input_buf, encoder->dv_video, w, h );
}
else
{ // convert 422 planar to packed
int off = w * h / 2;
pixels[1] = (uint8_t *) encoder->dv_video + (w * h );
pixels[2] = (uint8_t *) encoder->dv_video + (w * h) + off;
yuv422p_to_yuv422(input_buf,encoder->dv_video,w,h);
}
dv_encode_full_frame( encoder->encoder, pixels, e_dv_color_yuv,
output_buf);
dv_encode_metadata(output_buf, encoder->encoder->isPAL,
encoder->encoder->is16x9, &now, 0);
dv_encode_timecode(output_buf, encoder->encoder->isPAL, 0);
if(encoder->encoder->isPAL) return DV_PAL_SIZE;
return DV_NTSC_SIZE;
}
void vj_dv_free_encoder(vj_dv_encoder *e)
{
if(e)
{
if(e->encoder)
dv_encoder_free( e->encoder);
if(e->dv_video)
free(e->dv_video);
free(e);
}
}
void vj_dv_free_decoder(vj_dv_decoder *d) {
if(d->decoder)
dv_decoder_free( d->decoder );
if(d->dv_video)
free(d->dv_video);
if(d)
free(d);
}
void vj_dv_decoder_set_audio(vj_dv_decoder *d, int audio)
{
}
void vj_dv_decoder_get_audio(vj_dv_decoder *d, uint8_t *audio_buf)
{
if(!d->audio) return;
int n_samples = dv_get_num_samples( d->decoder);
int channels = dv_get_num_channels( d->decoder );
int i,j;
int16_t *ch0 = d->audio_buffers[0];
int16_t *ch1 = d->audio_buffers[1];
// convert short to uint8_t,
// interleave audio into single buffer
for(i = 0; i < n_samples; i ++ )
{
*(audio_buf) = ch0[i] & 0xff; //lo
*(audio_buf+1) = (ch0[i] >> 8) & 0xff; //hi
*(audio_buf+2) = ch1[i] & 0xff; //lo
*(audio_buf+3) = (ch1[i] >> 8) & 0xff; //hi
}
}
int vj_dv_decode_frame(vj_dv_decoder *d, uint8_t * input_buf, uint8_t * Y,
uint8_t * Cb, uint8_t * Cr, int width, int height, int fmt)
{
int pitches[3];
if (!input_buf)
return 0;
if (dv_parse_header(d->decoder, input_buf) < 0)
{
return 0;
}
if (!((d->decoder->num_dif_seqs == 10)
|| (d->decoder->num_dif_seqs == 12)))
return 0;
/*
switch(vj_dv_decoder->sampling) {
case e_dv_sample_411:fprintf(stderr,"sample 411\n"); break;
case e_dv_sample_422:fprintf(stderr,"sample 422\n");break;
case e_dv_sample_420:fprintf(stderr,"sample 420\n");break;
default: fprintf(stderr,"unknown\n");break;
}
*/
/*
if (d->decoder->sampling == e_dv_sample_411 ||
d->decoder->sampling == e_dv_sample_422 ||
d->decoder->sampling == e_dv_sample_420)
{
pitches[0] = width * 2;
pitches[1] = 0;
pitches[2] = 0;
uint8_t *pixels[3] = { Y , Cb, Cr };
dv_decode_full_frame(d->decoder, input_buf,
e_dv_color_yuv, pixels, pitches);
if(fmt == FMT_420)
yuy2toyv12(Y, Cb, Cr, d->dv_video, width, height);
else
yuy2toyv16(Y, Cb, Cr, d->dv_video, width, height);
return 1;
}
*/
pitches[0] = width * 2;
pitches[1] = 0;
pitches[2] = 0;
if( d->decoder->sampling == e_dv_sample_420 )
{
uint8_t *pixels[3];
pixels[0] = d->dv_video;
pixels[1] = d->dv_video + (width * height);
pixels[2] = d->dv_video + (width * height * 5)/4;
dv_decode_full_frame( d->decoder, input_buf, e_dv_color_yuv,
pixels,pitches);
if(fmt==FMT_422)
yuy2toyv16( Y,Cb,Cr, d->dv_video, width ,height );
else
yuy2toyv12( Y,Cb,Cr, d->dv_video, width, height );
return 1;
}
if( d->decoder->sampling == e_dv_sample_422 )
{
uint8_t *pixels[3];
pixels[0] = d->dv_video;
pixels[1] = d->dv_video + (width * height);
pixels[2] = d->dv_video + (width * height) + (width * height/2);
dv_decode_full_frame( d->decoder, input_buf, e_dv_color_yuv,
pixels,pitches);
if(fmt==FMT_422)
yuy2toyv16( Y,Cb,Cr, d->dv_video, width ,height );
else
yuy2toyv12( Y,Cb,Cr, d->dv_video, width, height );
return 1;
}
return 0;
}
#endif

59
veejay-ng/libel/vj-dv.h Normal file
View File

@@ -0,0 +1,59 @@
/*
* Linux VeeJay
*
* Copyright(C)2002-2004 Niels Elburg <nelburg@looze.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License , or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
*/
#ifndef VJ_DV_H
#define VJ_DV_H
#include <config.h>
#ifdef SUPPORT_READ_DV2
#include <libdv/dv.h>
typedef struct
{
dv_decoder_t *decoder;
uint8_t *dv_video;
int fmt;
int audio;
int16_t **audio_buffers;
} vj_dv_decoder;
typedef struct
{
dv_encoder_t *encoder;
uint8_t *dv_video;
int fmt;
} vj_dv_encoder;
vj_dv_decoder *vj_dv_decoder_init(int quality,int width, int height, int pixel_format);
vj_dv_encoder *vj_dv_init_encoder(void * el, int pixel_format);
void vj_dv_decoder_get_audio(vj_dv_decoder *d, uint8_t *audio_buf);
void vj_dv_decoder_set_audio(vj_dv_decoder *d, int audio);
int vj_dv_decode_frame(vj_dv_decoder *d,uint8_t * in, uint8_t * Y,
uint8_t * Cb, uint8_t * Cr, int w, int h, int fmt);
int vj_dv_encode_frame(vj_dv_encoder *e,uint8_t * in[3], uint8_t * out);
void vj_dv_free_encoder(vj_dv_encoder *e);
void vj_dv_free_decoder(vj_dv_decoder *d);
#endif
#endif

2142
veejay-ng/libel/vj-el.c Normal file

File diff suppressed because it is too large Load Diff

87
veejay-ng/libel/vj-el.h Normal file
View File

@@ -0,0 +1,87 @@
/* veejay - Linux VeeJay
* (C) 2002-2004 Niels Elburg <nelburg@looze.net>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef VJ_MLT_EL_H
#define VJ_MLT_EL_H
//void *vj_el_init_with_args(char **filenames, int n, int flags, int deinter, int force, char norm, int fmt);
void *vj_el_open_video_file( const char *filename );
int vj_el_cache_size();
void vj_el_prepare(void); // reset cache
void vj_el_init();
void vj_el_init_chunk(int n);
void vj_el_free(void *el);
int vj_el_get_audio_frame_at(void *el, uint32_t nframe, uint8_t *dst, int speed );
int vj_el_append_video_file(void *el, char *filename);
int vj_el_write_void( char *filename, long start, long end, void *el );
int vj_el_get_video_frame(void *el, long nframe, void *frame);
int vj_el_get_audio_frame(void *el, uint32_t nframe, uint8_t *dst);
int vj_el_get_file_fourcc(void *el, int num, char *buf);
void vj_el_print(void *el);
void vj_el_frame_cache(int n);
void vj_el_show_formats(void);
void vj_el_ref(void *el, int num);
void vj_el_unref(void *el, int num);
void *vj_el_dummy(int flags, int deinterlace, int chroma, char norm, int width, int height, float fps, int fmt);
int vj_el_get_file_entry( void *el,long *start_pos, long *end_pos, long entry );
void *vj_el_clone(void *el);
void *vj_el_soft_clone(void *el);
void vj_el_set_itu601( void *edl , int status );
void vj_el_set_itu601_preference( int status );
int vj_el_framelist_clone( void *src, void *dst);
char *vj_el_write_line_ascii( void *el, int *bytes_written );
void vj_el_deinit();
char vj_el_get_norm( void *edl );
float vj_el_get_fps(void *edl);
int vj_el_get_width( void *edl );
int vj_el_get_height( void *edl );
int vj_el_get_inter( void *edl );
int vj_el_get_audio_rate( void *edl );
int vj_el_get_audio_bps( void *edl );
int vj_el_get_audio_chans( void *edl );
int vj_el_match( void *sv, void *edl);
#endif

147
veejay-ng/libel/vj-mmap.c Normal file
View File

@@ -0,0 +1,147 @@
/*
* Linux VeeJay
*
* Copyright(C)2002-2004 Niels Elburg <nelburg@looze.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License , or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
*/
#include <libel/vj-mmap.h>
#include <libvjmsg/vj-common.h>
#include <sys/mman.h>
#include <stdint.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
//#include <valgrind/memcheck.h>
#include <libvjmem/vjmem.h>
#define PADDED(a,m) ( a > 0 ? (a / m->page_size) * m->page_size : 0)
/** \defgroup mmap Memory mapped files
*
*
* This modules uses mmap() , which can establish a mapping between a process address space and a file.
*
* This improves file system performance about 10% on my machine, it used currently only for DV Video
*/
void mmap_free(mmap_region_t *map)
{
if(map)
{
if(map->map_start) munmap_file(map);
}
free(map);
}
mmap_region_t * mmap_file(int fd, int offset, int length, int fs)
{
mmap_region_t *map = (mmap_region_t*) malloc(sizeof( mmap_region_t ));
memset( map, 0, sizeof( mmap_region_t ));
map->fd = fd;
map->page_size = getpagesize();
map->map_length = length;
map->map_start = NULL;
map->eof = fs;
map->mem_offset = offset;
remap_file( map, offset );
veejay_msg(VEEJAY_MSG_DEBUG, "Memory map region is %f Mb",
( (float) length / 1048576.0 ) );
return map;
}
int is_mapped( mmap_region_t *map, int offset, int size )
{
// check if memory is in mapped region
off_t real_offset = PADDED( offset, map );
size_t padding = offset % map->page_size;
size_t real_size = padding + size + real_offset;
long rel_o = (map->mem_offset > 0 ? offset - map->mem_offset : offset );
if( (rel_o + size) > map->map_length )
{
return 0;
}
if( real_offset >= map->start_region &&
real_offset + size <= map->end_region )
return 1;
return 0;
}
int remap_file( mmap_region_t *map, int offset )
{
size_t padding = offset % map->page_size;
size_t new_length = map->map_length;
size_t real_length = 0;
off_t real_offset = PADDED( offset, map );
real_length = (padding + new_length);
if( real_length > map->eof )
{
real_length = PADDED(map->eof ,map);
}
if(map->map_start != NULL)
{
munmap_file( map );
}
map->mem_offset = offset;
map->map_start = mmap( 0, real_length, PROT_READ, MAP_SHARED, map->fd, real_offset );
if( map->map_start == MAP_FAILED)
{
veejay_msg(VEEJAY_MSG_ERROR, "mmap error %s", strerror(errno));
return 0;
}
map->data_start = map->map_start + padding;
map->start_region = real_offset;
map->end_region = real_length + real_offset;
return 1;
}
int munmap_file( mmap_region_t *map )
{
if(map->map_start == NULL)
return 1;
int n = munmap( map->map_start, map->map_length );
if(n==-1)
{
veejay_msg(VEEJAY_MSG_ERROR, "leaving garbage %s",
strerror(errno));
}
map->map_start = NULL;
return n;
}
int mmap_read( mmap_region_t *map,int offset, int bytes, uint8_t *buf )
{
size_t padding = offset % map->page_size;
if( !is_mapped( map, offset, bytes ))
{
remap_file( map, offset );
}
int rel_offset = (map->mem_offset > 0 ? offset - map->mem_offset : offset );
uint8_t *d1 = map->data_start + rel_offset;
veejay_memcpy( buf, d1, bytes );
return bytes;
}

53
veejay-ng/libel/vj-mmap.h Normal file
View File

@@ -0,0 +1,53 @@
/*
* Linux VeeJay
*
* Copyright(C)2002-2004 Niels Elburg <nelburg@looze.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License , or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
*/
#ifndef VJ_MMAP_H
#define VJ_MMAP_H
#include <sys/types.h>
#include <sys/mman.h>
#include <stdint.h>
typedef struct
{
void *map_start; /* result of mmap() */
void *data_start; /* start of data */
uint64_t start_region;
uint64_t end_region;
off_t mem_offset; /* start of image */
int fd; /* file descriptor */
size_t page_size; /* page size */
size_t map_length; /* requested map size */
long eof; /* file size */
} mmap_region_t;
// map file portion to memory, return mapped region
mmap_region_t * mmap_file(int fd, int offset, int length, int fs);
// see if requested boundaries is mapped in memory
int is_mapped( mmap_region_t *map, int offset, int size );
// remap a portion of a file in memory
int remap_file( mmap_region_t *map, int offset );
// unmap memory
int munmap_file( mmap_region_t *map );
void mmap_free(mmap_region_t *map );
int mmap_read( mmap_region_t *map, int offset, int bytes, uint8_t *buf);
#endif

View File

@@ -0,0 +1,6 @@
# Makefile for veejay
INCLUDES = -I$(top_srcdir) -I$(includedir)
HASH_LIB_FILE = libhash.la
noinst_LTLIBRARIES = $(HASH_LIB_FILE)
libhash_la_SOURCES = hash.c

View File

@@ -0,0 +1,503 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
SOURCES = $(libhash_la_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = libhash
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libhash_la_LIBADD =
am_libhash_la_OBJECTS = hash.lo
libhash_la_OBJECTS = $(am_libhash_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libhash_la_SOURCES)
DIST_SOURCES = $(libhash_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALTIVEC_CFLAGS = @ALTIVEC_CFLAGS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_AVCODEC_CFLAGS = @FFMPEG_AVCODEC_CFLAGS@
FFMPEG_AVCODEC_LIBS = @FFMPEG_AVCODEC_LIBS@
FFMPEG_AVFORMAT_CFLAGS = @FFMPEG_AVFORMAT_CFLAGS@
FFMPEG_AVFORMAT_LIBS = @FFMPEG_AVFORMAT_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@
GLIB_LIBS = @GLIB_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
HAVE_ALTIVEC_FALSE = @HAVE_ALTIVEC_FALSE@
HAVE_ALTIVEC_TRUE = @HAVE_ALTIVEC_TRUE@
HAVE_ASM_MMX2_FALSE = @HAVE_ASM_MMX2_FALSE@
HAVE_ASM_MMX2_TRUE = @HAVE_ASM_MMX2_TRUE@
HAVE_ASM_MMX_FALSE = @HAVE_ASM_MMX_FALSE@
HAVE_ASM_MMX_TRUE = @HAVE_ASM_MMX_TRUE@
HAVE_ASM_NASM_FALSE = @HAVE_ASM_NASM_FALSE@
HAVE_ASM_NASM_TRUE = @HAVE_ASM_NASM_TRUE@
HAVE_ASM_SSE2_FALSE = @HAVE_ASM_SSE2_FALSE@
HAVE_ASM_SSE2_TRUE = @HAVE_ASM_SSE2_TRUE@
HAVE_ASM_SSE_FALSE = @HAVE_ASM_SSE_FALSE@
HAVE_ASM_SSE_TRUE = @HAVE_ASM_SSE_TRUE@
HAVE_DL_DLOPEN_FALSE = @HAVE_DL_DLOPEN_FALSE@
HAVE_DL_DLOPEN_TRUE = @HAVE_DL_DLOPEN_TRUE@
HAVE_JACK_FALSE = @HAVE_JACK_FALSE@
HAVE_JACK_TRUE = @HAVE_JACK_TRUE@
HAVE_MMX2_FALSE = @HAVE_MMX2_FALSE@
HAVE_MMX2_TRUE = @HAVE_MMX2_TRUE@
HAVE_MMX_FALSE = @HAVE_MMX_FALSE@
HAVE_MMX_TRUE = @HAVE_MMX_TRUE@
HAVE_PPCCPU_FALSE = @HAVE_PPCCPU_FALSE@
HAVE_PPCCPU_TRUE = @HAVE_PPCCPU_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SSE2_FALSE = @HAVE_SSE2_FALSE@
HAVE_SSE2_TRUE = @HAVE_SSE2_TRUE@
HAVE_SSE_FALSE = @HAVE_SSE_FALSE@
HAVE_SSE_TRUE = @HAVE_SSE_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_X86CPU_FALSE = @HAVE_X86CPU_FALSE@
HAVE_X86CPU_TRUE = @HAVE_X86CPU_TRUE@
HAVE_XML2_FALSE = @HAVE_XML2_FALSE@
HAVE_XML2_TRUE = @HAVE_XML2_TRUE@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
LIBGETOPT_LIB = @LIBGETOPT_LIB@
LIBM_LIBS = @LIBM_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_RELEASE = @LT_RELEASE@
LT_REVISION = @LT_REVISION@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MJPEGTOOLS_CFLAGS = @MJPEGTOOLS_CFLAGS@
MJPEGTOOLS_LIBS = @MJPEGTOOLS_LIBS@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PROGRAM_NOPIC = @PROGRAM_NOPIC@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUPPORT_READ_DV2_FALSE = @SUPPORT_READ_DV2_FALSE@
SUPPORT_READ_DV2_TRUE = @SUPPORT_READ_DV2_TRUE@
V4LCONF_LIBS = @V4LCONF_LIBS@
VERSION = @VERSION@
XML2_CONFIG = @XML2_CONFIG@
XML_CPPFLAGS = @XML_CPPFLAGS@
XML_LIBS = @XML_LIBS@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
# Makefile for veejay
INCLUDES = -I$(top_srcdir) -I$(includedir)
HASH_LIB_FILE = libhash.la
noinst_LTLIBRARIES = $(HASH_LIB_FILE)
libhash_la_SOURCES = hash.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libhash/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu libhash/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libhash.la: $(libhash_la_OBJECTS) $(libhash_la_DEPENDENCIES)
$(LINK) $(libhash_la_LDFLAGS) $(libhash_la_OBJECTS) $(libhash_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

1076
veejay-ng/libhash/hash.c Normal file

File diff suppressed because it is too large Load Diff

240
veejay-ng/libhash/hash.h Normal file
View File

@@ -0,0 +1,240 @@
/*
* Hash Table Data Type
* Copyright (C) 1997 Kaz Kylheku <kaz@ashi.footprints.net>
*
* Free Software License:
*
* All rights are reserved by the author, with the following exceptions:
* Permission is granted to freely reproduce and distribute this software,
* possibly in exchange for a fee, provided that this copyright notice appears
* intact. Permission is also granted to adapt this software to produce
* derivative works, as long as the modified versions carry this copyright
* notice and additional notices stating that the work has been modified.
* This source code may be translated into executable form and incorporated
* into proprietary software; there is no requirement for such software to
* contain a copyright notice related to this source.
*
* $Id: hash.h,v 1.1.1.1 2004/10/27 23:48:59 niels Exp $
* $Name: $
*/
#ifndef HASH_H
#define HASH_H
#include <limits.h>
#ifdef KAZLIB_SIDEEFFECT_DEBUG
#include "sfx.h"
#endif
/*
* Blurb for inclusion into C++ translation units
*/
#ifdef __cplusplus
extern "C" {
#endif
typedef unsigned long hashcount_t;
#define HASHCOUNT_T_MAX ULONG_MAX
typedef unsigned long hash_val_t;
#define HASH_VAL_T_MAX ULONG_MAX
extern int hash_val_t_bit;
#ifndef HASH_VAL_T_BIT
#define HASH_VAL_T_BIT ((int) hash_val_t_bit)
#endif
/*
* Hash chain node structure.
* Notes:
* 1. This preprocessing directive is for debugging purposes. The effect is
* that if the preprocessor symbol KAZLIB_OPAQUE_DEBUG is defined prior to the
* inclusion of this header, then the structure shall be declared as having
* the single member int __OPAQUE__. This way, any attempts by the
* client code to violate the principles of information hiding (by accessing
* the structure directly) can be diagnosed at translation time. However,
* note the resulting compiled unit is not suitable for linking.
* 2. This is a pointer to the next node in the chain. In the last node of a
* chain, this pointer is null.
* 3. The key is a pointer to some user supplied data that contains a unique
* identifier for each hash node in a given table. The interpretation of
* the data is up to the user. When creating or initializing a hash table,
* the user must supply a pointer to a function for comparing two keys,
* and a pointer to a function for hashing a key into a numeric value.
* 4. The value is a user-supplied pointer to void which may refer to
* any data object. It is not interpreted in any way by the hashing
* module.
* 5. The hashed key is stored in each node so that we don't have to rehash
* each key when the table must grow or shrink.
*/
typedef struct hnode_t {
#if defined(HASH_IMPLEMENTATION) || !defined(KAZLIB_OPAQUE_DEBUG) /* 1 */
struct hnode_t *hash_next; /* 2 */
const void *hash_key; /* 3 */
void *hash_data; /* 4 */
hash_val_t hash_hkey; /* 5 */
#else
int hash_dummy;
#endif
} hnode_t;
/*
* The comparison function pointer type. A comparison function takes two keys
* and produces a value of -1 if the left key is less than the right key, a
* value of 0 if the keys are equal, and a value of 1 if the left key is
* greater than the right key.
*/
typedef int (*hash_comp_t)(const void *, const void *);
/*
* The hashing function performs some computation on a key and produces an
* integral value of type hash_val_t based on that key. For best results, the
* function should have a good randomness properties in *all* significant bits
* over the set of keys that are being inserted into a given hash table. In
* particular, the most significant bits of hash_val_t are most significant to
* the hash module. Only as the hash table expands are less significant bits
* examined. Thus a function that has good distribution in its upper bits but
* not lower is preferrable to one that has poor distribution in the upper bits
* but not the lower ones.
*/
typedef hash_val_t (*hash_fun_t)(const void *);
/*
* allocator functions
*/
typedef hnode_t *(*hnode_alloc_t)(void *);
typedef void (*hnode_free_t)(hnode_t *, void *);
/*
* This is the hash table control structure. It keeps track of information
* about a hash table, as well as the hash table itself.
* Notes:
* 1. Pointer to the hash table proper. The table is an array of pointers to
* hash nodes (of type hnode_t). If the table is empty, every element of
* this table is a null pointer. A non-null entry points to the first
* element of a chain of nodes.
* 2. This member keeps track of the size of the hash table---that is, the
* number of chain pointers.
* 3. The count member maintains the number of elements that are presently
* in the hash table.
* 4. The maximum count is the greatest number of nodes that can populate this
* table. If the table contains this many nodes, no more can be inserted,
* and the hash_isfull() function returns true.
* 5. The high mark is a population threshold, measured as a number of nodes,
* which, if exceeded, will trigger a table expansion. Only dynamic hash
* tables are subject to this expansion.
* 6. The low mark is a minimum population threshold, measured as a number of
* nodes. If the table population drops below this value, a table shrinkage
* will occur. Only dynamic tables are subject to this reduction. No table
* will shrink beneath a certain absolute minimum number of nodes.
* 7. This is the a pointer to the hash table's comparison function. The
* function is set once at initialization or creation time.
* 8. Pointer to the table's hashing function, set once at creation or
* initialization time.
* 9. The current hash table mask. If the size of the hash table is 2^N,
* this value has its low N bits set to 1, and the others clear. It is used
* to select bits from the result of the hashing function to compute an
* index into the table.
* 10. A flag which indicates whether the table is to be dynamically resized. It
* is set to 1 in dynamically allocated tables, 0 in tables that are
* statically allocated.
*/
typedef struct hash_t {
#if defined(HASH_IMPLEMENTATION) || !defined(KAZLIB_OPAQUE_DEBUG)
struct hnode_t **hash_table; /* 1 */
hashcount_t hash_nchains; /* 2 */
hashcount_t hash_nodecount; /* 3 */
hashcount_t hash_maxcount; /* 4 */
hashcount_t hash_highmark; /* 5 */
hashcount_t hash_lowmark; /* 6 */
hash_comp_t hash_compare; /* 7 */
hash_fun_t hash_function; /* 8 */
hnode_alloc_t hash_allocnode;
hnode_free_t hash_freenode;
void *hash_context;
hash_val_t hash_mask; /* 9 */
int hash_dynamic; /* 10 */
#else
int hash_dummy;
#endif
} hash_t;
/*
* Hash scanner structure, used for traversals of the data structure.
* Notes:
* 1. Pointer to the hash table that is being traversed.
* 2. Reference to the current chain in the table being traversed (the chain
* that contains the next node that shall be retrieved).
* 3. Pointer to the node that will be retrieved by the subsequent call to
* hash_scan_next().
*/
typedef struct hscan_t {
#if defined(HASH_IMPLEMENTATION) || !defined(KAZLIB_OPAQUE_DEBUG)
hash_t *hash_table; /* 1 */
hash_val_t hash_chain; /* 2 */
hnode_t *hash_next; /* 3 */
#else
int hash_dummy;
#endif
} hscan_t;
extern hash_t *hash_create(hashcount_t, hash_comp_t, hash_fun_t);
extern void hash_set_allocator(hash_t *, hnode_alloc_t, hnode_free_t, void *);
extern void hash_destroy(hash_t *);
extern void hash_free_nodes(hash_t *);
extern void hash_free(hash_t *);
extern hash_t *hash_init(hash_t *, hashcount_t, hash_comp_t,
hash_fun_t, hnode_t **, hashcount_t);
extern void hash_insert(hash_t *, hnode_t *, const void *);
extern hnode_t *hash_lookup(hash_t *, const void *);
extern hnode_t *hash_delete(hash_t *, hnode_t *);
extern int hash_alloc_insert(hash_t *, const void *, void *);
extern void hash_delete_free(hash_t *, hnode_t *);
extern void hnode_put(hnode_t *, void *);
extern void *hnode_get(hnode_t *);
extern const void *hnode_getkey(hnode_t *);
extern hashcount_t hash_count(hash_t *);
extern hashcount_t hash_size(hash_t *);
extern int hash_isfull(hash_t *);
extern int hash_isempty(hash_t *);
extern void hash_scan_begin(hscan_t *, hash_t *);
extern hnode_t *hash_scan_next(hscan_t *);
extern hnode_t *hash_scan_delete(hash_t *, hnode_t *);
extern void hash_scan_delfree(hash_t *, hnode_t *);
extern int hash_verify(hash_t *);
extern hnode_t *hnode_create(void *);
extern hnode_t *hnode_init(hnode_t *, void *);
extern void hnode_destroy(hnode_t *);
#if defined(HASH_IMPLEMENTATION) || !defined(KAZLIB_OPAQUE_DEBUG)
#ifdef KAZLIB_SIDEEFFECT_DEBUG
#define hash_isfull(H) (SFX_CHECK(H)->hash_nodecount == (H)->hash_maxcount)
#else
#define hash_isfull(H) ((H)->hash_nodecount == (H)->hash_maxcount)
#endif
#define hash_isempty(H) ((H)->hash_nodecount == 0)
#define hash_count(H) ((H)->hash_nodecount)
#define hash_size(H) ((H)->hash_nchains)
#define hnode_get(N) ((N)->hash_data)
#define hnode_getkey(N) ((N)->hash_key)
#define hnode_put(N, V) ((N)->hash_data = (V))
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,10 @@
MAINTAINERCLEANFILES = Makefile.in
INCLUDES = -I$(top_srcdir)/libplugger -I$(includedir) -I$(top_srcdir)/libhash -I$(top_srcdir)/libvevo ${FFMPEG_CFLAGS}
AM_CFLAGS = $(CFLAGS) -freg-struct-return
LIBVJPLUG_LIB_FILE = libvjplug.la
noinst_LTLIBRARIES = $(LIBVJPLUG_LIB_FILE)
libvjplug_la_SOURCES = utility.c freeframe-loader.c frei0r-loader.c livido-loader.c plugload.c

View File

@@ -0,0 +1,509 @@
# Makefile.in generated by automake 1.9.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
SOURCES = $(libvjplug_la_SOURCES)
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = libplugger
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libvjplug_la_LIBADD =
am_libvjplug_la_OBJECTS = utility.lo freeframe-loader.lo \
frei0r-loader.lo livido-loader.lo plugload.lo
libvjplug_la_OBJECTS = $(am_libvjplug_la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libvjplug_la_SOURCES)
DIST_SOURCES = $(libvjplug_la_SOURCES)
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALTIVEC_CFLAGS = @ALTIVEC_CFLAGS@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCAS = @CCAS@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_AVCODEC_CFLAGS = @FFMPEG_AVCODEC_CFLAGS@
FFMPEG_AVCODEC_LIBS = @FFMPEG_AVCODEC_LIBS@
FFMPEG_AVFORMAT_CFLAGS = @FFMPEG_AVFORMAT_CFLAGS@
FFMPEG_AVFORMAT_LIBS = @FFMPEG_AVFORMAT_LIBS@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_CONFIG = @GLIB_CONFIG@
GLIB_LIBS = @GLIB_LIBS@
GL_CFLAGS = @GL_CFLAGS@
GL_LIBS = @GL_LIBS@
HAVE_ALTIVEC_FALSE = @HAVE_ALTIVEC_FALSE@
HAVE_ALTIVEC_TRUE = @HAVE_ALTIVEC_TRUE@
HAVE_ASM_MMX2_FALSE = @HAVE_ASM_MMX2_FALSE@
HAVE_ASM_MMX2_TRUE = @HAVE_ASM_MMX2_TRUE@
HAVE_ASM_MMX_FALSE = @HAVE_ASM_MMX_FALSE@
HAVE_ASM_MMX_TRUE = @HAVE_ASM_MMX_TRUE@
HAVE_ASM_NASM_FALSE = @HAVE_ASM_NASM_FALSE@
HAVE_ASM_NASM_TRUE = @HAVE_ASM_NASM_TRUE@
HAVE_ASM_SSE2_FALSE = @HAVE_ASM_SSE2_FALSE@
HAVE_ASM_SSE2_TRUE = @HAVE_ASM_SSE2_TRUE@
HAVE_ASM_SSE_FALSE = @HAVE_ASM_SSE_FALSE@
HAVE_ASM_SSE_TRUE = @HAVE_ASM_SSE_TRUE@
HAVE_DL_DLOPEN_FALSE = @HAVE_DL_DLOPEN_FALSE@
HAVE_DL_DLOPEN_TRUE = @HAVE_DL_DLOPEN_TRUE@
HAVE_JACK_FALSE = @HAVE_JACK_FALSE@
HAVE_JACK_TRUE = @HAVE_JACK_TRUE@
HAVE_MMX2_FALSE = @HAVE_MMX2_FALSE@
HAVE_MMX2_TRUE = @HAVE_MMX2_TRUE@
HAVE_MMX_FALSE = @HAVE_MMX_FALSE@
HAVE_MMX_TRUE = @HAVE_MMX_TRUE@
HAVE_PPCCPU_FALSE = @HAVE_PPCCPU_FALSE@
HAVE_PPCCPU_TRUE = @HAVE_PPCCPU_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SSE2_FALSE = @HAVE_SSE2_FALSE@
HAVE_SSE2_TRUE = @HAVE_SSE2_TRUE@
HAVE_SSE_FALSE = @HAVE_SSE_FALSE@
HAVE_SSE_TRUE = @HAVE_SSE_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_X86CPU_FALSE = @HAVE_X86CPU_FALSE@
HAVE_X86CPU_TRUE = @HAVE_X86CPU_TRUE@
HAVE_XML2_FALSE = @HAVE_XML2_FALSE@
HAVE_XML2_TRUE = @HAVE_XML2_TRUE@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBDV_CFLAGS = @LIBDV_CFLAGS@
LIBDV_LIBS = @LIBDV_LIBS@
LIBGETOPT_LIB = @LIBGETOPT_LIB@
LIBM_LIBS = @LIBM_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_RELEASE = @LT_RELEASE@
LT_REVISION = @LT_REVISION@
MAINT = @MAINT@
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
MAKEINFO = @MAKEINFO@
MJPEGTOOLS_CFLAGS = @MJPEGTOOLS_CFLAGS@
MJPEGTOOLS_LIBS = @MJPEGTOOLS_LIBS@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PROGRAM_NOPIC = @PROGRAM_NOPIC@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
SUPPORT_READ_DV2_FALSE = @SUPPORT_READ_DV2_FALSE@
SUPPORT_READ_DV2_TRUE = @SUPPORT_READ_DV2_TRUE@
V4LCONF_LIBS = @V4LCONF_LIBS@
VERSION = @VERSION@
XML2_CONFIG = @XML2_CONFIG@
XML_CPPFLAGS = @XML_CPPFLAGS@
XML_LIBS = @XML_LIBS@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
MAINTAINERCLEANFILES = Makefile.in
INCLUDES = -I$(top_srcdir)/libplugger -I$(includedir) -I$(top_srcdir)/libhash -I$(top_srcdir)/libvevo ${FFMPEG_CFLAGS}
AM_CFLAGS = $(CFLAGS) -freg-struct-return
LIBVJPLUG_LIB_FILE = libvjplug.la
noinst_LTLIBRARIES = $(LIBVJPLUG_LIB_FILE)
libvjplug_la_SOURCES = utility.c freeframe-loader.c frei0r-loader.c livido-loader.c plugload.c
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libplugger/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu libplugger/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
test "$$dir" != "$$p" || dir=.; \
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
libvjplug.la: $(libvjplug_la_OBJECTS) $(libvjplug_la_DEPENDENCIES)
$(LINK) $(libvjplug_la_LDFLAGS) $(libvjplug_la_OBJECTS) $(libvjplug_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freeframe-loader.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frei0r-loader.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livido-loader.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugload.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utility.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstLTLIBRARIES ctags distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
pdf pdf-am ps ps-am tags uninstall uninstall-am \
uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@@ -0,0 +1,8 @@
libplugger
a convenience library for veejay to load plugins
#define WITHOUT_FREEFRAME
#define WITHOUT_FREIOR

View File

@@ -0,0 +1,10 @@
instance PORTPTR
handle VOIDPTR dlopen
name STRING
num_params INT
num_inputs INT
info PORTPTR filter_templ
signature INT plug_type

View File

@@ -0,0 +1,51 @@
#ifndef PLUGDEFS_H
#define PLUGDEFS_H
#include <veejay/defs.h>
#define VEVO_PLUG_LIVIDO 0xffaa
#define VEVO_PLUG_FF 0x00ff
#define VEVO_PLUG_FR 0xffbb
#ifndef HAVE_LIVIDO_PORT_T
#define HAVE_LIVIDO_PORT_T
typedef vevo_port_t livido_port_t;
#endif
typedef void (*generic_process_f)(void *instance, double timecode);
typedef void (*generic_push_channel_f)(void *instance, int seq_num, int dir, VJFrame *frame);
typedef void (*generic_default_values_f)(void *instance, void *fx_values);
typedef void (*generic_push_parameter_f)(void *instance, int seq_num, void *value );
typedef void (*generic_clone_parameter_f)(void *instance, int seq_num, void *fx_values );
typedef void (*generic_reverse_clone_parameter_f)(void *instance, int seq_num, void *fxvalues );
typedef void (*generic_deinit_f)(void *instance);
typedef void (*generic_init_f)(void *instance, int w, int h );
extern int livido_property_num_elements(livido_port_t * p, const char *key);
extern int livido_property_atom_type(livido_port_t * p, const char *key);
extern size_t livido_property_element_size(livido_port_t * p, const char *key,const int idx);
extern livido_port_t *livido_port_new(int port_type);
extern void livido_port_free(livido_port_t * p);
extern int livido_property_set(livido_port_t * p,const char *key,int atom_type, int num_elements, void *src);
extern int livido_property_get(livido_port_t * p, const char *key, int idx, void *dst);
extern char **livido_list_properties(livido_port_t * p);
#define HOST_PARAM_NUMBER 1
#define HOST_PARAM_INDEX 2
#define HOST_PARAM_SWITCH 6
#define HOST_PARAM_COORD 3
#define HOST_PARAM_COLOR 4
#define HOST_PARAM_TEXT 5
#define livido_port_free vevo_port_free
#define livido_port_new vevo_port_new
#define livido_property_set vevo_property_set
#define livido_property_get vevo_property_get
#define livido_property_element_size vevo_property_element_size
#define livido_property_num_elements vevo_property_num_elements
#define livido_property_atom_type vevo_property_atom_type
#define livido_list_properties vevo_list_properties
//veejay only
#define livido_port_recursive_free vevo_port_recursive_free
#define livido_dump_port vevo_port_dump
#define livido_property_soft_reference vevo_property_soft_reference
#endif

View File

@@ -0,0 +1,242 @@
#include <config.h>
#include <string.h>
#include <dirent.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <libhash/hash.h>
#include <libvjmsg/vj-common.h>
#include <libvjmem/vjmem.h>
#include <libvevo/libvevo.h>
#include <libplugger/defs.h>
#include <libyuv/yuvconv.h>
#include <veejay/portdef.h>
#include <ffmpeg/avcodec.h>
#define LINUX 1
#include <libplugger/specs/FreeFrame.h>
#define V_BITS 32
/** \defgroup freeframe FreeFrame Host
*
* Provides a host implementation for FreeFrame plugins, see http://freeframe.sourceforge.net
*/
#if (V_BITS == 32)
#define FF_CAP_V_BITS_VIDEO FF_CAP_32BITVIDEO
#elif (V_BITS == 24)
#define FF_CAP_V_BITS_VIDEO FF_CAP_24BITVIDEO
#else // V_BITS = 16
#define FF_CAP_V_BITS_VIDEO FF_CAP_16BITVIDEO
#endif
void* deal_with_ff( void *handle, char *name )
{
void *port = vevo_port_new( VEVO_FF_PORT );
char *plugin_name = NULL;
plugMainType *q = (plugMainType*) dlsym( handle, "plugMain" );
if( q == NULL )
{
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked FF plugin '%s': %s", name, dlerror());
vevo_port_free( port );
return NULL;
}
PlugInfoStruct *pis = (q(FF_GETINFO, NULL, 0)).PISvalue;
if ((q(FF_GETPLUGINCAPS, (LPVOID)FF_CAP_V_BITS_VIDEO, 0)).ivalue != FF_TRUE)
{
veejay_msg(VEEJAY_MSG_ERROR, "%s:%d", __FUNCTION__,__LINE__ );
vevo_port_free(port);
return NULL;
}
if (pis->APIMajorVersion < 1)
{
veejay_msg(VEEJAY_MSG_ERROR, "Cowardly refusing FF API version < 1.0" );
vevo_port_free(port);
return NULL;
}
plugin_name = strdup( pis->pluginName );
if ( (q(FF_INITIALISE, NULL, 0 )).ivalue == FF_FAIL )
{
veejay_msg(VEEJAY_MSG_ERROR, "Cannot call init()");
vevo_port_free(port);
if(plugin_name) free(plugin_name);
return NULL;
}
int n_params = q( FF_GETNUMPARAMETERS, NULL, 0 ).ivalue;
if( n_params == FF_FAIL )
{
veejay_msg(VEEJAY_MSG_ERROR, "Cannot get number of parameters");
vevo_port_free(port);
if(plugin_name) free(plugin_name);
return NULL;
}
int mix = 0;
void *base = (void*) q;
vevo_property_set( port, "handle", VEVO_ATOM_TYPE_VOIDPTR,1, &handle );
vevo_property_set( port, "name", VEVO_ATOM_TYPE_STRING,1, &plugin_name );
vevo_property_set( port, "base", VEVO_ATOM_TYPE_VOIDPTR, 1, &base );
vevo_property_set( port, "instance", VEVO_ATOM_TYPE_INT, 0, NULL );
vevo_property_set( port, "n_params", VEVO_ATOM_TYPE_INT, 1,&n_params );
vevo_property_set( port, "mixer", VEVO_ATOM_TYPE_INT, 1,&mix );
int p;
for( p= 0; p < n_params; p ++ )
{
void *parameter = vevo_port_new( VEVO_FF_PARAM_PORT );
int type = q( FF_GETPARAMETERTYPE, (LPVOID) p, 0 ).ivalue;
// name, kind, flags, description, min,max,default,transition
vevo_property_set( parameter, "type", VEVO_ATOM_TYPE_INT, 1, &type);
int min = 0;
int max = 100;
if( type == FF_TYPE_BOOLEAN )
{
min = 0;
max = 1;
}
else if( type == FF_TYPE_TEXT )
{
min = 0;
max = 0;
}
vevo_property_set( parameter, "min", VEVO_ATOM_TYPE_INT,1, &min );
vevo_property_set( parameter, "max", VEVO_ATOM_TYPE_INT,1, &max );
float dvalue = 0.0;
dvalue = q( FF_GETPARAMETERDEFAULT, (LPVOID) p, 0).fvalue;
int ivalue = (int)(dvalue * 100.0);
vevo_property_set( parameter, "default", VEVO_ATOM_TYPE_INT,1 ,&ivalue );
char key[20];
snprintf(key,20, "p%02d", p );
vevo_property_set( port, key, VEVO_ATOM_TYPE_VOIDPTR, 1, &parameter );
}
free(plugin_name);
return port;
}
int freeframe_plug_init( void *plugin, int w, int h )
{
VideoInfoStruct v;
v.frameWidth = w;
v.frameHeight = h;
v.orientation = 1;
v.bitDepth = FF_CAP_V_BITS_VIDEO;
void *base = NULL;
int error = vevo_property_get( plugin, "base", 0, &base);
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
plugMainType *q = (plugMainType*) base;
int instance = q( FF_INSTANTIATE, &v, 0).ivalue;
if( instance == FF_FAIL )
{
veejay_msg(VEEJAY_MSG_ERROR, "Unable to initialize plugin");
return 0;
}
vevo_property_set( plugin, "instance", VEVO_ATOM_TYPE_INT, 1, &instance );
return 1;
}
void freeframe_plug_deinit( void *plugin )
{
void *base = NULL;
int error = vevo_property_get( plugin, "base", 0, &base);
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
plugMainType *q = (plugMainType*) base;
int instance = 0;
error = vevo_property_get( plugin, "instance", 0, &instance );
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
if( instance )
q( FF_DEINSTANTIATE, NULL, instance );
}
void freeframe_plug_free( void *plugin )
{
int n = 0;
void *base = NULL;
int error = vevo_property_get( plugin, "base", 0, &base);
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
plugMainType *q = (plugMainType*) base;
q( FF_DEINITIALISE, NULL, 0 );
}
int freeframe_plug_process( void *plugin, void *in )
{
void *base = NULL;
int error = vevo_property_get( plugin, "base", 0, &base);
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
plugMainType *q = (plugMainType*) base;
int instance = 0;
error = vevo_property_get( plugin, "instance",0, &instance );
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
q( FF_PROCESSFRAME, in, instance );
return 1;
}
void freeframe_plug_control( void *port, int *args )
{
SetParameterStruct v;
void *base = NULL;
vevo_property_get( port, "base", 0, &base);
plugMainType *q = (plugMainType*) base;
int p,num_params=0;
int instance = 0;
int error = 0;
error = vevo_property_get( port, "n_params", 0, &num_params);
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
error = vevo_property_get( port, "instance", 0, &instance );
#ifdef STRICT_CHECING
assert( error == LIVIDO_NO_ERROR );
#endif
for( p = 0; p < num_params; p ++ )
{
v.value = ((float) args[p]) * 0.01;
v.index = p;
q( FF_SETPARAMETER, &v, instance );
}
}
void freeframe_plug_process_ext( void *port, void *in0, void *in1, void *out)
{
#ifdef STRICT_CHECING
assert(0);
#endif
/* void *base = NULL;
vevo_property_get( plugin, "base", 0, &base);
plugMainType *q = (plugMainType*) base;
int instance = 0;
vevo_property_get( plugin, "instance",0, &instance );
q( FF_PROCESSFRAME, buffer, instance );*/
}

View File

@@ -0,0 +1,12 @@
#ifndef FREEFRAME_LOADER
#define FREEFRAME_LOADER
void* deal_with_ff( void *handle, char *name );
int freeframe_plug_init( void *plugin , int w, int h );
void freeframe_plug_deinit( void *plugin );
void freeframe_plug_free( void *plugin );
int freeframe_plug_process( void *plugin, void *in );
void freeframe_plug_process_ext( void *plugin, void *in0, void *in1, void *out);
void freeframe_plug_control( void *plugin, int *args );
#endif

View File

@@ -0,0 +1,315 @@
#include <config.h>
#include <string.h>
#include <dirent.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <libhash/hash.h>
#include <libvjmsg/vj-common.h>
#include <libvjmem/vjmem.h>
#include <libvevo/libvevo.h>
#include <libplugger/defs.h>
#include <libyuv/yuvconv.h>
#include <ffmpeg/avcodec.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <veejay/portdef.h>
#ifdef HAVE_STRICT
#include <assert.h>
#endif
/** \defgroup freior Freior Host
*
* This module provides a Frei0r Host
*/
#include <libplugger/specs/frei0r.h>
typedef f0r_instance_t (*f0r_construct_f)(unsigned int width, unsigned int height);
typedef void (*f0r_destruct_f)(f0r_instance_t instance);
typedef void (*f0r_deinit_f)(void);
typedef int (*f0r_init_f)(void);
typedef void (*f0r_get_plugin_info_f)(f0r_plugin_info_t *info);
typedef void (*f0r_get_param_info_f)(f0r_param_info_t *info, int param_index);
typedef void (*f0r_update_f)(f0r_instance_t instance, double time, const uint32_t *inframe, uint32_t *outframe);
typedef void (*f0r_update2_f)(f0r_instance_t instance, double time, const uint32_t *inframe1, const uint32_t *inframe2, const uint32_t *inframe3, uint32_t *outframe);
typedef void (*f0r_set_param_value_f)(f0r_instance_t *instance, f0r_param_t *param, int param_index);
static int init_param_fr( void *port, int p, int hint)
{
void *parameter = vevo_port_new( VEVO_FR_PARAM_PORT );
int min = 0;
int max = 100;
int dv = 50;
int n_values = 0;
switch(hint)
{
case F0R_PARAM_DOUBLE:
n_values = 1;
break;
case F0R_PARAM_BOOL:
max = 1;
dv = 0;
n_values = 1;
break;
case F0R_PARAM_COLOR:
n_values = 3;
break;
case F0R_PARAM_POSITION:
n_values = 2;
break;
default:
break;
}
if( n_values > 0 )
{
int values[n_values];
int k;
for( k = 0; k < n_values; k ++ ) values[k] = 0;
vevo_property_set( parameter, "value", VEVO_ATOM_TYPE_INT, n_values, &values );
}
vevo_property_set( parameter, "value", VEVO_ATOM_TYPE_INT, 0, NULL );
vevo_property_set( parameter, "min", VEVO_ATOM_TYPE_INT,1, &min );
vevo_property_set( parameter, "max", VEVO_ATOM_TYPE_INT,1, &max );
vevo_property_set( parameter, "default", VEVO_ATOM_TYPE_INT,1, &dv );
vevo_property_set( parameter, "hint", VEVO_ATOM_TYPE_INT,1, &hint );
char key[20];
snprintf(key,20, "p%02d", p );
vevo_property_set( port, key, VEVO_ATOM_TYPE_VOIDPTR, 1, &parameter );
return n_values;
}
void* deal_with_fr( void *handle, char *name)
{
void *port = vevo_port_new( VEVO_FR_PORT );
char *plugin_name = NULL;
f0r_init_f f0r_init = dlsym( handle, "f0r_init" );
if( f0r_init == NULL )
{
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
vevo_port_free( port );
return NULL;
}
f0r_deinit_f f0r_deinit = dlsym( handle, "f0r_deinit" );
if( f0r_deinit == NULL )
{
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
vevo_port_free( port );
return NULL;
}
f0r_get_plugin_info_f f0r_info = dlsym( handle, "f0r_get_plugin_info");
if( f0r_info == NULL )
{
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
vevo_port_free( port );
return NULL;
}
f0r_get_param_info_f f0r_param= dlsym( handle, "f0r_get_param_info" );
if( f0r_param == NULL )
{
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': %s", name, dlerror());
vevo_port_free( port );
return NULL;
}
//@ gamble
void *f0r_construct = dlsym( handle, "f0r_construct" );
void *f0r_destruct = dlsym( handle, "f0r_destruct" );
void *processf = dlsym( handle, "f0r_update" );
// void *processm = dlsym( handle, "f0r_update2" );
void *set_params = dlsym( handle, "f0r_set_param_value" );
vevo_property_set( port, "handle", VEVO_ATOM_TYPE_VOIDPTR,1, &handle );
vevo_property_set( port, "init", VEVO_ATOM_TYPE_VOIDPTR, 1, &f0r_init );
vevo_property_set( port, "deinit", VEVO_ATOM_TYPE_VOIDPTR, 1, &f0r_deinit );
vevo_property_set( port, "info", VEVO_ATOM_TYPE_VOIDPTR, 1, &f0r_info );
vevo_property_set( port, "parameters", VEVO_ATOM_TYPE_VOIDPTR, 1, &f0r_param );
vevo_property_set( port, "construct", VEVO_ATOM_TYPE_VOIDPTR, 1, &f0r_construct );
vevo_property_set( port, "destruct", VEVO_ATOM_TYPE_VOIDPTR, 1, &f0r_destruct );
vevo_property_set( port, "process", VEVO_ATOM_TYPE_VOIDPTR, 1, &processf);
// vevo_property_set( port, "process_mix", VEVO_ATOM_TYPE_VOIDPTR, 1, &processm);
vevo_property_set( port, "set_params", VEVO_ATOM_TYPE_VOIDPTR,1,&set_params);
f0r_plugin_info_t finfo;
f0r_param_info_t pinfo;
memset( &finfo,0,sizeof(f0r_plugin_info_t));
memset( &pinfo,0,sizeof(f0r_param_info_t));
if( (*f0r_init)() == 0)
{
veejay_msg(VEEJAY_MSG_ERROR,"\tBorked frei0r plugin '%s': ", name);
vevo_port_free( port );
return NULL;
}
(*f0r_info)(&finfo);
if( finfo.frei0r_version != FREI0R_MAJOR_VERSION )
{
(*f0r_deinit)();
vevo_port_free(port);
return NULL;
}
int extra = 0;
//@ fixme
// if( finfo.plugin_type == F0R_PLUGIN_TYPE_MIXER2 )
// extra = 1;
int n_params = finfo.num_params;
int r_params = 0;
int p = 0;
for ( p = 0; p < n_params; p ++ )
{
(*f0r_param)(&pinfo,p);
r_params += init_param_fr( port, p, pinfo.type );
}
if( r_params > 8 )
r_params = 8;
char *plug_name = strdup( finfo.name );
vevo_property_set( port, "n_params", VEVO_ATOM_TYPE_INT, 1, &r_params );
vevo_property_set( port, "f0r_p", VEVO_ATOM_TYPE_INT,1, &n_params );
vevo_property_set( port, "name", VEVO_ATOM_TYPE_STRING,1, &plug_name );
vevo_property_set( port, "mixer", VEVO_ATOM_TYPE_INT,1, &extra );
free(plug_name);
return port;
}
int frei0r_plug_init( void *plugin , int w, int h )
{
f0r_construct_f base;
vevo_property_get( plugin, "construct", 0, &base);
f0r_instance_t k = (*base)(w,h);
vevo_property_set(plugin, "instance", VEVO_ATOM_TYPE_VOIDPTR, 1, &k);
if( k == NULL )
veejay_msg(VEEJAY_MSG_ERROR, "Unable to initialize plugin");
// store instance running status
int state = 1;
vevo_property_set( plugin, "running", VEVO_ATOM_TYPE_INT, 1, &state );
return state;
}
void frei0r_plug_deinit( void *plugin, int w, int h )
{
int state = 0;
vevo_property_get( plugin, "state", 0, &state );
if(!state)
return;
f0r_destruct_f base;
vevo_property_get( plugin, "destruct", 0, &base);
f0r_instance_t instance;
vevo_property_get( plugin, "instance", 0, &instance );
(*base)(instance);
}
void frei0r_plug_free( void *plugin )
{
int n = 0;
//@@ clear parameters
f0r_deinit_f base;
vevo_property_get( plugin, "deinit", 0, &base);
(*base)();
vevo_property_get( plugin, "f0r_p", 0, &n );
}
int frei0r_plug_process( void *plugin, void *buffer, void *out_buffer )
{
f0r_update_f base;
vevo_property_get( plugin, "process", 0, &base );
f0r_instance_t instance;
vevo_property_get( plugin, "instance",0, &instance );
(*base)( instance, rand(), buffer, out_buffer );
return 1;
}
void frei0r_plug_control( void *port, int *args )
{
int p,num_params=0;
vevo_property_get( port, "n_params", 0, &num_params);
int v_params = 0;
f0r_set_param_value_f q;
vevo_property_get( port, "set_params", 0, &q);
for( p = 0; p < num_params; p ++ )
{
char key[20];
sprintf(key, "p%02d", p );
void *param = NULL;
vevo_property_get( port, key, 0, &param );
if( param ) continue;
int n = vevo_property_element_size( param, "value", p );
f0r_param_position_t pos;
f0r_param_color_t col;
double value = 0.0;
int instance = 0;
vevo_property_get( port, "instance", 0, &instance );
int max = 0;
vevo_property_get( param, "max",0,&max);
void *fparam = NULL;
switch(n)
{
case 0:
case 1:
value = ( (double) args[v_params] * (max == 100 ? 0.01: 1));
fparam = &value;
v_params ++;
break;
case 2:
pos.x = ( (double) args[v_params] * 0.01 );
v_params ++;
pos.y = ( (double) args[v_params] * 0.01 );
v_params ++;
fparam = &pos;
break;
case 3:
col.r = ( (double) args[v_params] * 0.01 );
v_params ++;
col.g = ( (double) args[v_params] * 0.01 );
v_params ++;
col.b = ( (double) args[v_params] * 0.01 );
v_params ++;
fparam = &col;
break;
default:
break;
}
if( fparam )
(*q)( instance, fparam, p );
}
}
void frei0r_plug_process_ext( void *plugin, void *in0, void *in1, void *out)
{
f0r_update2_f base;
vevo_property_get( plugin, "process_mix", 0, &base );
f0r_instance_t instance;
vevo_property_get( plugin, "instance",0, &instance );
(*base)( instance, rand(), in0, in1, NULL, out );
}

View File

@@ -0,0 +1,18 @@
#ifndef FREIORLOADER_H
#define FREIORLOADER_H
void* deal_with_fr( void *handle, char *name );
int frei0r_plug_init( void *plugin , int w, int h );
void frei0r_plug_deinit( void *plugin );
void frei0r_plug_free( void *plugin );
int frei0r_plug_process( void *plugin, void *in, void *out );
void frei0r_plug_control( void *plugin, int *args );
void frei0r_plug_process_ext( void *plugin, void *in1, void *in2, void *out);
#endif

View File

@@ -0,0 +1,901 @@
/*
* Copyright (C) 2002-2006 Niels Elburg <nelburg@looze.net>
*
* This program is free software you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
/** \defgroup livido Livido Host
*
* See livido specification at http://livido.dyne.org
*
* This implements an almost complete and hopefully "correct" livido host.
*/
#include <config.h>
#ifdef STRICT_CHECKING
#include <assert.h>
#endif
#include <string.h>
#include <dirent.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <libhash/hash.h>
#include <libvjmsg/vj-common.h>
#include <libvjmem/vjmem.h>
#include <libvevo/libvevo.h>
#include <libplugger/defs.h>
#include <libplugger/specs/livido.h>
#include <veejay/portdef.h>
#include <libyuv/yuvconv.h>
#include <ffmpeg/avcodec.h>
#include <stdlib.h>
#include <libplugger/utility.h>
#include <libplugger/livido-loader.h>
#define LIVIDO_COPY 1
#define IS_RGB_PALETTE( p ) ( p < 512 ? 1 : 0 )
static int pref_palette_ = 0;
static int pref_palette_ffmpeg_ = 0;
static int livido_signature_ = VEVO_PLUG_LIVIDO;
typedef void (*livido_set_parameter_f)( void *instance, void *value );
static struct
{
int lp;
int pf;
} palette_list_[] =
{
{ LIVIDO_PALETTE_RGB888, PIX_FMT_RGB24 },
{ LIVIDO_PALETTE_BGR888, PIX_FMT_BGR24 },
{ LIVIDO_PALETTE_RGB565, PIX_FMT_RGB565 },
{ LIVIDO_PALETTE_YUV422P,PIX_FMT_YUV422P },
{ LIVIDO_PALETTE_YUV420P,PIX_FMT_YUV420P },
{ LIVIDO_PALETTE_YUV444P,PIX_FMT_YUV444P },
{ LIVIDO_PALETTE_RGBA32, PIX_FMT_RGBA32 },
{ -1, -1 }
};
static struct
{
int it;
int pf;
} img_palettes_[] =
{
{ 0, PIX_FMT_YUV420P },
{ 1, PIX_FMT_YUV422P },
{ 2, PIX_FMT_YUV444P },
{ -1, -1 },
};
static struct
{
int it;
int lp;
} vj_palettes_[] =
{
{ 0, LIVIDO_PALETTE_YUV420P },
{ 1, LIVIDO_PALETTE_YUV422P },
{ 2, LIVIDO_PALETTE_YUV444P },
{ -1, -1 },
};
static int select_ffmpeg_palette(int lvd_palette )
{
int i = 0;
for( i = 0; palette_list_[i].pf != -1 ; i ++ )
if( lvd_palette == palette_list_[i].lp )
return palette_list_[i].pf;
return -1;
}
static int select_livido_palette(int palette )
{
int i = 0;
for( i = 0; palette_list_[i].pf != -1 ; i ++ )
if( palette == palette_list_[i].pf )
return palette_list_[i].lp;
return -1;
}
static int configure_channel( void *instance, const char *name, int channel_id, VJFrame *frame )
{
void *channel = NULL;
int error = 0;
void *pd[4];
error = vevo_property_get( instance, name, channel_id, &channel );
#ifdef STRICT_CHECKING
if( error != LIVIDO_NO_ERROR )
veejay_msg(0, "Key '%s' element %d does not exist in fx instance", name, channel_id );
assert( error == LIVIDO_NO_ERROR );
#endif
error = vevo_property_set( channel , "fps" , LIVIDO_ATOM_TYPE_DOUBLE,1, &(frame->fps));
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
int rowstrides[4] = { frame->width, frame->uv_width, frame->uv_width, 0 };
error = vevo_property_set( channel , "rowstrides", LIVIDO_ATOM_TYPE_INT,4, &rowstrides );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
error = vevo_property_set( channel , "timecode", LIVIDO_ATOM_TYPE_DOUBLE,1, &(frame->timecode));
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
pd[0] = (void*) frame->data[0];
pd[1] = (void*) frame->data[1];
pd[2] = (void*) frame->data[2];
pd[3] = (void*) frame->data[3];
error = vevo_property_set( channel, "pixel_data",LIVIDO_ATOM_TYPE_VOIDPTR, 4, &pd);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
int hsampling = 0;
if( vevo_property_get( channel, "HOST_sampling", 0, &hsampling ) == LIVIDO_NO_ERROR && name[0] == 'i')
{
void *sampler = NULL;
error = vevo_property_get(channel, "HOST_sampler", 0, &sampler );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
chroma_supersample( hsampling, sampler, pd, frame->width,
frame->height );
}
return 1;
}
void livido_plug_parameter_set_text( void *parameter, void *value )
{
veejay_msg(0,"%s: value = '%s'", __FUNCTION__, *((char*) value ));
vevo_property_set( parameter, "value", LIVIDO_ATOM_TYPE_STRING, 1, value );
}
void livido_plug_parameter_set_number( void *parameter, void *value )
{
veejay_msg(0,"%s: value = '%d'", __FUNCTION__, *((double*) value ));
vevo_property_set( parameter, "value", LIVIDO_ATOM_TYPE_DOUBLE, 1, value );
}
void livido_plug_parameter_set_index( void *parameter, void *value)
{
veejay_msg(0,"%s: value = '%s'", __FUNCTION__, *((int*) value ));
vevo_property_set( parameter, "value", VEVO_ATOM_TYPE_INT, 1, value );
}
void livido_plug_parameter_set_bool( void *parameter, void *value )
{
veejay_msg(0,"%s: value = '%s'", __FUNCTION__, *((int*) value ));
vevo_property_set( parameter, "value", VEVO_ATOM_TYPE_BOOL, 1, value );
}
void livido_plug_parameter_set_color( void *parameter,void *value )
{
veejay_msg(0,"%s: array", __FUNCTION__);
vevo_property_set( parameter, "value", VEVO_ATOM_TYPE_DOUBLE, 4, value );
}
void livido_plug_parameter_set_coord( void *parameter, void *value )
{
veejay_msg(0,"%s: array", __FUNCTION__);
vevo_property_set( parameter, "value", LIVIDO_ATOM_TYPE_DOUBLE, 2, value );
}
static int livido_scan_parameters( void *plugin, void *plugger_port )
{
int n = 0;
int vj_np = 0;
int NP = vevo_property_num_elements( plugin , "in_parameter_templates");
int error = 0;
if( NP <= 0 )
return 0;
for( n = 0; n < NP; n ++ )
{
char key[20];
void *param = NULL;
error = vevo_property_get( plugin, "in_parameter_templates", n, &param );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
sprintf(key, "p%02d", n );
int ikind = 0;
char *kind = get_str_vevo( param, "kind" );
#ifdef STRICT_CHECKING
assert( kind != NULL );
#endif
void *vje_port = vevo_port_new( VEVO_VJE_PORT );
int tmp[4];
double dtmp[4];
vevo_property_set( plugger_port, key, LIVIDO_ATOM_TYPE_PORTPTR,1, &vje_port );
if(strcasecmp(kind, "NUMBER") == 0 ) {
ikind = HOST_PARAM_NUMBER; vj_np ++;
clone_prop_vevo( param, vje_port, "default", "value" );
clone_prop_vevo( param, vje_port, "default", "default" );
clone_prop_vevo( param, vje_port, "min", "min" );
clone_prop_vevo( param, vje_port, "max", "max" );
double a = 0;
double b = 0;
vevo_property_get( vje_port,"value" ,0, &a );
vevo_property_get( param,"default" ,0, &b );
#ifdef STRICT_CHECKING
assert( a == b );
#endif
} else if (strcasecmp(kind, "INDEX") == 0 ) {
ikind = HOST_PARAM_INDEX; vj_np ++;
clone_prop_vevo( param, vje_port, "default", "value" );
clone_prop_vevo( param, vje_port, "default", "default" );
clone_prop_vevo( param, vje_port, "min", "min" );
clone_prop_vevo( param, vje_port, "max", "max" );
} else if (strcasecmp(kind, "SWITCH") == 0 ) {
ikind = HOST_PARAM_SWITCH; vj_np ++;
clone_prop_vevo( param, vje_port, "default", "value" );
clone_prop_vevo( param, vje_port, "default", "default" );
tmp[0] = 0; tmp[1] = 1;
vevo_property_set(vje_port, "min", VEVO_ATOM_TYPE_BOOL,1, &tmp[0] );
vevo_property_set(vje_port, "max", VEVO_ATOM_TYPE_BOOL,1, &tmp[1] );
} else if (strcasecmp(kind, "COORDINATE" ) == 0 ) {
ikind = HOST_PARAM_COORD; vj_np += 2;
dtmp[0] = 0.0; dtmp[1] = 0.0;
vevo_property_set(vje_port, "min", VEVO_ATOM_TYPE_DOUBLE,1, &dtmp[0] );
dtmp[1] = 1.0; dtmp[0] = 1.0;
vevo_property_set(vje_port, "max", VEVO_ATOM_TYPE_DOUBLE,1, &dtmp[1] );
double *dv = get_dbl_arr_vevo( vje_port, "default" );
vevo_property_set(vje_port, "default", VEVO_ATOM_TYPE_DOUBLE,2,&dv );
vevo_property_set(vje_port, "value", VEVO_ATOM_TYPE_DOUBLE,2,&dv );
free(dv);
} else if (strcasecmp(kind, "COLOR" ) == 0 ) {
ikind = HOST_PARAM_COLOR; vj_np += 3; // fixme, should be 4
dtmp[0] = 0.0; dtmp[1] = 0.0; dtmp[2] = 0.0; dtmp[3] = 0.0;
vevo_property_set(vje_port, "min", VEVO_ATOM_TYPE_DOUBLE,4, &dtmp );
dtmp[0] = 1.0; dtmp[1] = 1.0; dtmp[2] = 1.0; dtmp[3] = 1.0;
vevo_property_set(vje_port, "max", VEVO_ATOM_TYPE_DOUBLE,4, &dtmp );
double *dv = get_dbl_arr_vevo( vje_port, "default" );
vevo_property_set(vje_port, "default", VEVO_ATOM_TYPE_DOUBLE,2,&dv );
free(dv);
} else if (strcasecmp(kind, "TEXT" ) == 0 ) {
ikind = HOST_PARAM_TEXT;
vj_np ++;
#ifdef STRICT_CHECKING
assert(0); //@implement me
#endif
}
vevo_property_set( param, "HOST_kind", VEVO_ATOM_TYPE_INT,1,&ikind );
vevo_property_set( vje_port, "HOST_kind", VEVO_ATOM_TYPE_INT,1,&ikind );
}
return vj_np;
}
/*
*
*
*nt vevo_property_from_string( vevo_port_t *port, const char *s, const char *key, int n_elem, int type)
{
*/
static int init_parameter_port(livido_port_t *ptr, livido_port_t *in_param )
{
int kind = 0;
int error = vevo_property_get( ptr, "HOST_kind", 0, &kind );
if( error != VEVO_NO_ERROR )
return 0;
livido_set_parameter_f pctrl;
switch(kind)
{
case HOST_PARAM_INDEX:
pctrl = livido_plug_parameter_set_index; break;
case HOST_PARAM_NUMBER:
pctrl = livido_plug_parameter_set_number; break;
case HOST_PARAM_SWITCH:
pctrl = livido_plug_parameter_set_bool; break;
case HOST_PARAM_COORD:
pctrl = livido_plug_parameter_set_coord; break;
case HOST_PARAM_COLOR:
pctrl = livido_plug_parameter_set_color; break;
case HOST_PARAM_TEXT:
pctrl = livido_plug_parameter_set_text; break;
#ifdef STRICT_CHECKING
default:
return 0;
break;
#endif
}
vevo_property_set( in_param, "HOST_parameter_func", LIVIDO_ATOM_TYPE_VOIDPTR,1,&pctrl );
return 1;
}
static int match_palette(livido_port_t *ptr, int palette )
{
int p;
int np = vevo_property_num_elements( ptr, "palette_list" );
int error = 0;
for( p = 0; p < np; p ++ )
{
int ppalette = 0;
error = vevo_property_get( ptr, "palette_list", p, &ppalette );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
if( palette == ppalette )
return 1;
}
return 0;
}
static int find_cheap_palette(livido_port_t *c, livido_port_t *ptr , int w)
{
int palette = LIVIDO_PALETTE_YUV444P;
if( match_palette(ptr,palette ))
{
void *sampler = subsample_init(w);
int mode = (pref_palette_ == LIVIDO_PALETTE_YUV422P ? SSM_422_444 : SSM_420_JPEG_BOX);
vevo_property_set( c, "HOST_sampler", LIVIDO_ATOM_TYPE_VOIDPTR,
1,&sampler);
vevo_property_set( c, "HOST_sampling", LIVIDO_ATOM_TYPE_INT,
1, &mode );
vevo_property_set( c, "current_palette", LIVIDO_ATOM_TYPE_INT,
1, &palette );
return 1;
}
if( match_palette(ptr, LIVIDO_PALETTE_RGB24 ) )
{
}
if( match_palette(ptr, LIVIDO_PALETTE_RGBA32 ))
{
}
return 0;
}
static int init_channel_port(livido_port_t *ptr, livido_port_t *in_channel, int w, int h)
{
int np = vevo_property_num_elements( ptr, "palette_list" );
int p = 0;
int palette = 0;
int plug_pp = 0;
int flags = 0;
int error = vevo_property_get( ptr, "palette_list", 0, &plug_pp );
if( np < 0 )
return 0;
if( match_palette( ptr, pref_palette_ ))
vevo_property_set( in_channel, "current_palette", LIVIDO_ATOM_TYPE_INT,1,&pref_palette_ );
else
{
if(!find_cheap_palette(in_channel ,ptr,w))
{
veejay_msg(0, "No support for any palette in plugin");
return 0;
}
}
error = vevo_property_get( ptr, "flags", 0, &flags );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
livido_property_set( in_channel, "width", LIVIDO_ATOM_TYPE_INT,1,&w );
livido_property_set( in_channel, "height", LIVIDO_ATOM_TYPE_INT,1,&h );
livido_property_set( in_channel, "flags", LIVIDO_ATOM_TYPE_INT,1,&flags );
error = vevo_property_get( in_channel, "current_palette",0,NULL );
if( error != LIVIDO_NO_ERROR )
{
veejay_msg(0, "No suitable palette found.");
return 0;
}
return 1;
}
//@ w x h as HOST_width, HOST_height
/* utility function to instantiate a port from a template, only sets parent_template */
static int init_ports_from_template( livido_port_t *filter_instance, livido_port_t *template, int id, const char *name, const char *iname, int w, int h, int host_palette )
{
int num = 0;
int i;
int error = 0;
error = livido_property_get( template, name, 0, NULL);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR);
#endif
num = livido_property_num_elements( template, name );
if(num <= 0)
return 0;
livido_port_t *in_channels[num];
for( i = 0; i < num; i ++ )
{
livido_port_t *ptr = NULL;
error = livido_property_get( template, name, i, &ptr );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
in_channels[i] = livido_port_new( id );
livido_property_set( in_channels[i], "parent_template",LIVIDO_ATOM_TYPE_PORTPTR,1, &ptr);
livido_property_soft_reference( in_channels[i], "parent_template" );
;
if( id == LIVIDO_PORT_TYPE_CHANNEL )
{
if(!init_channel_port( ptr,in_channels[i],w,h))
return -1;
}
else if( id == LIVIDO_PORT_TYPE_PARAMETER )
{
if(!init_parameter_port( ptr, in_channels[i] ))
return -1;
}
#ifdef STRICT_CHECKING
else
{
assert(0);
}
#endif
}
livido_property_set( filter_instance, iname, LIVIDO_ATOM_TYPE_PORTPTR,num, in_channels );
livido_property_soft_reference( filter_instance, name );
return num;
}
/* initialize a plugin */
void *livido_plug_init(void *plugin,int w, int h )
{
void *plug_info = NULL;
void *filter_templ = NULL;
int flags =0;
int error = vevo_property_get( plugin, "instance", 0, &plug_info);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
error = vevo_property_get( plug_info, "filters",0,&filter_templ);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
void *filter_instance = livido_port_new( LIVIDO_PORT_TYPE_FILTER_INSTANCE );
int num_in_channels = init_ports_from_template(
filter_instance, filter_templ,
LIVIDO_PORT_TYPE_CHANNEL,
"in_channel_templates", "in_channels",
w,h, 0);
if( num_in_channels < 0 )
return NULL;
int num_out_channels = init_ports_from_template(
filter_instance, filter_templ,
LIVIDO_PORT_TYPE_CHANNEL,
"out_channel_templates", "out_channels",
w,h, 0 );
if( num_out_channels < 0 )
return NULL;
int num_in_params = init_ports_from_template(
filter_instance, filter_templ,
LIVIDO_PORT_TYPE_PARAMETER,
"in_parameter_templates", "in_parameters",
w,h, 0 );
if( num_in_params < 0 )
return NULL;
int num_out_params = init_ports_from_template(
filter_instance, filter_templ,
LIVIDO_PORT_TYPE_PARAMETER,
"in_parameter_templates", "in_parameters",
w,h,0 );
if( num_out_params < 0 )
return NULL;
#ifdef STRICT_CHECKING
assert( num_in_params >= 0 );
assert( num_in_channels >= 0 );
assert( num_out_channels >= 0 );
#endif
//@ call livido init
livido_init_f init_f;
error = vevo_property_get( filter_templ, "init_func", 0, &init_f );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
error = (*init_f)( (livido_port_t*) filter_instance );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
//@ ok, finish
vevo_property_set( filter_instance, "filter_templ", VEVO_ATOM_TYPE_PORTPTR,1, &filter_templ );
vevo_property_soft_reference( filter_instance, "filter_templ" );
//@ prepare function pointers for plugloader to call
generic_process_f gpf = livido_plug_process;
vevo_property_set( filter_instance, "HOST_plugin_process_f", VEVO_ATOM_TYPE_VOIDPTR,1,&gpf );
generic_push_channel_f gpu = livido_push_channel;
vevo_property_set( filter_instance, "HOST_plugin_push_f", VEVO_ATOM_TYPE_VOIDPTR,1,&gpu );
generic_default_values_f gdv = livido_plug_retrieve_values;
vevo_property_set( filter_instance, "HOST_plugin_defaults_f", VEVO_ATOM_TYPE_VOIDPTR,1,&gdv );
generic_push_parameter_f gpp = livido_set_parameter;
vevo_property_set( filter_instance, "HOST_plugin_param_f", VEVO_ATOM_TYPE_VOIDPTR,1,&gpp );
generic_clone_parameter_f gcc = livido_clone_parameter;
vevo_property_set( filter_instance, "HOST_plugin_param_clone_f", VEVO_ATOM_TYPE_VOIDPTR,1,&gcc );
generic_reverse_clone_parameter_f grc = livido_reverse_clone_parameter;
vevo_property_set( filter_instance, "HOST_plugin_param_reverse_f", VEVO_ATOM_TYPE_VOIDPTR,1,&grc );
generic_deinit_f gin = livido_plug_deinit;
vevo_property_set( filter_instance, "HOST_plugin_deinit_f", VEVO_ATOM_TYPE_VOIDPTR,1,&gin);
return filter_instance;
}
void livido_push_channel( void *instance,const char *key, int n, VJFrame *frame ) // in_channels / out_channels
{
int error;
#ifdef STRICT_CHECKING
int num_in_channels = vevo_property_num_elements( instance, key);
if( n < 0 || n >= num_in_channels )
veejay_msg(0, "%s: Cannot push channel %d", __FUNCTION__ , n );
assert( n >= 0 && n < num_in_channels );
assert( frame != NULL );
#endif
configure_channel( instance, key, n, frame );
}
void livido_plug_process( void *instance, double time_code )
{
void *filter_templ = NULL;
int error = vevo_property_get( instance, "filter_templ",0,&filter_templ);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
livido_process_f process;
error = vevo_property_get( filter_templ, "process_func", 0, &process );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
assert( (*process) != NULL );
#endif
(*process)( instance, 0.0 );
//see if output channel needs downsampling
void *channel = NULL;
int hsampling = 0;
error = vevo_property_get( instance, "out_channels", 0, &channel );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
if( vevo_property_get( channel, "HOST_sampling",0,&hsampling ) ==
LIVIDO_NO_ERROR )
{
void *sampler = NULL;
error = vevo_property_get( channel, "HOST_sampler",0,&sampler);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
uint8_t *pd[4];
int n = 0;
int w = 0;
int h = 0;
for( n = 0; n < 4; n ++ )
vevo_property_get( channel, "pixel_data",n,&pd[n]);
vevo_property_get( channel, "width", 0, &w );
vevo_property_get( channel, "height", 0, &h );
chroma_subsample( hsampling,sampler,pd,w,h );
}
}
void livido_plug_deinit( void *instance )
{
void *filter_templ = NULL;
int error = vevo_property_get( instance, "filter_templ", 0, &filter_templ );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
livido_deinit_f deinit;
error = vevo_property_get( filter_templ, "deinit_func", 0, &deinit );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
(*deinit)( instance );
int n;
int np = vevo_property_num_elements( instance, "in_channels" );
#ifdef STRICT_CHECKING
assert( np >= 0 );
#endif
for( n = 0; n < np ; n ++ )
{
void *ic = NULL;
int hs = 0;
error = vevo_property_get( instance, "in_channels",n, &ic );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
if( vevo_property_get( ic, "HOST_sampling",0,&hs ) == LIVIDO_NO_ERROR )
{
void *sampler = NULL;
error = vevo_property_get( ic, "HOST_sampler", 0, &sampler );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
subsample_free(sampler);
}
}
void *channel = NULL;
int hsampling = 0;
error = vevo_property_get( instance, "out_channels", 0, &channel );
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
if( vevo_property_get( channel, "HOST_sampling",0,&hsampling ) ==
LIVIDO_NO_ERROR )
{
void *sampler = NULL;
error = vevo_property_get(channel, "HOST_sampler",0,&sampler );
#ifdef STRICT_CHECKING
assert( sampler != NULL );
#endif
subsample_free(sampler);
}
livido_port_recursive_free( instance );
instance = NULL;
}
//get plugin defaults
void livido_plug_retrieve_values( void *instance, void *fx_values )
{
int vj_np = vevo_property_num_elements( instance, "in_parameters" );
int i;
for( i = 0; i < vj_np; i ++ )
{
char vkey[10];
void *param = NULL;
void *param_templ = NULL;
int error = vevo_property_get( instance, "in_parameters", i, &param);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
error = vevo_property_get( param, "parent_template", 0, &param_templ );
#ifdef STRICT_CHECKING
if( error != LIVIDO_NO_ERROR )
veejay_msg(0,"%s: parent_template not found in Parameter %d/%d, error code %d", __FUNCTION__, i, vj_np,error );
assert( error == LIVIDO_NO_ERROR );
#endif
sprintf(vkey, "p%02d", i );
clone_prop_vevo( param_templ, fx_values, "default", vkey );
}
}
int livido_set_parameter_from_string( void *instance, int p, const char *str, void *fx_values )
{
void *param = NULL;
void *param_templ = NULL;
int error = vevo_property_get( instance, "in_parameters", p, &param );
if(error != VEVO_NO_ERROR )
return 0;
error = vevo_property_get( param, "parent_template",0,&param_templ);
#ifdef STRICT_CHECKING
assert( error == VEVO_NO_ERROR );
#endif
int kind = 0;
error = vevo_property_get( param_templ, "HOST_kind",0,&kind );
#ifdef STRICT_CHECKING
assert( error == VEVO_NO_ERROR );
#endif
int res = 0;
char vkey[64];
sprintf(vkey, "p%02d", p );
switch(kind)
{
case HOST_PARAM_INDEX:
res = vevo_property_from_string( fx_values,str, vkey,1, VEVO_ATOM_TYPE_INT );
break;
case HOST_PARAM_NUMBER:
res = vevo_property_from_string( fx_values,str, vkey,1, VEVO_ATOM_TYPE_DOUBLE );
break;
case HOST_PARAM_SWITCH:
res = vevo_property_from_string( fx_values,str, vkey,1, VEVO_ATOM_TYPE_BOOL );
break;
case HOST_PARAM_COORD:
res = vevo_property_from_string( fx_values ,str, vkey,2, VEVO_ATOM_TYPE_DOUBLE );
break;
case HOST_PARAM_COLOR:
res = vevo_property_from_string( fx_values,str, vkey,3, VEVO_ATOM_TYPE_DOUBLE );
break;
case HOST_PARAM_TEXT:
res = vevo_property_from_string( fx_values,str, vkey,1, VEVO_ATOM_TYPE_STRING );
break;
}
return res;
}
// set plugin defaults
void livido_reverse_clone_parameter( void *instance, int seq, void *fx_value_port )
{
int vj_np = vevo_property_num_elements( instance, "in_parameters" );
int i;
for( i = 0; i < vj_np; i ++ )
{
char vkey[10];
void *param = NULL;
int error = vevo_property_get( instance, "in_parameters", i, &param);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
sprintf(vkey, "p%02d", i );
clone_prop_vevo( fx_value_port, param,vkey, "value" );
}
}
void livido_clone_parameter( void *instance, int seq, void *fx_value_port )
{
int vj_np = vevo_property_num_elements( instance, "in_parameters" );
int i;
for( i = 0; i < vj_np; i ++ )
{
char vkey[10];
void *param = NULL;
int error = vevo_property_get( instance, "in_parameters", i, &param);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
sprintf(vkey, "p%02d", i );
clone_prop_vevo( fx_value_port, param,vkey, "value" );
}
}
void livido_set_parameter( void *instance, int seq, void *value )
{
void *param = NULL;
void *param_templ = NULL;
int error = vevo_property_get( instance, "in_parameters", seq, &param);
if( error == LIVIDO_NO_ERROR )
{
livido_set_parameter_f pctrl;
error = vevo_property_get( param, "HOST_parameter_func", 0, &pctrl );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*pctrl)( instance, value );
}
}
void* deal_with_livido( void *handle, const char *name )
{
void *port = vevo_port_new( VEVO_LIVIDO_PORT );
char *plugin_name = NULL;
int lvd = 1;
int type = VEVO_LIVIDO_PORT;
livido_setup_f livido_setup = dlsym( handle, "livido_setup" );
livido_setup_t setup[] = {
{ (void(*)()) vj_malloc },
{ (void(*)()) free },
{ (void(*)())memset },
{ (void(*)())memcpy },
{ (void(*)())vevo_port_new },
{ (void(*)())vevo_port_free },
{ (void(*)())vevo_property_set },
{ (void(*)())vevo_property_get },
{ (void(*)())vevo_property_num_elements },
{ (void(*)())vevo_property_atom_type },
{ (void(*)())vevo_property_element_size },
{ (void(*)())vevo_list_properties }
};
void *livido_plugin = livido_setup( setup, 100 );
#ifdef STRICT_CHECKING
assert( livido_plugin != NULL );
#endif
if(!livido_plugin)
{
vevo_port_free( port );
return NULL;
}
vevo_property_set( port, "instance", LIVIDO_ATOM_TYPE_PORTPTR, 1,&livido_plugin );
vevo_property_set( port, "handle", LIVIDO_ATOM_TYPE_VOIDPTR,1,&handle );
void *filter_templ = NULL;
int error = vevo_property_get( livido_plugin, "filters",0,&filter_templ);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
int n_params = livido_scan_parameters( filter_templ, port );
//@ p%02d is a key with a portptr value. it contains min,max,defaults for each plugin setup()
int is_mix = 0;
int n_inputs = livido_property_num_elements( filter_templ, "in_channel_templates" );
//@ Now, prefix the name with LVD
plugin_name = get_str_vevo( filter_templ, "name" );
#ifdef STRICT_CHECKING
assert( plugin_name != NULL );
#endif
char *clone_name = (char*) malloc( strlen(plugin_name) + 4);
sprintf(clone_name, "LVD%s", plugin_name );
vevo_property_set( port, "num_params", VEVO_ATOM_TYPE_INT, 1, &n_params );
vevo_property_set( port, "name", VEVO_ATOM_TYPE_STRING,1, &clone_name );
vevo_property_set( port, "num_inputs", VEVO_ATOM_TYPE_INT,1, &n_inputs);
vevo_property_set( port, "info", LIVIDO_ATOM_TYPE_PORTPTR,1,&filter_templ );
vevo_property_set( port, "HOST_plugin_type", VEVO_ATOM_TYPE_INT,1,&livido_signature_);
free(clone_name);
free(plugin_name);
return port;
}
void livido_set_pref_palette( int pref_palette )
{
#ifdef STRICT_CHECKING
assert( pref_palette == PIX_FMT_YUV420P || pref_palette == PIX_FMT_YUV422P ||
pref_palette == PIX_FMT_YUV444P);
#endif
pref_palette_ffmpeg_ = pref_palette;
pref_palette_ = select_livido_palette( pref_palette );
}
void livido_exit( void )
{
}

View File

@@ -0,0 +1,38 @@
#ifndef LIVIDO_LOADER_H
#define LIVIDO_LOADER_H
void *deal_with_livido(void *handle, const char *name);
void *livido_plug_init( void *plugin, int w, int h );
void livido_plug_deinit( void *plugin );
void livido_plug_free( void *plugin );
void livido_plug_process( void *plugin, double timecode );
//@ set preferred palette
void livido_set_pref_palette( int pref_palette );
int livido_plug_inplace( void *instance );
void livido_push_channel( void *instance,const char *key, int n, VJFrame *frame );
#define livido_push_input_channel(instance,n,frame) livido_push_channel( instance, "in_channels", n , frame )
#define livido_push_output_channel(instance,n,frame) livido_push_channel( instance, "out_channels",n, frame )
//@ get default values
void livido_plug_retrieve_values( void *instance, void *fx_values );
//@ takes another port and clones into value
void livido_clone_parameter( void *instance, int seq, void *fx_value_port );
void livido_reverse_clone_parameter( void *instance, int seq, void *fx_value_port );
void livido_set_parameter( void *instance, int seq, void *value );
void livido_set_parameters_scaled( void *plugin, int *args );
void livido_exit( void );
#endif

View File

@@ -0,0 +1,720 @@
/*
* Copyright (C) 2002-2006 Niels Elburg <nelburg@looze.net>
*
* This program is free software you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
/** \defgroup VeVoPlugin Plugin Loader
*
* The Plugin Loader can handle:
* -# Livido plugins
* -# Frei0r plugins
* -# FreeFrame plugins
*/
#include <config.h>
#include <string.h>
#include <dirent.h>
#include <fcntl.h>
#include <dlfcn.h>
#include <libhash/hash.h>
#include <libvjmsg/vj-common.h>
#include <libvjmem/vjmem.h>
#include <veejay/portdef.h>
#include <libvevo/libvevo.h>
#include <libplugger/defs.h>
#include <libplugger/specs/livido.h>
#include <libyuv/yuvconv.h>
#include <ffmpeg/avcodec.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
#include <libplugger/plugload.h>
#include <libplugger/freeframe-loader.h>
#include <libplugger/frei0r-loader.h>
#include <libplugger/livido-loader.h>
#include <ffmpeg/avcodec.h>
#include <ffmpeg/avutil.h>
static vevo_port_t **index_map_ = NULL;
static vevo_port_t *illegal_plugins_ =NULL;
static int index_ = 0;
static void *buffer_ = NULL;
static void *buffer2_ = NULL;
static void *buffer_b_ = NULL;
static int base_width_ =0;
static int base_height_ =0;
static int n_ff_ = 0;
static int n_fr_ = 0;
static int n_lvd_ = 0;
static int base_fmt_ = -1;
/*
* port of plugins by name
*
* by name: get a value of a parameter, set a value of a parameter
*
* get parameter description
* get plugin name etc
*
* this will make libvje obsolete
* this will make the fx chain structure in libsample obsolete
* this will change vj performer
* this will change vj event
*
*
* merge vevo-sample to sampleadm and merge with libstream
* before continuing.
*
*/
static int select_f( const struct dirent *d )
{
return ( strstr( d->d_name, ".so" ) != NULL );
}
int plug_set_param_from_str( void *plugin , int p, const char *str, void *values )
{
int type = 0;
#ifdef STRICT_CHECKING
assert( plugin != NULL );
#endif
return livido_set_parameter_from_string( plugin, p, str, values );
}
static void *instantiate_plugin( void *plugin, int w , int h )
{
int type = 0;
#ifdef STRICT_CHECKING
assert( plugin != NULL );
#endif
int error = vevo_property_get( plugin, "HOST_plugin_type", 0, &type);
#ifdef STRICT_CHECKING
assert( error == VEVO_NO_ERROR );
#endif
/*
if( type == VEVO_FF_PORT )
{
return freeframe_plug_init( plugin,w,h );
}
else if( type == VEVO_FR_PORT )
{
return frei0r_plug_init( plugin,w,h);
}
*/
if ( type == VEVO_PLUG_LIVIDO )
return livido_plug_init(plugin,w,h);
#ifdef STRICT_CHECKING
assert( type == VEVO_PLUG_LIVIDO );
#endif
return NULL;
}//@ warning: if init fails, plugin data should be freed (failed plugin)
static void deinstantiate_plugin( void *instance )
{
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_deinit_f gin;
int error = vevo_property_get( instance, "HOST_plugin_deinit_f", 0, &gin );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*gin)( instance );
}
static void add_to_plugin_list( const char *path )
{
if(!path)
return;
int i;
char fullname[PATH_MAX+1];
struct dirent **files = NULL;
struct stat sbuf;
int res = 0;
memset( &sbuf,0 ,sizeof(struct stat));
res = stat( path, &sbuf );
if( res != 0 )
{
veejay_msg(VEEJAY_MSG_ERROR, "File or directory '%s' does not exist (skip)", path);
return;
}
if( S_ISREG( sbuf.st_mode ) )
{
vevo_property_set( illegal_plugins_, path, LIVIDO_ATOM_TYPE_STRING, 0, NULL );
return;
}
if( !S_ISDIR( sbuf.st_mode ) )
{
veejay_msg(VEEJAY_MSG_ERROR, "Not a directory : '%s'", path );
return;
}
int n_files = scandir( path, &files, select_f, alphasort );
if( n_files <= 0 )
return;
for( i = 0 ; i < n_files; i ++ )
{
char *name = files[i]->d_name;
if( vevo_property_get( illegal_plugins_, name, 0 , NULL ) == 0 )
{
veejay_msg(VEEJAY_MSG_ERROR, "'%s' marked as bad", name);
continue;
}
bzero(fullname , PATH_MAX+1);
sprintf(fullname, "%s/%s", path,name );
void *handle = dlopen(fullname, RTLD_NOW );
if(!handle)
{
veejay_msg(0,"\tPlugin '%s' error '%s'", fullname,
dlerror() );
continue;
}
veejay_msg(0, "\tOpened plugin '%s' in '%s'", name,path );
if(dlsym( handle, "plugMain" ))
{
void *plugin = deal_with_ff( handle, name );
if( plugin )
{
index_map_[ index_ ] = plugin;
index_ ++;
n_ff_ ++;
}
else
dlclose( handle );
}
if(dlsym( handle, "f0r_construct" ))
{
void *plugin = deal_with_fr( handle, name );
if( plugin )
{
index_map_[ index_ ] = plugin;
index_ ++;
n_fr_ ++;
}
else
dlclose( handle );
}
if(dlsym( handle, "livido_setup" ))
{
void *plugin = deal_with_livido( handle , name );
if( plugin )
{
veejay_msg(VEEJAY_MSG_INFO, "Load livido plugin '%s' to slot %d",name, index_);
index_map_[index_] = plugin;
index_ ++;
n_lvd_ ++;
}
else
{
veejay_msg(VEEJAY_MSG_ERROR, "Failed to load '%s'",name );
dlclose(handle);
}
}
}
for( i = 0; i < n_files; i ++ )
free( files[i] );
free(files);
}
static void free_plugin(void *plugin)
{
#ifdef STRICT_CHECKING
assert( plugin != NULL );
#endif
int type = 0;
int error = vevo_property_get( plugin, "HOST_plugin_type", 0, &type);
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
char *name = get_str_vevo( plugin, "name" );
veejay_msg(0, "%s: Free plugin '%s' %p, Type %x",
__FUNCTION__,name,plugin,type );
free(name);
int n = 0;
// freeframe_plug_free( plugin );
// frei0r_plug_free( plugin );
// livido_plug_free( plugin );
// free_parameters(plugin,n);
void *handle = NULL;
error = vevo_property_get( plugin, "handle", 0 , &handle );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
if( handle ) dlclose( handle );
// vevo_port_free( plugin );
/*
// livido_port_rrfree( plugin );
switch(type)
{
case VEVO_PLUG_LIVIDO: livido_plug_free( plugin ); break;
case VEVO_PLUG_FR:break;
case VEVO_PLUG_FF:break;
}
*/
// livido_port_rrfree( plugin );
if( type == VEVO_PLUG_LIVIDO )
{
//@FIXME
// livido_port_free( plugin );
vevo_port_recursive_free( plugin );
}
}
static void free_plugins()
{
int i;
vevo_port_recursive_free( illegal_plugins_ );
for( i = 0; i < index_ ; i ++ )
free_plugin( index_map_[i]);
free( index_map_ );
index_ = 0;
}
#define CONFIG_FILE_LEN 65535
static int scan_plugins()
{
char *home = getenv( "HOME" );
char path[PATH_MAX];
char data[CONFIG_FILE_LEN];
if(!home) return 0;
sprintf( path , "%s/.veejay/plugins" , home );
int fd = open( path, O_RDONLY );
if( fd < 0 )
return 0;
bzero( data, CONFIG_FILE_LEN );
if( read( fd, data, CONFIG_FILE_LEN ) > 0 )
{
int len = strlen(data);
int j;
int k = 0;
char value[PATH_MAX];
bzero( value, PATH_MAX );
char *pch = strtok( data, "\n" );
while( pch != NULL )
{
veejay_msg(0, "Add '%s'",pch );
add_to_plugin_list( pch );
pch = strtok( NULL, "\n");
}
/*
for( j=0; j < len; j ++ )
{
if(data[j] == '\0' )
break;
if( data[j] == '\n' )
{ add_to_plugin_list( value ); bzero(value,PATH_MAX); k =0;}
if( isascii( data[j] ) && data[j] != '\n')
{ value[k] = data[j]; if( k < PATH_MAX) k ++; }
}*/
}
return 1;
}
void plug_sys_free(void)
{
free_plugins();
if( buffer_ )
free( buffer_ );
if( buffer2_ )
free( buffer2_ );
if( buffer_b_)
free( buffer_b_ );
}
void plug_sys_init( int fmt, int w, int h )
{
buffer_ = (void*) malloc( w * h * 4);
memset( buffer_, 0, w * h * 4);
buffer2_ = (void*) malloc( w * h * 4);
memset( buffer2_, 0, w * h * 4);
buffer_b_ = (void*) malloc( w * h * 4);
memset( buffer_b_, 0, w * h * 4);
base_width_ = w;
base_height_ = h;
switch(fmt)
{
case FMT_420:
base_fmt_ = PIX_FMT_YUV420P;
break;
case FMT_422:
base_fmt_ = PIX_FMT_YUV422P;
break;
case FMT_444:
base_fmt_ = PIX_FMT_YUV444P;
break;
default:
veejay_msg(0, "%s: Unknown pixel format",__FUNCTION__);
#ifdef STRICT_CHECKING
assert(0);
#endif
break;
}
plug_sys_set_palette( base_fmt_ );
}
int plug_sys_detect_plugins(void)
{
index_map_ = (vevo_port_t**) malloc(sizeof(vevo_port_t*) * 256 );
illegal_plugins_ = vevo_port_new( VEVO_ILLEGAL );
#ifdef STRICT_CHECKING
assert( illegal_plugins_ != NULL );
#endif
if(!scan_plugins())
{
veejay_msg(VEEJAY_MSG_ERROR,
"Cannot locate plugins in $HOME/.veejay/plugins" );
return 0;
}
veejay_msg(VEEJAY_MSG_INFO, "Veejay plugin system initialized");
veejay_msg(VEEJAY_MSG_INFO, "-------------------------------------------------------------------------------------------");
//@ display copyright notice in binary form
veejay_msg(VEEJAY_MSG_INFO, "\tFreeFrame - cross-platform real-time video effects");
veejay_msg(VEEJAY_MSG_INFO, "\t(C) Copyright 2002 Marcus Clements www.freeframe.org. All Rights reserved.");
veejay_msg(VEEJAY_MSG_INFO, "\thttp://freeframe.sourceforge.net");
veejay_msg(VEEJAY_MSG_INFO, "\tFound %d FreeFrame %s",
n_ff_ , n_ff_ == 1 ? "plugin" : "plugins" );
veejay_msg(VEEJAY_MSG_INFO, "\tfrei0r - a minimalistic plugin API for video effects");
veejay_msg(VEEJAY_MSG_INFO, "\t(C) Copyright 2004 Georg Seidel, Phillip Promesberger and Martin Bayer.");
veejay_msg(VEEJAY_MSG_INFO, "\t Licensed as GPL");
veejay_msg(VEEJAY_MSG_INFO, "\thttp://www.piksel.org/frei0r");
veejay_msg(VEEJAY_MSG_INFO, "\tFound %d frei0r %s",
n_fr_ , n_fr_ == 1 ? "plugin" : "plugins" );
veejay_msg(VEEJAY_MSG_INFO, "\tLivido - (Linux) Video Dynamic Objects" );
veejay_msg(VEEJAY_MSG_INFO, "\t(C) Copyright 2005 Gabriel 'Salsaman' Finch, Niels Elburg, Dennis 'Jaromil' Rojo");
veejay_msg(VEEJAY_MSG_INFO, "\t Daniel Fischer, Martin Bayer, Kentaro Fukuchi and Andraz Tori");
veejay_msg(VEEJAY_MSG_INFO, "\t Licensed as LGPL");
veejay_msg(VEEJAY_MSG_INFO, "\tFound %d Livido %s",
n_lvd_, n_lvd_ == 1 ? "plugin" :"plugins" );
veejay_msg(VEEJAY_MSG_INFO, "-------------------------------------------------------------------------------------------");
return index_;
}
void plug_clone_from_parameters(void *instance, void *fx_values)
{
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_reverse_clone_parameter_f grc;
int error = vevo_property_get( instance, "HOST_plugin_param_reverse_f", 0, &grc );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*grc)( instance ,0, fx_values );
}
void plug_clone_parameters( void *instance, void *fx_values )
{
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_clone_parameter_f gcc;
int error = vevo_property_get( instance, "HOST_plugin_param_clone_f", 0, &gcc );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*gcc)( instance, 0, fx_values );
}
void plug_set_parameter( void *instance, int seq_num,int n_elements,void *value )
{
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_push_parameter_f gpp;
int error = vevo_property_get( instance, "HOST_plugin_param_f", 0, &gpp );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*gpp)( instance, seq_num, value );
}
void plug_get_defaults( void *instance, void *fx_values )
{
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_default_values_f gdv;
int error = vevo_property_get( instance, "HOST_plugin_defaults_f", 0, &gdv );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*gdv)( instance, fx_values );
}
void plug_set_defaults( void *instance, void *fx_values )
{
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_clone_parameter_f gcp;
int error = vevo_property_get( instance, "HOST_plugin_param_clone_f", 0, &gcp );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*gcp)( instance, 0,fx_values );
}
void plug_deactivate( void *instance )
{
deinstantiate_plugin( instance );
}
void *plug_activate( int fx_id )
{
if(!index_map_[fx_id] )
{
veejay_msg(0,"Plugin %d is not loaded",fx_id);
return NULL;
}
return instantiate_plugin( index_map_[fx_id], base_width_,base_height_);
}
char *plug_get_name( int fx_id )
{
if(!index_map_[fx_id] )
return NULL;
char *name = get_str_vevo( index_map_[fx_id], "name" );
return name;
}
int plug_get_fx_id_by_name( const char *name )
{
int n = 0;
for(n = 0; n < index_; n ++ )
{
char *plugname = plug_get_name( n );
if(plugname)
{
if( strncasecmp(name,plugname,strlen(plugname)) == 0 )
{
free(plugname);
return n;
}
free(plugname);
}
}
return -1;
}
int plug_get_num_input_channels( int fx_id )
{
if(!index_map_[fx_id] )
return NULL;
int res = 0;
int error = vevo_property_get( index_map_[fx_id], "num_inputs",0,&res);
#ifdef STRICT_CHECKING
assert( error == VEVO_NO_ERROR );
#endif
return res;
}
int plug_get_num_parameters( int fx_id )
{
if(!index_map_[fx_id] )
return NULL;
int res = 0;
int error = vevo_property_get( index_map_[fx_id], "num_params",0,&res);
#ifdef STRICT_CHECKING
assert( error == VEVO_NO_ERROR );
#endif
return res;
}
/*
void plug_control( int fx_id, void *instance, int *args )
{
vevo_port_t *port = index_map_[ fx_id ];
#ifdef STRICT_CHECKING
assert ( port != NULL );
#endif
int type = 0;
int error= 0;
error = vevo_property_get( port, "type", 0, &type);
#ifdef STRICT_CHECKING
assert( error == LIVIDO_NO_ERROR );
#endif
if( type == VEVO_FF_PORT )
{
freeframe_plug_control( port, args );
}
else if ( type == VEVO_FR_PORT )
{
frei0r_plug_control( port, args );
}
else if ( type == VEVO_LIVIDO_PORT )
{
// livido_plug_control( port, args );
livido_set_parameters_scaled( port, args );
}
}*/
void plug_sys_set_palette( int pref_palette )
{
base_fmt_ = pref_palette;
livido_set_pref_palette( base_fmt_ );
}
/*
static void plug_process_mix( VJFrame *frame, VJFrame *frame_b,int fx_id )
{
void *plugin = index_map_[fx_id];
#ifdef STRICT_CHECKING
assert( plugin != NULL );
assert( frame != NULL );
assert( frame_b != NULL );
#endif
util_convertrgba32( frame->data, base_width_, base_height_, base_format_, frame->shift_v, buffer_ );
util_convertrgba32( frame_b->data,base_width_,base_height_, base_format_, frame_b->shift_v, buffer_b_ );
process_mix_plugin( plugin, buffer_, buffer_b_, buffer2_ );
#ifdef STRICT_CHECKING
assert( buffer2_ != NULL);
#endif
#ifdef STRICT_CHECKING
if( base_fmt_ == 0 )
{
assert( (frame->width * frame->height) == frame->len );
assert( (frame->uv_width * frame->uv_height) == frame->uv_len );
assert( (frame->width / 2 ) == frame->uv_width );
assert( (frame->height /2 ) == frame->uv_height );
assert( frame->shift_v == 1 );
assert( frame->shift_h == 1 );
}
if( base_fmt_ == 1 )
{
assert( (frame->width * frame->height) == frame->len );
assert( (frame->uv_width * frame->uv_height) == frame->uv_len );
assert( frame->width /2 == frame->uv_width );
assert( (frame->height ) == frame->uv_height );
assert( frame->shift_v == 0 );
assert( frame->shift_h == 1 );
}
assert( base_fmt_ == 0 || base_fmt_ == 1 );
#endif
util_convertsrc( buffer2_, base_width_, base_height_, base_format_, frame->data );
}*/
void plug_push_frame( void *instance, int out, int seq_num, void *frame_info )
{
VJFrame *frame = (VJFrame*) frame_info;
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_push_channel_f gpu;
int error = vevo_property_get( instance, "HOST_plugin_push_f", 0, &gpu );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*gpu)( instance, (out ? "out_channels" : "in_channels" ), seq_num, frame );
}
void plug_process( void *instance )
{
#ifdef STRICT_CHECKING
assert( instance != NULL );
#endif
generic_process_f gpf;
int error = vevo_property_get( instance, "HOST_plugin_process_f", 0, &gpf );
#ifdef STRICT_CHECKING
assert( error == 0 );
#endif
(*gpf)( instance,0.0 );
/*
// it is frei0r or freeframe mixing plugin
int is_mix = 0;
error = vevo_property_get( plugin, "mixer", 0, &is_mix );
#ifdef HAVE_STRICT_
assert( error == LIVIDO_NO_ERROR );
#endif
if( is_mix )
{
plug_process_mix( frame, b, fx_id );
return;
}
util_convertrgba32( frame->data, base_width_, base_height_, base_format_, frame->shift_v, buffer_ );
void *res_frame = process_plug_plugin( plugin, buffer_, buffer2_ );
#ifdef STRICT_CHECKING
assert( res_frame != NULL );
#endif
util_convertsrc( res_frame, base_width_, base_height_, base_format_, frame->data );
*/
}

View File

@@ -0,0 +1,43 @@
#ifndef PLUGINLOADER_
#define PLUGINLOADER_
/*
* Copyright (C) 2002-2006 Niels Elburg <nelburg@looze.net>
*
* This program is free software you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
/*
video plugin loader library to wrap up all kinds of standards
*/
void plug_sys_free(void);
void plug_sys_init( int fmt, int w, int h );
void plug_sys_set_palette( int palette );
int plug_sys_detect_plugins(void);
char *plug_get_name( int fx_id );
int plug_get_fx_id_by_name( const char *name );
int plug_get_num_input_channels( int fx_id );
int plug_set_param_from_str( void *plugin , int p, const char *str, void *fx_values );
//@ initialize plugin
void *plug_activate( int fx_id );
void plug_deactivate( void *instance );
void plug_push_frame( void *instance, int out, int seq_num, void *frame );
void plug_process( void *instance );
void plug_get_defaults( void *instance, void *fx_values );
void plug_set_parameter( void *instance, int seq_num, int n_elements,void *value );
int plug_inplace( void *instance );
#endif

View File

@@ -0,0 +1,207 @@
#ifndef __FREEFRAME_H__
#define __FREEFRAME_H__
#ifdef __cplusplus
extern "C" {
#endif
///////////////////////////////////////////////////////////////////////////////////
// FreeFrame.h
//
// FreeFrame Open Video Plugin Prototype
// C Version
// www.freeframe.org
// marcus@freeframe.org
/*
Copyright (c) 2002, Marcus Clements www.freeframe.org
All rights reserved.
FreeFrame 1.0 upgrade by Pete Warden
www.petewarden.com
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
* Neither the name of FreeFrame nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef LINUX
typedef unsigned int DWORD;
typedef void * LPVOID;
typedef unsigned char BYTE;
#elif MACOS
typedef unsigned int DWORD;
typedef unsigned char BYTE;
#endif
/////////////////////////////////////////////////////////////////////////////////////////
// #defines
#define FF_EFFECT 0
#define FF_FAIL 0xFFFFFFFF
#define FF_SUCCESS 0
#define FF_TRUE 1
#define FF_FALSE 0
#define FF_GETINFO 0
#define FF_INITIALISE 1
#define FF_DEINITIALISE 2
#define FF_PROCESSFRAME 3
#define FF_GETNUMPARAMETERS 4
#define FF_GETPARAMETERNAME 5
#define FF_GETPARAMETERDEFAULT 6
#define FF_GETPARAMETERDISPLAY 7
#define FF_SETPARAMETER 8
#define FF_GETPARAMETER 9
#define FF_GETPLUGINCAPS 10
#define FF_INSTANTIATE 11
#define FF_DEINSTANTIATE 12
#define FF_GETEXTENDEDINFO 13
#define FF_PROCESSFRAMECOPY 14
#define FF_GETPARAMETERTYPE 15
#define FF_CAP_16BITVIDEO 0
#define FF_CAP_24BITVIDEO 1
#define FF_CAP_32BITVIDEO 2
#define FF_CAP_PROCESSFRAMECOPY 3
#define FF_CAP_MINIMUMINPUTFRAMES 10
#define FF_CAP_MAXIMUMINPUTFRAMES 11
#define FF_CAP_COPYORINPLACE 15
#define FF_CAP_PREFER_NONE 0
#define FF_CAP_PREFER_INPLACE 1
#define FF_CAP_PREFER_COPY 2
#define FF_CAP_PREFER_BOTH 3
#define FF_TYPE_BOOLEAN 0
#define FF_TYPE_EVENT 1
#define FF_TYPE_RED 2
#define FF_TYPE_GREEN 3
#define FF_TYPE_BLUE 4
#define FF_TYPE_XPOS 5
#define FF_TYPE_YPOS 6
#define FF_TYPE_STANDARD 10
#define FF_TYPE_TEXT 100
/////////////////////////////////////////////////////////////////////////////////////////
//
// FreeFrame types
typedef struct PlugInfoStructTag {
DWORD APIMajorVersion;
DWORD APIMinorVersion;
BYTE uniqueID[4]; // 4 chars uniqueID - not null terminated
BYTE pluginName[16]; // 16 chars plugin friendly name - not null terminated
DWORD pluginType; // Effect or source
} PlugInfoStruct;
typedef struct PlugExtendedInfoStructTag {
DWORD PluginMajorVersion;
DWORD PluginMinorVersion;
char* Description;
char* About;
DWORD FreeFrameExtendedDataSize;
void* FreeFrameExtendedDataBlock;
} PlugExtendedInfoStruct;
typedef struct VideoInfoStructTag {
DWORD frameWidth; // width of frame in pixels
DWORD frameHeight; // height of frame in pixels
DWORD bitDepth; // enumerated indicator of bit depth of video
// 0 = 16 bit 5-6-5 1 = 24bit packed 2 = 32bit
DWORD orientation; // video frame orientation meaningful values:
// 1 = origin at top left 2 = origin at bottom left
} VideoInfoStruct;
typedef struct ProcessFrameCopyStructTag {
DWORD numInputFrames;
void** InputFrames;
void* OutputFrame;
} ProcessFrameCopyStruct;
typedef struct SetParameterStructTag {
DWORD index;
float value;
} SetParameterStruct;
typedef union plugMainUnionTag {
DWORD ivalue;
float fvalue;
VideoInfoStruct *VISvalue;
PlugInfoStruct *PISvalue;
char *svalue;
} plugMainUnion;
typedef plugMainUnion plugMainType(DWORD, LPVOID, DWORD);
///////////////////////////////////////////////////////////////////////////////////////
// Function prototypes
//
///////////////////////////////////////////////////////////////////////////////////////
// plugMain - The one and only exposed function
// parameters:
// functionCode - tells the plugin which function is being called
// pParam - 32-bit parameter or 32-bit pointer to parameter structure
// instanceID - 32-bit instance identifier. Only used for instance specific functions
//
// PLUGIN DEVELOPERS: you shouldn't need to change this function
//
// All parameters are cast as 32-bit untyped pointers and cast to appropriate
// types here
//
// All return values are cast to 32-bit untyped pointers here before return to
// the host
//
#ifdef WIN32
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, DWORD instanceID);
__declspec(dllexport) void* __stdcall plugMain(DWORD functionCode, LPVOID pParam, DWORD instanceID);
typedef __declspec(dllimport) void* (__stdcall *FF_Main_FuncPtr)(DWORD, LPVOID, DWORD);
#elif LINUX
plugMainUnion plugMain(DWORD functionCode, LPVOID pParam, DWORD instanceID);
#elif MACOS
typedef void* (*FF_Main_FuncPtr)(DWORD ,void *, DWORD);
#endif
#ifdef __cplusplus
};
#endif
#endif

View File

@@ -0,0 +1,567 @@
/** @mainpage frei0r - a minimalistic plugin API for video effects
*
* @section sec_intro Introduction
*
* This is frei0r - a minimalistic plugin API for video effects.
*
* The main emphasis is on simplicity - there are many different applications
* that use video effects, and they all have different requirements regarding
* their internal plugin API. And that's why frei0r does not try to be a
* one-in-all general video plugin API, but instead an API for the most
* common video effects: simple filters, sources and mixers that can be
* controlled by parameters.
*
* It's our hope that this way these simple effects can be shared between
* many applications, avoiding their reimplementation by different
* projects.
*
* On the other hand, this is not meant as a competing standard to
* more ambitious efforts that try to satisfy the needs of many different
* applications and more complex effects.
*
*
* @section sec_overview Overview
*
* If you are new to frei0r, the best thing is probably to have
* a look at the <a href="frei0r_8h-source.html">frei0r header</a>,
* which is quite simple.
*
* After that, you might want to look at the
* <a href="frei0r_8h.html">frei0r functions</a> in more detail.
*
* When developing a new frei0r effect, you have to choose
* - which effect type to use (\ref PLUGIN_TYPE),
* - which color model to use (\ref COLOR_MODEL), and
* - which parameter types (\ref PARAM_TYPE) your effect will support.
*
* To round things up, you should decide whether your effect should have
* an associated icon (\ref icons), and where it will be installed
* (\ref pluglocations).
*
* @section sec_changes Changes
*
* @subsection sec_changes_1_0_1_1 From frei0r 1.0 to frei0r 1.1
*
* - added specifications for plugin locations
* - added specifications for frei0r icons
* - added RGBA8888 color model
* - added packed32 color model
* - added better specification of color models
* - added string type
* - added bounds to resolution (8 <= width, height <= 2048)
* - width and height must be an integer multiple of 8
* - frame data must be 16 byte aligned
* - improved update specification (must not change parameters,
* must restore fpu state)
* - added note for applications to ignore effects with unknown fields
* - added new plugin types mixer2 and mixer3
* - added section about \ref concurrency
*/
/**
* \addtogroup pluglocations Plugin Locations
* @section sec_pluglocations Plugin Locations
*
* For Unix platforms there are rules for the location of frei0r plugins.
*
* frei0r 1.x plugin files should be located in
*
* - (1) /usr/lib/frei0r-1/\<vendor\>
* - (2) /usr/local/lib/frei0r-1/\<vendor\>
* - (3) $HOME/.frei0r-1/lib/\<vendor\>
*
* Examples:
*
* - /usr/lib/frei0r-1/mob/flippo.so
* - /usr/lib/frei0r-1/drone/flippo.so
* - /usr/local/lib/frei0r-1/gephex/coma/invert0r.so
* - /home/martin/.frei0r-1/lib/martin/test.so
*
* Like in these examples plugins should be placed in "vendor" subdirs
* to reduce name clashes.
*
* @subsection sec_order Plugin Loading Order
*
* The application shall load plugins in the following order: 3, 2, 1.
* If a name clash occurs (two or more frei0r plugins with identical
* effect name), the plugins in directory 3 have precedence over plugins
* in directory 2, and those in directory 2 have precedence over plugins
* in directory 1.
*
* This makes it possible for users to "override" effects that are
* installed in system wide directories by placing plugins in their
* home directory.
*
* The order of loading plugins inside each of the directories
* 1, 2, and 3 is not defined.
*/
/**
*\addtogroup icons Icons for frei0r effects
* @section sec_icons Icons for frei0r effects
*
* Each frei0r effect can have an associated icon.
*
* @subsection sec_icon_format Icon Format
*
* The format of frei0r icons must be png.
* Recommended resolution is 64x64.
* The icon filename of an effect with effect name "frei0r"
* must be "frei0r.png".
*
* @subsection sec_icon_location Icon location
*
* The exact location where the application should look for the
* plugin is platform dependant.
*
* For Windows platforms, the icon should be at the same place as
* the plugin containing the effect.
*
* For Unix platforms, the following mapping from plugin location
* to icon location must be used:
*
* Let \<plugin_path\>/\<plugin\> be a frei0r plugin with name \<effect_name\>.
* Then the corresponding icon (if any) shall be located in
* \<icon_path\>/\<effect_name\>.png.
* \<icon_path\> can be obtained in the following way:
*
* @verbatim
<plugin_path> | <icon_path>
----------------------------------------------------------------------------
$HOME/.frei0r-1/lib/<vendor> | $HOME/.frei0r-1/icons/<vendor>
/usr/local/lib/frei0r-1/<vendor> | /usr/local/share/frei0r-1/icons/<vendor>
/usr/lib/frei0r-1/<vendor> | /usr/share/frei0r-1/icons/<vendor>
* | <plugin_path>
@endverbatim
*
* (The wildcard '*' stands for any other plugin_path)
*
* For other platforms, no location is defined. We recommend to use the
* plugin path where possible.
*/
/**
* \addtogroup concurrency Concurrency
* @section sec_concurrency Concurrency
*
* - \ref f0r_init
* - \ref f0r_deinit
*
* These methods must not be called more than once. It is obvious that no
* concurrent calls are allowed.
*
*
* - \ref f0r_get_plugin_info
* - \ref f0r_get_param_info
* - \ref f0r_construct
* - \ref f0r_destruct
*
* Concurrent calls of these functions are allowed.
*
*
* - \ref f0r_set_param_value
* - \ref f0r_get_param_value
* - \ref f0r_update
* - \ref f0r_update2
*
* If a thread is in one of these methods its allowed for another thread to
* enter one of theses methods for a different effect instance. But for one
* effect instance only one thread is allowed to execute any of these methods.
*/
/** \file
* \brief This file defines the frei0r api, version 1.1.
*
* A conforming plugin must implement and export all functions declared in
* this header.
*
* A conforming application must accept only those plugins which use
* allowed values for the described fields.
*/
#ifndef INCLUDED_FREI0R_H
#define INCLUDED_FREI0R_H
#include <inttypes.h>
/**
* The frei0r API major version
*/
#define FREI0R_MAJOR_VERSION 1
/**
* The frei0r API minor version
*/
#define FREI0R_MINOR_VERSION 1
//---------------------------------------------------------------------------
/**
* f0r_init() is called once when the plugin is loaded by the application.
* \see f0r_deinit
*/
int f0r_init();
/**
* f0r_deinit is called once when the plugin is unloaded by the application.
* \see f0r_init
*/
void f0r_deinit();
//---------------------------------------------------------------------------
/** \addtogroup PLUGIN_TYPE Type of the Plugin
* These defines determine whether the plugin is a
* source, a filter or one of the two mixer types
* @{
*/
/** one input and one output */
#define F0R_PLUGIN_TYPE_FILTER 0
/** just one output */
#define F0R_PLUGIN_TYPE_SOURCE 1
/** two inputs and one output */
#define F0R_PLUGIN_TYPE_MIXER2 2
/** three inputs and one output */
#define F0R_PLUGIN_TYPE_MIXER3 3
/** @} */
//---------------------------------------------------------------------------
/** \addtogroup COLOR_MODEL Color Models
* List of supported color models.
*
* Note: the color models are endian independent, because the
* color components are defined by their positon in memory, not
* by their significance in an uint32_t value.
*
* For effects that work on the color components,
* RGBA8888 is the recommended color model for frei0r-1.1 effects.
* For effects that only work on pixels, PACKED32 is the recommended
* color model since it helps the application to avoid unnecessary
* color conversions.
*
* Effects can choose an appropriate color model, applications must support
* all color models and do conversions if necessary. Source effects
* must not use the PACKED32 color model because the application must know
* in which color model the created framebuffers are represented.
*
* For each color model, a frame consists of width*height pixels which
* are stored row-wise and consecutively in memory. The size of a pixel is
* 4 bytes. There is no extra pitch parameter
* (i.e. the pitch is simply width*4).
*
* The following additional constraints must be honored:
* - The top-most line of a frame is stored first in memory.
* - A frame must be aligned to a 16 byte border in memory.
* - The width and height of a frame must be positive
* - The width and height of a frame must be integer multiples of 8
*
* These constraints make sure that each line is stored at an address aligned
* to 16 byte.
*/
/*@{*/
/**
* In BGRA8888, each pixel is represented by 4 consecutive
* unsigned bytes, where the first byte value represents
* the blue, the second the green, and the third the red color
* component of the pixel. The last value represents the
* alpha value.
*/
#define F0R_COLOR_MODEL_BGRA8888 0
/**
* In RGBA8888, each pixel is represented by 4 consecutive
* unsigned bytes, where the first byte value represents
* the red, the second the green, and the third the blue color
* component of the pixel. The last value represents the
* alpha value.
*/
#define F0R_COLOR_MODEL_RGBA8888 1
/**
* In PACKED32, each pixel is represented by 4 consecutive
* bytes, but it is not defined how the color componets are
* stored. The true color format could be RGBA8888,
* BGRA8888, a packed 32 bit YUV format, or any other
* color format that stores pixels in 32 bit.
*
* This is useful for effects that don't work on color but
* only on pixels (for example a mirror effect).
*
* Note that source effects must not use this color model.
*/
#define F0R_COLOR_MODEL_PACKED32 2
/*@}*/
/**
* The f0r_plugin_info_t structure is filled in by the plugin
* to tell the application about its name, type, number of parameters,
* and version.
*
* An application should ignore (i.e. not use) frei0r effects that
* have unknown values in the plugin_type or color_model field.
* It should also ignore effects with a too high frei0r_version.
*
* This is necessary to be able to extend the frei0r spec (e.g.
* by adding new color models or plugin types) in a way that does not
* result in crashes when loading effects that make use of these
* extensions into an older application.
*
* All strings are unicode, 0-terminated, and the encoding is utf-8.
*/
typedef struct f0r_plugin_info
{
const char* name; /**< The (short) name of the plugin */
const char* author; /**< The plugin author */
/** The plugin type
* \see PLUGIN_TYPE
*/
int plugin_type;
int color_model; /**< The color model used */
int frei0r_version; /**< The frei0r major version this plugin is built for*/
int major_version; /**< The major version of the plugin */
int minor_version; /**< The minor version of the plugin */
int num_params; /**< The number of parameters of the plugin */
const char* explanation; /**< An optional explanation string */
} f0r_plugin_info_t;
/**
* Is called once after init. The plugin has to fill in the values in info.
*
* \param info Pointer to an info struct allocated by the application.
*/
void f0r_get_plugin_info(f0r_plugin_info_t* info);
//---------------------------------------------------------------------------
/** \addtogroup PARAM_TYPE Parameter Types
*
* @{
*/
/**
* Parameter type for boolean values
* \see f0r_param_bool
*/
#define F0R_PARAM_BOOL 0
/**
* Parameter type for doubles
* \see f0r_param_double
*/
#define F0R_PARAM_DOUBLE 1
/**
* Parameter type for color
* \see f0r_param_color
*/
#define F0R_PARAM_COLOR 2
/**
* Parameter type for position
* \see f0r_param_position
*/
#define F0R_PARAM_POSITION 3
/**
* Parameter type for string
* \see f0r_param_string
*/
#define F0R_PARAM_STRING 4
/**
* The boolean type. The allowed range of values is [0, 1].
* [0, 0.5[ is mapped to false and [0.5, 1] is mapped to true.
*/
typedef double f0r_param_bool;
/**
* The double type. The allowed range of values is [0, 1].
*/
typedef double f0r_param_double;
/**
* The color type. All three color components are in the range [0, 1].
*/
typedef struct f0r_param_color
{
float r; /**< red color component */
float g; /**< green color component */
float b; /**< blue color component */
} f0r_param_color_t;
/**
* The position type. Both position coordinates are in the range [0, 1].
*/
typedef struct f0r_param_position
{
double x; /**< x coordinate */
double y; /**< y coordinate */
} f0r_param_position_t;
/**
* The string type.
* Zero terminated array of 8-bit values in utf-8 encoding
*/
typedef char f0r_param_string;
/** @} */
/**
* Similar to f0r_plugin_info_t, this structure is filled by the plugin
* for every parameter.
*
* All strings are unicode, 0-terminated, and the encoding is utf-8.
*/
typedef struct f0r_param_info
{
const char* name; /**<The (short) name of the param */
int type; /**<The type (see the F0R_PARAM_* defines) */
const char* explanation; /**<Optional explanation (can be 0) */
} f0r_param_info_t;
/**
* f0r_get_param_info is called by the application to query the type of
* each parameter.
*
* \param info is allocated by the application and filled by the plugin
* \param param_index the index of the parameter to be queried (from 0 to
* num_params-1)
*/
void f0r_get_param_info(f0r_param_info_t* info, int param_index);
//---------------------------------------------------------------------------
/**
* Transparent instance pointer of the frei0r effect.
*/
typedef void* f0r_instance_t;
/**
* Constructor for effect instances. The plugin returns a pointer to
* its internal instance structure.
*
* The resolution has to be an integer multiple of 8,
* must be greater than 0 and be at most 2048 in both dimensions.
*
* \param width The x-resolution of the processed video frames
* \param height The y-resolution of the processed video frames
* \returns 0 on failure or a pointer != 0 on success
*
* \see f0r_destruct
*/
f0r_instance_t f0r_construct(unsigned int width, unsigned int height);
/**
* Destroys an effect instance.
*
* \param instance The pointer to the plugins internal instance structure.
*
* \see f0r_construct
*/
void f0r_destruct(f0r_instance_t instance);
//---------------------------------------------------------------------------
/**
* Transparent parameter handle.
*/
typedef void* f0r_param_t;
/**
* This function allows the application to set the parameter values of an
* effect instance. Validity of the parameter pointer is handled by the
* application thus the data must be copied by the effect.
*
* \param instance the effect instance
* \param param pointer to the parameter value
* \param param_index index of the parameter
*
* \see f0r_get_param_value
*/
void f0r_set_param_value(f0r_instance_t instance,
f0r_param_t param, int param_index);
/**
* This function allows the application to query the parameter values of an
* effect instance.
*
* \param instance the effect instance
* \param param pointer to the parameter value
* \param param_index index of the parameter
*
* \see f0r_set_param_value
*/
void f0r_get_param_value(f0r_instance_t instance,
f0r_param_t param, int param_index);
//---------------------------------------------------------------------------
/**
* This is where the core effect processing happens. The application calls it
* after it has set the necessary parameter values.
* inframe and outframe must be aligned to an integer multiple of 16 bytes
* in memory.
*
* This funcition should not alter the parameters of the effect in any
* way (\ref f0r_get_param_value should return the same values after a call
* to \ref f0r_update as before the call).
*
* The function is responsible to restore the fpu state (e.g. rounding mode)
* and mmx state if applicable before it returns to the caller.
*
* The host mustn't call \ref f0r_update for effects of type
* \ref F0R_PLUGIN_TYPE_MIXER2 and \ref F0R_PLUGIN_TYPE_MIXER3.
*
* \param instance the effect instance
* \param time the application time in seconds but with subsecond resolution
* (e.g. milli-second resolution). The resolution should be at least
* the inter-frame period of the application.
* \param inframe the incoming video frame (can be zero for sources)
* \param outframe the resulting video frame
*
* \see f0r_update2
*/
void f0r_update(f0r_instance_t instance,
double time, const uint32_t* inframe, uint32_t* outframe);
//---------------------------------------------------------------------------
/**
* For effects of type \ref F0R_PLUGIN_TYPE_SOURCE or
* \ref F0R_PLUGIN_TYPE_FILTER this method is optional. The \ref f0r_update
* method must still be exported for these two effect types. If both are
* provided the behavior of them must be the same.
*
* Effects of type \ref F0R_PLUGIN_TYPE_MIXER2 or \ref F0R_PLUGIN_TYPE_MIXER3 must provide the new \ref f0r_update2 method.
* \param instance the effect instance
* \param time the application time in seconds but with subsecond resolution
* (e.g. milli-second resolution). The resolution should be at least
* the inter-frame period of the application.
* \param inframe1 the first incoming video frame (can be zero for sources)
* \param inframe2 the second incoming video frame
(can be zero for sources and filters)
* \param inframe3 the third incoming video frame
(can be zero for sources, filters and mixer3)
* \param outframe the resulting video frame
*
* \see f0r_update
*/
void f0r_update2(f0r_instance_t instance,
double time,
const uint32_t* inframe1,
const uint32_t* inframe2,
const uint32_t* inframe3,
uint32_t* outframe);
//---------------------------------------------------------------------------
#endif

Some files were not shown because too many files have changed in this diff Show More