mirror of
https://github.com/game-stop/veejay.git
synced 2025-12-13 03:09:59 +01:00
add LiViDO ASCII Art FX plugin
This commit is contained in:
8
veejay-current/plugin-packs/lvdasciiart/AUTHORS
Normal file
8
veejay-current/plugin-packs/lvdasciiart/AUTHORS
Normal file
@@ -0,0 +1,8 @@
|
||||
authors:
|
||||
======================
|
||||
|
||||
Alexander Tumin <iamtakingiteasy@eientei.org>
|
||||
Niels Elburg <nwelburg@gmail.com >
|
||||
|
||||
|
||||
|
||||
504
veejay-current/plugin-packs/lvdasciiart/COPYING
Normal file
504
veejay-current/plugin-packs/lvdasciiart/COPYING
Normal 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!
|
||||
|
||||
|
||||
0
veejay-current/plugin-packs/lvdasciiart/ChangeLog
Normal file
0
veejay-current/plugin-packs/lvdasciiart/ChangeLog
Normal file
368
veejay-current/plugin-packs/lvdasciiart/INSTALL
Normal file
368
veejay-current/plugin-packs/lvdasciiart/INSTALL
Normal file
@@ -0,0 +1,368 @@
|
||||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without warranty of any kind.
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
Briefly, the shell command './configure && make && make install'
|
||||
should configure, build, and install this package. The following
|
||||
more-detailed instructions are generic; see the 'README' file for
|
||||
instructions specific to this package. Some packages provide this
|
||||
'INSTALL' file but do not implement all of the features documented
|
||||
below. The lack of an optional feature in a given package is not
|
||||
necessarily a bug. More recommendations for GNU packages can be found
|
||||
in *note Makefile Conventions: (standards)Makefile Conventions.
|
||||
|
||||
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 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.
|
||||
|
||||
Running 'configure' might take a while. 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, generally using the just-built uninstalled binaries.
|
||||
|
||||
4. Type 'make install' to install the programs and any data files and
|
||||
documentation. When installing into a prefix owned by root, it is
|
||||
recommended that the package be configured and built as a regular
|
||||
user, and only the 'make install' phase executed with root
|
||||
privileges.
|
||||
|
||||
5. Optionally, type 'make installcheck' to repeat any self-tests, but
|
||||
this time using the binaries in their final installed location.
|
||||
This target does not install anything. Running this target as a
|
||||
regular user, particularly if the prior 'make install' required
|
||||
root privileges, verifies that the installation completed
|
||||
correctly.
|
||||
|
||||
6. 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.
|
||||
|
||||
7. Often, you can also type 'make uninstall' to remove the installed
|
||||
files again. In practice, not all packages have tested that
|
||||
uninstallation works correctly, even though it is required by the
|
||||
GNU Coding Standards.
|
||||
|
||||
8. Some packages, particularly those that use Automake, provide 'make
|
||||
distcheck', which can by used by developers to test that all other
|
||||
targets like 'make install' and 'make uninstall' work correctly.
|
||||
This target is generally not run by end users.
|
||||
|
||||
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=c99 CFLAGS=-g 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 can use 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 '..'. This is known
|
||||
as a "VPATH" build.
|
||||
|
||||
With a non-GNU 'make', it is safer 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.
|
||||
|
||||
On MacOS X 10.5 and later systems, you can create libraries and
|
||||
executables that work on multiple system types--known as "fat" or
|
||||
"universal" binaries--by specifying multiple '-arch' options to the
|
||||
compiler but only a single '-arch' option to the preprocessor. Like
|
||||
this:
|
||||
|
||||
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||
CPP="gcc -E" CXXCPP="g++ -E"
|
||||
|
||||
This is not guaranteed to produce working output in all cases, you
|
||||
may have to build one architecture at a time and combine the results
|
||||
using the 'lipo' tool if you have problems.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, 'make install' installs the package's commands under
|
||||
'/usr/local/bin', include files under '/usr/local/include', etc. You
|
||||
can specify an installation prefix other than '/usr/local' by giving
|
||||
'configure' the option '--prefix=PREFIX', where PREFIX must be an
|
||||
absolute file name.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files 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. In general, the default
|
||||
for these options is expressed in terms of '${prefix}', so that
|
||||
specifying just '--prefix' will affect all of the other directory
|
||||
specifications that were not explicitly provided.
|
||||
|
||||
The most portable way to affect installation locations is to pass the
|
||||
correct locations to 'configure'; however, many packages provide one or
|
||||
both of the following shortcuts of passing variable assignments to the
|
||||
'make install' command line to change installation locations without
|
||||
having to reconfigure or recompile.
|
||||
|
||||
The first method involves providing an override variable for each
|
||||
affected directory. For example, 'make install
|
||||
prefix=/alternate/directory' will choose an alternate location for all
|
||||
directory configuration variables that were expressed in terms of
|
||||
'${prefix}'. Any directories that were specified during 'configure',
|
||||
but not in terms of '${prefix}', must each be overridden at install time
|
||||
for the entire installation to be relocated. The approach of makefile
|
||||
variable overrides for each directory variable is required by the GNU
|
||||
Coding Standards, and ideally causes no recompilation. However, some
|
||||
platforms have known limitations with the semantics of shared libraries
|
||||
that end up requiring recompilation when using this method, particularly
|
||||
noticeable in packages that use GNU Libtool.
|
||||
|
||||
The second method involves providing the 'DESTDIR' variable. For
|
||||
example, 'make install DESTDIR=/alternate/directory' will prepend
|
||||
'/alternate/directory' before all installation names. The approach of
|
||||
'DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||
does not work on platforms that have drive letters. On the other hand,
|
||||
it does better at avoiding recompilation issues, and works well even
|
||||
when some directory options were not specified in terms of '${prefix}'
|
||||
at 'configure' time.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
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'.
|
||||
|
||||
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.
|
||||
|
||||
Some packages offer the ability to configure how verbose the
|
||||
execution of 'make' will be. For these packages, running './configure
|
||||
--enable-silent-rules' sets the default to minimal output, which can be
|
||||
overridden with 'make V=1'; while running './configure
|
||||
--disable-silent-rules' sets the default to verbose, which can be
|
||||
overridden with 'make V=0'.
|
||||
|
||||
Particular systems
|
||||
==================
|
||||
|
||||
On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
|
||||
is not installed, it is recommended to use the following options in
|
||||
order to use an ANSI C compiler:
|
||||
|
||||
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
||||
|
||||
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
||||
|
||||
HP-UX 'make' updates targets which have the same time stamps as their
|
||||
prerequisites, which makes it generally unusable when shipped generated
|
||||
files such as 'configure' are involved. Use GNU 'make' instead.
|
||||
|
||||
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
||||
parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
|
||||
workaround. If GNU CC is not installed, it is therefore recommended to
|
||||
try
|
||||
|
||||
./configure CC="cc"
|
||||
|
||||
and if that doesn't work, try
|
||||
|
||||
./configure CC="cc -nodtk"
|
||||
|
||||
On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
|
||||
directory contains several dysfunctional programs; working variants of
|
||||
these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
|
||||
in your 'PATH', put it _after_ '/usr/bin'.
|
||||
|
||||
On Haiku, software installed for all users goes in '/boot/common',
|
||||
not '/usr/local'. It is recommended to use the following options:
|
||||
|
||||
./configure --prefix=/boot/common
|
||||
|
||||
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 option '--target=TYPE' 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).
|
||||
|
||||
Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
|
||||
Autoconf limitation. Until the limitation is lifted, you can use this
|
||||
workaround:
|
||||
|
||||
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
'configure' Invocation
|
||||
======================
|
||||
|
||||
'configure' recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
'--help'
|
||||
'-h'
|
||||
Print a summary of all of the options to 'configure', and exit.
|
||||
|
||||
'--help=short'
|
||||
'--help=recursive'
|
||||
Print a summary of the options unique to this package's
|
||||
'configure', and exit. The 'short' variant lists options used only
|
||||
in the top level, while the 'recursive' variant lists options also
|
||||
present in any nested packages.
|
||||
|
||||
'--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.
|
||||
|
||||
'--prefix=DIR'
|
||||
Use DIR as the installation prefix. *note Installation Names:: for
|
||||
more details, including other options available for fine-tuning the
|
||||
installation locations.
|
||||
|
||||
'--no-create'
|
||||
'-n'
|
||||
Run the configure checks, but stop before creating any output
|
||||
files.
|
||||
|
||||
'configure' also accepts some other, not widely useful, options. Run
|
||||
'configure --help' for more details.
|
||||
46
veejay-current/plugin-packs/lvdasciiart/Makefile.am
Normal file
46
veejay-current/plugin-packs/lvdasciiart/Makefile.am
Normal file
@@ -0,0 +1,46 @@
|
||||
# Process with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = plugins
|
||||
|
||||
#
|
||||
# Add any non autoconf'd files here, extra readmes and other misc
|
||||
# info to be copied into the dist
|
||||
#
|
||||
EXTRA_DIST = \
|
||||
autogen.sh\
|
||||
depcomp \
|
||||
autogen.sh
|
||||
|
||||
DISTCLEANFILES = \
|
||||
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
|
||||
|
||||
## 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
|
||||
0
veejay-current/plugin-packs/lvdasciiart/NEWS
Normal file
0
veejay-current/plugin-packs/lvdasciiart/NEWS
Normal file
10
veejay-current/plugin-packs/lvdasciiart/README
Normal file
10
veejay-current/plugin-packs/lvdasciiart/README
Normal file
@@ -0,0 +1,10 @@
|
||||
This plugin requires that you have the following packages installed:
|
||||
|
||||
FreeType II (libfreetype2)
|
||||
FFmpeg (libavutil and libswscale)
|
||||
AALib (libaa1)
|
||||
|
||||
|
||||
On Ubuntu, you can use apt-get to install the packages:
|
||||
|
||||
apt-get install libfreetype6-dev libaa1-dev libavutil-dev libswscale-dev
|
||||
26
veejay-current/plugin-packs/lvdasciiart/autogen.sh
Executable file
26
veejay-current/plugin-packs/lvdasciiart/autogen.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
# Run this to generate all the initial makefiles, etc.
|
||||
|
||||
# if you use autoconf 2.64 or earlier,
|
||||
# you may have to create the m4 directory yourself
|
||||
#
|
||||
|
||||
|
||||
|
||||
## remove the '#' in front of the line for 'autoreconf'
|
||||
|
||||
########################################
|
||||
## newer distributions, ubuntu 11. etc
|
||||
########################################
|
||||
|
||||
if [ ! -d m4 ]; then
|
||||
mkdir m4
|
||||
fi
|
||||
|
||||
autoreconf -v -fi -I m4
|
||||
|
||||
#########################################
|
||||
## slackware 13.1 and older
|
||||
#########################################
|
||||
|
||||
#autoreconf -v -fi
|
||||
317
veejay-current/plugin-packs/lvdasciiart/configure.ac
Normal file
317
veejay-current/plugin-packs/lvdasciiart/configure.ac
Normal file
@@ -0,0 +1,317 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
dnl AC_INIT
|
||||
AC_INIT([lvdasciiart-plugin],[0.0.1],[veejay-users@lists.sourceforge.net])
|
||||
AC_PREREQ(2.57)
|
||||
AC_CONFIG_SRCDIR([plugins/lvd_aa.c])
|
||||
|
||||
LVDGMICMAJOR_VERSION=0
|
||||
LVDGMICMINOR_VERSION=0
|
||||
LVDGMICMICRO_VERSION=1
|
||||
LVDGMICVERSION=$LVDGMICMAJOR_VERSION.$LVDGMICMINOR_VERSION.$LVDGMICMICRO_VERSION
|
||||
LVDGMICCODENAME="Livido AsciiArt filter - build $LVDGMICMINOR_VERSION $LVDGMICMICRO_VERSION"
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
AC_CANONICAL_HOST
|
||||
AC_CANONICAL_TARGET
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AM_INIT_AUTOMAKE([subdir-objects])
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
AC_DEFINE(VEEJAYUTIL,1,[Building Livido AsciiArt filter])
|
||||
AC_DEFINE(HAVE_CONFIG_H,1,[Include config.h])
|
||||
# libtool versioning
|
||||
LT_RELEASE=$LVDGMICMAJOR_VERSION.$LVDGMICMINOR_VERSION
|
||||
LT_CURRENT=$LVDGMICMICRO_VERSION
|
||||
LT_REVISION=$LVDGMICMICRO_VERSION
|
||||
LT_AGE=$LVDGMICMICRO_VERSION
|
||||
AC_SUBST(LT_RELEASE)
|
||||
AC_SUBST(LT_CURRENT)
|
||||
AC_SUBST(LT_REVISION)
|
||||
AC_SUBST(LT_AGE)
|
||||
dnl **********************************************************************
|
||||
dnl Options
|
||||
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
dnl kill CFLAGS
|
||||
CFLAGS=""
|
||||
AC_ARG_ENABLE([strict],
|
||||
AC_HELP_STRING([--enable-strict],
|
||||
[Compile in paranoia assertion checking]))
|
||||
AC_ARG_ENABLE([debug],
|
||||
AC_HELP_STRING([--enable-debug],
|
||||
[Compile in debugging information]))
|
||||
AC_ARG_ENABLE([profile],
|
||||
AC_HELP_STRING([--enable-profiling],
|
||||
[Compile in profiling information]))
|
||||
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)]))
|
||||
arch_target="auto"
|
||||
AC_ARG_WITH([arch-target], AS_HELP_STRING( [--with-arch-target=generic or auto],
|
||||
[Build a generic binary or auto-detect current cpu type (defaults to auto-detect)]),
|
||||
[ arch_target="$withval"])
|
||||
|
||||
user_specified_target=
|
||||
AC_ARG_WITH([arch-target], AS_HELP_STRING( [--with-arch-target=CPU_TYPE],
|
||||
[Set a specific sub-architecture (defaults to native)]),
|
||||
[ user_specified_target="$withval" ])
|
||||
|
||||
|
||||
|
||||
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_YACC
|
||||
AM_PROG_LEX
|
||||
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])
|
||||
|
||||
AC_CHECK_FUNCS([posix_memalign memalign fmax lround 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_CHECK_SIZEOF([int])
|
||||
AC_CHECK_SIZEOF([long int])
|
||||
AC_CHECK_SIZEOF([size_t])
|
||||
AC_CHECK_SIZEOF([float])
|
||||
|
||||
have_aalib=false
|
||||
AC_CHECK_HEADER(aalib.h, have_aalib=true, have_aalib=false)
|
||||
if test x$have_aalib == xfalse; then
|
||||
AC_MSG_ERROR([aalib headers not found. Please install aalib-dev])
|
||||
fi
|
||||
|
||||
AA_LIBS="-laa"
|
||||
AC_SUBST(AA_LIBS)
|
||||
AC_DEFINE(HAVE_AALIB,1,[Compile with aalib support])
|
||||
|
||||
AC_TYPE_SIGNAL
|
||||
|
||||
AC_MSG_NOTICE([The host is $host $host_cpu $host_vendor $host_os .])
|
||||
|
||||
AC_SUBST(LIBM_LIBS)
|
||||
|
||||
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
|
||||
|
||||
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 profiling information)
|
||||
if test "x$enable_profiling" = "xyes" ; then
|
||||
debugCFLAGS="$debugCFLAGS -fprofile-arcs -ftest-coverage"
|
||||
DEBUGLIBS="-lgcov"
|
||||
AC_SUBST(DEBUGLIBS)
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([Architecture])
|
||||
case $host_cpu in
|
||||
i[[3-7]]86)
|
||||
AC_DEFINE(HAVE_X86CPU,1, [Compiling for x86 architecture CPU])
|
||||
AC_DEFINE(ARCH_X86,1,[Compiling for x86 architecture])
|
||||
have_x86cpu=true
|
||||
|
||||
PROGRAM_NOPIC="-fno-PIC"
|
||||
|
||||
dnl If the host is pentium, align on double word boundary
|
||||
case $host_cpu in
|
||||
i686)
|
||||
if test "x$enable_debug" = "xno" ; then
|
||||
CFLAGS="-ffast-math -O3 -ftree-vectorize"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
;;
|
||||
x86_64*|k8-*)
|
||||
AC_DEFINE(HAVE_X86_CPU,1, [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
|
||||
if test "x$enable_debug" = "xno" ; then
|
||||
CFLAGS="-m64 -fPIC -DPIC -ftree-vectorize -O3 -ffast-math"
|
||||
fi
|
||||
;;
|
||||
powerpc | powerpc64)
|
||||
AC_DEFINE(HAVE_PPCCPU,1, [Compiling for PowerPC CPU])
|
||||
AC_DEFINE(ARCH_PPC,1,[Compiling for PowerPC])
|
||||
have_ppccpu=true
|
||||
|
||||
case $host in
|
||||
*-apple-darwin*)
|
||||
PROGRAM_NOPIC="-mdynamic-no-pic" # dynamic-no-pic is an Apple gcc option
|
||||
|
||||
;;
|
||||
*)
|
||||
PROGRAM_NOPIC=""
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
mips | mipsel)
|
||||
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,1,[Compile for playstation2])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT([unknown])
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(PROGRAM_NOPIC)
|
||||
|
||||
AC_MSG_RESULT($CFLAGS)
|
||||
|
||||
CFLAGS="$ARCHFLAGS $CFLAGS"
|
||||
CXXFLAGS="$ARCHFLAGS $CXXFLAGS"
|
||||
|
||||
|
||||
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 -Wundef -Wshadow -Wbad-function-cast -Wconversion -Wpadded -Wunreachable-code -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
|
||||
|
||||
if test "x$cflags_set" != "xyes" ; then
|
||||
if test "x$enable_debug" = "xyes" ; then
|
||||
CFLAGS="$debugCFLAGS $warnCFLAGS $CFLAGS"
|
||||
else
|
||||
CFLAGS="$CFLAGS $warnCFLAGS -DSILENT"
|
||||
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
|
||||
|
||||
have_freetype2=false
|
||||
PKG_CHECK_MODULES( FREETYPE2, [freetype2], [
|
||||
AC_SUBST(FREETYPE2_CFLAGS)
|
||||
AC_SUBST(FREETYPE2_LIBS)
|
||||
AC_DEFINE(HAVE_FREETYPE,,[compiling with freetype])
|
||||
have_freetype2=true],
|
||||
[have_freetype2=false] )
|
||||
|
||||
|
||||
PKG_CHECK_MODULES(LIBAVUTIL, [libavutil >= 49.7.0],have_avutil=true,have_avutil=false)
|
||||
PKG_CHECK_MODULES(LIBSWSCALE,[libswscale >= 0.7.1],have_swscale=true,have_swscale=false)
|
||||
if test x$have_swscale = xfalse;
|
||||
then
|
||||
AC_MSG_ERROR([libswscale not found.])
|
||||
fi
|
||||
if test x$have_avutil = xfalse;
|
||||
then
|
||||
AC_MSG_ERROR([libavutil not found.])
|
||||
fi
|
||||
|
||||
FFMPEG_CFLAGS="${LIBAVUTIL_CFLAGS} ${LIBSWSCALE_CFLAGS}"
|
||||
FFMPEG_LIBS="${LIBAVUTIL_LIBS} ${LIBSWSCALE_LIBS}"
|
||||
AC_SUBST(FFMPEG_CFLAGS)
|
||||
AC_SUBST(FFMPEG_LIBS)
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
plugins/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
AC_DEFINE(VERSION, ${VERSION})
|
||||
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([ Livido aalib filter ${VERSION} build configuration :])
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([ Compiler flags: $CFLAGS])
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([ Architecture: ${host_cpu} ])
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([ - AALib : ${have_aalib}])
|
||||
AC_MSG_NOTICE([ - FreeType2 : ${have_freetype2}])
|
||||
AC_MSG_NOTICE([ - FFmpeg/AV Swscaler : ${have_swscale} ])
|
||||
AC_MSG_NOTICE([ - FFmpeg/AV AVUtil : ${have_avutil} ])
|
||||
|
||||
26
veejay-current/plugin-packs/lvdasciiart/plugins/Makefile.am
Normal file
26
veejay-current/plugin-packs/lvdasciiart/plugins/Makefile.am
Normal file
@@ -0,0 +1,26 @@
|
||||
lividoplugin_LTLIBRARIES = lvd_aa.la
|
||||
|
||||
lvd_aa_la_SOURCES = lvd_aa.c
|
||||
|
||||
AM_CPPFLAGS=$(FFMPEG_CFLAGS) $(FREETYPE2_CFLAGS) -I$(top_srcdir)/plugins
|
||||
AM_CFLAGS=-I@top_srcdir@/include $(OPTCFLAGS)
|
||||
AM_LDFLAGS=-module -avoid-version -lm -export-dynamic -lstdc++ -DDYNAMIC -rdynamic $(AA_LIBS) $(FREETYPE2_LIBS) $(FFMPEG_LIBS)
|
||||
AM_LIBTOOLFLAGS = --tag=disable-static
|
||||
|
||||
lividoplugindir = @libdir@/livido-plugins
|
||||
|
||||
install-lividopluginLTLIBRARIES:$(lividoplugin_LTLIBRARIES)
|
||||
mkdir -p $(DESTDIR)/$(lividoplugindir)
|
||||
list='$(lividoplugin_LTLIBRARIES)'; \
|
||||
for file in $$list; do \
|
||||
sofile=`basename $$file .la`.so; \
|
||||
$(INSTALL_PROGRAM) .libs/$$sofile $(DESTDIR)/$(lividoplugindir);\
|
||||
done
|
||||
|
||||
uninstall-lividopluginLTLIBRARIES:
|
||||
list='$(lividoplugin_LTLIBRARIES)'; \
|
||||
for file in $$list; do \
|
||||
sofile=`basename $$file .la`.so; \
|
||||
rm -f $(DESTDIR)/$(lividoplugindir)/$$sofile; \
|
||||
done
|
||||
|
||||
358
veejay-current/plugin-packs/lvdasciiart/plugins/livido-utils.c
Normal file
358
veejay-current/plugin-packs/lvdasciiart/plugins/livido-utils.c
Normal file
@@ -0,0 +1,358 @@
|
||||
/* LiViDO 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.
|
||||
|
||||
LiViDO 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 source code; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
LiViDO is developed by:
|
||||
|
||||
Niels Elburg - http://veejay.sf.net
|
||||
|
||||
Gabriel "Salsaman" Finch - http://lives.sourceforge.net
|
||||
|
||||
Denis "Jaromil" Rojo - http://freej.dyne.org
|
||||
|
||||
Tom Schouten - http://zwizwa.fartit.com
|
||||
|
||||
Andraz Tori - http://cvs.cinelerra.org
|
||||
|
||||
reviewed with suggestions and contributions from:
|
||||
|
||||
Silvano "Kysucix" Galliani - http://freej.dyne.org
|
||||
|
||||
Kentaro Fukuchi - http://megaui.net/fukuchi
|
||||
|
||||
Jun Iio - http://www.malib.net
|
||||
|
||||
Carlo Prelz - http://www2.fluido.as:8080/
|
||||
|
||||
*/
|
||||
|
||||
/* (C) Gabriel "Salsaman" Finch, 2005 */
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "livido.h"
|
||||
|
||||
int livido_has_property (livido_port_t *port, const char *key) {
|
||||
if (livido_property_get(port,key,0,NULL)==LIVIDO_ERROR_NOSUCH_PROPERTY) return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
// property setters
|
||||
|
||||
int livido_set_int_value (livido_port_t *port, const char *key, int value) {
|
||||
// returns a LIVIDO_ERROR
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_INT,1,&value);
|
||||
}
|
||||
|
||||
int livido_set_double_value (livido_port_t *port, const char *key, double value) {
|
||||
// returns a LIVIDO_ERROR
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_DOUBLE,1,&value);
|
||||
}
|
||||
|
||||
int livido_set_boolean_value (livido_port_t *port, const char *key, int value) {
|
||||
// returns a LIVIDO_ERROR
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_BOOLEAN,1,&value);
|
||||
}
|
||||
|
||||
int livido_set_string_value (livido_port_t *port, const char *key, char *value) {
|
||||
// returns a LIVIDO_ERROR
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_STRING,1,&value);
|
||||
}
|
||||
|
||||
int livido_set_portptr_value (livido_port_t *port, const char *key, void *value) {
|
||||
// returns a LIVIDO_ERROR
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_PORTPTR,1,&value);
|
||||
}
|
||||
|
||||
int livido_set_voidptr_value (livido_port_t *port, const char *key, void *value) {
|
||||
// returns a LIVIDO_ERROR
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_VOIDPTR,1,&value);
|
||||
}
|
||||
|
||||
|
||||
/////////// these functions need a size ////////////
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// general property getter
|
||||
|
||||
int livido_get_value (livido_port_t *port, const char *key, void *value) {
|
||||
// returns a LIVIDO_ERROR
|
||||
return livido_property_get( port, key, 0, value);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
int livido_get_int_value (livido_port_t *port, const char *key, int *error) {
|
||||
int retval=0;
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_INT) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return retval;
|
||||
}
|
||||
else *error=livido_get_value (port,key,&retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
double livido_get_double_value (livido_port_t *port, const char *key, int *error) {
|
||||
double retval=0.;
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_DOUBLE) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return retval;
|
||||
}
|
||||
*error=livido_get_value (port,key,&retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
int livido_get_boolean_value (livido_port_t *port, const char *key, int *error) {
|
||||
int retval=0;
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_BOOLEAN) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return retval;
|
||||
}
|
||||
*error=livido_get_value (port,key,&retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
char *livido_get_string_value (livido_port_t *port, const char *key, int *error) {
|
||||
char *retval=NULL;
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_STRING) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return NULL;
|
||||
}
|
||||
if ((retval=(char *)livido_malloc(livido_property_element_size(port,key,0)+1))==NULL) {
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
return NULL;
|
||||
}
|
||||
if ((*error=livido_get_value (port,key,&retval))!=LIVIDO_NO_ERROR) {
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
void *livido_get_voidptr_value (livido_port_t *port, const char *key, int *error) {
|
||||
void *retval=NULL;
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_VOIDPTR) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return retval;
|
||||
}
|
||||
*error=livido_get_value (port,key,&retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
livido_port_t *livido_get_portptr_value (livido_port_t *port, const char *key, int *error) {
|
||||
livido_port_t *retval=NULL;
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_PORTPTR) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return retval;
|
||||
}
|
||||
*error=livido_get_value (port,key,&retval);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
int *livido_get_int_array (livido_port_t *port, const char *key, int *error) {
|
||||
int i;
|
||||
int num_elems;
|
||||
int *retval;
|
||||
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_INT) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((num_elems=livido_property_num_elements (port,key))==0) return NULL;
|
||||
|
||||
if ((retval=(int *)livido_malloc(num_elems*sizeof(int)))==NULL) {
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i=0;i<num_elems;i++) {
|
||||
if ((*error=livido_property_get(port, key, i, &retval[i]))!=LIVIDO_NO_ERROR) {
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
double *livido_get_double_array (livido_port_t *port, const char *key, int *error) {
|
||||
int i;
|
||||
int num_elems;
|
||||
double *retval;
|
||||
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_DOUBLE) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return NULL;
|
||||
}
|
||||
if ((num_elems=livido_property_num_elements (port,key))==0) return NULL;
|
||||
|
||||
if ((retval=(double *)livido_malloc(num_elems*sizeof(double)))==NULL) {
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i=0;i<num_elems;i++) {
|
||||
if ((*error=livido_property_get(port, key, i, &retval[i]))!=LIVIDO_NO_ERROR) {
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
int *livido_get_boolean_array (livido_port_t *port, const char *key, int *error) {
|
||||
int i;
|
||||
int num_elems;
|
||||
int *retval;
|
||||
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_BOOLEAN) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((num_elems=livido_property_num_elements (port,key))==0) return NULL;
|
||||
|
||||
if ((retval=(int *)livido_malloc(num_elems*sizeof(int)))==NULL) {
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i=0;i<num_elems;i++) {
|
||||
if ((*error=livido_property_get(port, key, i, &retval[i]))!=LIVIDO_NO_ERROR) {
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
char **livido_get_string_array (livido_port_t *port, const char *key, int *error) {
|
||||
int i;
|
||||
int num_elems;
|
||||
char **retval;
|
||||
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_STRING) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((num_elems=livido_property_num_elements (port,key))==0) return NULL;
|
||||
|
||||
if ((retval=(char **)livido_malloc(num_elems*sizeof(char *)))==NULL) {
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i=0;i<num_elems;i++) {
|
||||
if ((retval[i]=(char *)livido_malloc(livido_property_element_size(port,key,i)+1))==NULL) {
|
||||
for (--i;i>=0;i--) livido_free(retval[i]);
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
if ((*error=livido_property_get(port, key, i, &retval[i]))!=LIVIDO_NO_ERROR) {
|
||||
for (--i;i>=0;i--) livido_free(retval[i]);
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
void **livido_get_voidptr_array (livido_port_t *port, const char *key, int *error) {
|
||||
int i;
|
||||
int num_elems;
|
||||
void **retval;
|
||||
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_VOIDPTR) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((num_elems=livido_property_num_elements (port,key))==0) return NULL;
|
||||
|
||||
if ((retval=(void **)livido_malloc(num_elems*sizeof(void *)))==NULL) {
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i=0;i<num_elems;i++) {
|
||||
if ((*error=livido_property_get(port, key, i, &retval[i]))!=LIVIDO_NO_ERROR) {
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
livido_port_t **livido_get_portptr_array (livido_port_t *port, const char *key, int *error) {
|
||||
int i;
|
||||
int num_elems;
|
||||
livido_port_t **retval;
|
||||
|
||||
if (livido_has_property(port,key)&&livido_property_atom_type(port,key)!=LIVIDO_ATOM_TYPE_PORTPTR) {
|
||||
*error=LIVIDO_ERROR_WRONG_ATOM_TYPE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((num_elems=livido_property_num_elements (port,key))==0) return NULL;
|
||||
|
||||
if ((retval=(livido_port_t **)livido_malloc(num_elems*sizeof(livido_port_t *)))==NULL) {
|
||||
*error=LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i=0;i<num_elems;i++) {
|
||||
if ((*error=livido_property_get(port, key, i, &retval[i]))!=LIVIDO_NO_ERROR) {
|
||||
livido_free (retval);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
int livido_set_int_array (livido_port_t *port, const char *key, int num_elems, int *values) {
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_INT,num_elems,values);
|
||||
}
|
||||
|
||||
int livido_set_double_array (livido_port_t *port, const char *key, int num_elems, double *values) {
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_DOUBLE,num_elems,values);
|
||||
}
|
||||
|
||||
int livido_set_boolean_array (livido_port_t *port, const char *key, int num_elems, int *values) {
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_BOOLEAN,num_elems,values);
|
||||
}
|
||||
|
||||
int livido_set_string_array (livido_port_t *port, const char *key, int num_elems, char **values) {
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_STRING,num_elems,values);
|
||||
}
|
||||
|
||||
int livido_set_voidptr_array (livido_port_t *port, const char *key, int num_elems, void **values) {
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_VOIDPTR,num_elems,values);
|
||||
}
|
||||
|
||||
int livido_set_portptr_array (livido_port_t *port, const char *key, int num_elems, livido_port_t **values) {
|
||||
return livido_property_set (port,key,LIVIDO_ATOM_TYPE_PORTPTR,num_elems,values);
|
||||
}
|
||||
|
||||
219
veejay-current/plugin-packs/lvdasciiart/plugins/livido.h
Normal file
219
veejay-current/plugin-packs/lvdasciiart/plugins/livido.h
Normal file
@@ -0,0 +1,219 @@
|
||||
/*
|
||||
(C) Copyright 2005
|
||||
Gabriel "Salsaman" Finch,
|
||||
Niels Elburg,
|
||||
Dennis "Jaromil" Rojo,
|
||||
Daniel Fischer,
|
||||
Martin Bayer,
|
||||
Kentaro Fukuchi,
|
||||
Andraz Tori.
|
||||
|
||||
|
||||
Revised by Niels, 2010 ( 101 )
|
||||
2011 ( 102 )
|
||||
2015 ( 103 )
|
||||
|
||||
LiViDO 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.
|
||||
|
||||
LiViDO 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 source code; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
*/
|
||||
#ifndef __LIVIDO_H__
|
||||
#define __LIVIDO_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define LIVIDO_BEGIN_DECLS extern "C" {
|
||||
#define LIVIDO_END_DECLS }
|
||||
#else
|
||||
#define LIVIDO_BEGIN_DECLS
|
||||
#define LIVIDO_END_DECLS
|
||||
#endif
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE (0)
|
||||
#endif
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE (!FALSE)
|
||||
#endif
|
||||
|
||||
LIVIDO_BEGIN_DECLS
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
#ifdef IS_LIVIDO_PLUGIN
|
||||
typedef void livido_port_t;
|
||||
#endif
|
||||
#define LIVIDO_API_VERSION 104
|
||||
#define LIVIDO_PALETTE_RGB888 1
|
||||
#define LIVIDO_PALETTE_RGB24 1
|
||||
#define LIVIDO_PALETTE_BGR888 2
|
||||
#define LIVIDO_PALETTE_BGR24 2
|
||||
#define LIVIDO_PALETTE_RGBA8888 3
|
||||
#define LIVIDO_PALETTE_RGBA32 3
|
||||
#define LIVIDO_PALETTE_ARGB8888 4
|
||||
#define LIVIDO_PALETTE_ARGB32 4
|
||||
|
||||
#define LIVIDO_PALETTE_RGBFLOAT 5
|
||||
#define LIVIDO_PALETTE_ARGBFLOAT 6
|
||||
|
||||
#define LIVIDO_PALETTE_RGB48BE 7
|
||||
#define LIVIDO_PALETTE_RGB48LE 8
|
||||
#define LIVIDO_PALETTE_YUV444P16LE 9
|
||||
#define LIVIDO_PALETTE_YUV444P16BE 10
|
||||
#define LIVIDO_PALETTE_YUV422P16LE 11
|
||||
#define LIVIDO_PALETTE_YUV422P16BE 12
|
||||
#define LIVIDO_PALETTE_YUV422P 513
|
||||
#define LIVIDO_PALETTE_YV16 513
|
||||
#define LIVIDO_PALETTE_YUV420P 514
|
||||
#define LIVIDO_PALETTE_YV12 514
|
||||
#define LIVIDO_PALETTE_YVU420P 515
|
||||
#define LIVIDO_PALETTE_I420 515
|
||||
|
||||
#define LIVIDO_PALETTE_YUV444P 516
|
||||
#define LIVIDO_PALETTE_YUV4444P 517
|
||||
#define LIVIDO_PALETTE_YUV444P16 523
|
||||
#define LIVIDO_PALETTE_YUYV8888 518
|
||||
#define LIVIDO_PALETTE_UYVY8888 519
|
||||
#define LIVIDO_PALETTE_YUV411 520
|
||||
#define LIVIDO_PALETTE_YUV888 521
|
||||
#define LIVIDO_PALETTE_YUVA8888 522
|
||||
#define LIVIDO_PALETTE_YUVA422 524
|
||||
#define LIVIDO_PALETTE_A1 1025
|
||||
#define LIVIDO_PALETTE_A8 1026
|
||||
#define LIVIDO_PALETTE_A16 1028
|
||||
#define LIVIDO_PALETTE_AFLOAT 1027
|
||||
|
||||
/**
|
||||
*Plugin is not realtime capable
|
||||
*/
|
||||
#define LIVIDO_FILTER_NON_REALTIME (1<<0)
|
||||
/**
|
||||
*Plugin processes inplace
|
||||
*/
|
||||
#define LIVIDO_FILTER_CAN_DO_INPLACE (1<<1)
|
||||
/**
|
||||
*Plugin keeps internal state
|
||||
*/
|
||||
#define LIVIDO_FILTER_NON_STATELESS (1<<2)
|
||||
/**
|
||||
*Plugin is parallelizable (host is allowed to run it in parallel)
|
||||
*/
|
||||
#define LIVIDO_FILTER_IS_PARALLELIZABLE (1<<4)
|
||||
|
||||
/**
|
||||
* Error messages
|
||||
*/
|
||||
#define LIVIDO_NO_ERROR 0
|
||||
#define LIVIDO_ERROR_MEMORY_ALLOCATION 1
|
||||
#define LIVIDO_ERROR_PROPERTY_READONLY 2
|
||||
#define LIVIDO_ERROR_NOSUCH_ELEMENT 3
|
||||
#define LIVIDO_ERROR_NOSUCH_PROPERTY 4
|
||||
#define LIVIDO_ERROR_WRONG_ATOM_TYPE 5
|
||||
#define LIVIDO_ERROR_TOO_MANY_INSTANCES 6
|
||||
#define LIVIDO_ERROR_HARDWARE 7
|
||||
#define LIVIDO_ERROR_PORT 8
|
||||
#define LIVIDO_ERROR_NO_OUTPUT_CHANNELS 9
|
||||
#define LIVIDO_ERROR_NO_INPUT_CHANNELS 10
|
||||
#define LIVIDO_ERROR_NO_INPUT_PARAMETERS 11
|
||||
#define LIVIDO_ERROR_NO_OUTPUT_PARAMETERS 12
|
||||
#define LIVIDO_ERROR_ENVIRONMENT 13
|
||||
#define LIVIDO_ERROR_RESOURCE 14
|
||||
#define LIVIDO_ERROR_INTERNAL 15
|
||||
|
||||
/**
|
||||
* Primitives
|
||||
*/
|
||||
#define LIVIDO_ATOM_TYPE_INT 1
|
||||
#define LIVIDO_ATOM_TYPE_DOUBLE 2
|
||||
#define LIVIDO_ATOM_TYPE_BOOLEAN 3
|
||||
#define LIVIDO_ATOM_TYPE_STRING 4
|
||||
#define LIVIDO_ATOM_TYPE_VOIDPTR 65
|
||||
#define LIVIDO_ATOM_TYPE_PORTPTR 66
|
||||
|
||||
/**
|
||||
* Port types
|
||||
*/
|
||||
#define LIVIDO_PORT_TYPE_PLUGIN_INFO 1
|
||||
#define LIVIDO_PORT_TYPE_FILTER_CLASS 2
|
||||
#define LIVIDO_PORT_TYPE_FILTER_INSTANCE 3
|
||||
#define LIVIDO_PORT_TYPE_CHANNEL_TEMPLATE 4
|
||||
#define LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE 5
|
||||
#define LIVIDO_PORT_TYPE_CHANNEL 6
|
||||
#define LIVIDO_PORT_TYPE_PARAMETER 7
|
||||
#define LIVIDO_PORT_TYPE_GUI 8
|
||||
|
||||
typedef int (*livido_init_f) (livido_port_t * filter_instance);
|
||||
typedef int (*livido_process_f) (livido_port_t * filter_instance,double timestamp);
|
||||
typedef int (*livido_deinit_f) (livido_port_t * filter_instance);
|
||||
|
||||
typedef void *(*livido_malloc_f) (size_t size);
|
||||
typedef void (*livido_free_f) (void *ptr);
|
||||
typedef void *(*livido_memset_f) (void *s, int c, size_t n);
|
||||
typedef void *(*livido_memcpy_f) (void *dest, const void *src, size_t n);
|
||||
typedef livido_port_t *(*livido_port_new_f) (int);
|
||||
typedef void (*livido_port_free_f) (livido_port_t * port);
|
||||
typedef int (*livido_property_set_f) (livido_port_t *, const char *, int, int, void *);
|
||||
typedef int (*livido_property_get_f) (livido_port_t *, const char *, int, void *);
|
||||
typedef int (*livido_property_num_elements_f) (livido_port_t *, const char *);
|
||||
typedef int (*livido_property_atom_type_f) (livido_port_t *, const char *);
|
||||
typedef size_t(*livido_property_element_size_f) (livido_port_t *, const char *, const int);
|
||||
typedef char **(*livido_list_properties_f) (livido_port_t *);
|
||||
typedef int (*livido_keyframe_get_f)(livido_port_t *port, long pos, int dir );
|
||||
typedef int (*livido_keyframe_put_f)(livido_port_t *port, long pos, int dir );
|
||||
|
||||
typedef struct
|
||||
{
|
||||
void (*f)();
|
||||
} livido_setup_t;
|
||||
|
||||
typedef livido_port_t *(*livido_setup_f) (const livido_setup_t list[], int );
|
||||
|
||||
#define LIVIDO_PLUGIN \
|
||||
static livido_port_t *(*livido_port_new) (int) = 0;\
|
||||
static void (*livido_port_free) (livido_port_t * port) = 0;\
|
||||
static int (*livido_property_set) (livido_port_t * port,const char *key, int atom_type, int num_elems, void *value) = 0;\
|
||||
static int (*livido_property_get) (livido_port_t * port,const char *key, int idx, void *value) = 0;\
|
||||
static int (*livido_property_num_elements) (livido_port_t * port,const char *key) = 0;\
|
||||
static int (*livido_property_atom_type) (livido_port_t * port,const char *key) = 0;\
|
||||
static size_t(*livido_property_element_size) (livido_port_t * port,const char *key, const int idx) = 0;\
|
||||
static char **(*livido_list_properties) (livido_port_t * port) = 0;\
|
||||
static void *(*livido_malloc) (size_t size) = 0;\
|
||||
static void (*livido_free) (void *ptr) = 0;\
|
||||
static void *(*livido_memset) (void *s, int c, size_t n) = 0;\
|
||||
static void *(*livido_memcpy) (void *dest, const void *src, size_t n) = 0;\
|
||||
static int (*livido_keyframe_get)(livido_port_t *port, long pos, int dir) = 0;\
|
||||
static int (*livido_keyframe_put)(livido_port_t *port, long pos, int dir) = 0; \
|
||||
|
||||
/* Using void* to pass base address of function, needs explicit typecast and host must match ordering */
|
||||
#define LIVIDO_IMPORT(list) \
|
||||
{\
|
||||
livido_malloc = (livido_malloc_f) list[0].f;\
|
||||
livido_free = (livido_free_f) list[1].f;\
|
||||
livido_memset = (livido_memset_f) list[2].f;\
|
||||
livido_memcpy = (livido_memcpy_f) list[3].f;\
|
||||
livido_port_new = (livido_port_new_f) list[4].f;\
|
||||
livido_port_free = (livido_port_free_f) list[5].f;\
|
||||
livido_property_set = (livido_property_set_f) list[6].f;\
|
||||
livido_property_get = (livido_property_get_f) list[7].f;\
|
||||
livido_property_num_elements = (livido_property_num_elements_f) list[8].f;\
|
||||
livido_property_atom_type = (livido_property_atom_type_f) list[9].f;\
|
||||
livido_property_element_size = (livido_property_element_size_f) list[10].f;\
|
||||
livido_list_properties = (livido_list_properties_f) list[11].f;\
|
||||
livido_keyframe_get = (livido_keyframe_get_f) list[12].f;\
|
||||
livido_keyframe_put = (livido_keyframe_put_f) list[13].f;\
|
||||
}
|
||||
|
||||
LIVIDO_END_DECLS
|
||||
#endif// #ifndef __LIVIDO_H_
|
||||
989
veejay-current/plugin-packs/lvdasciiart/plugins/lvd_aa.c
Normal file
989
veejay-current/plugin-packs/lvdasciiart/plugins/lvd_aa.c
Normal file
@@ -0,0 +1,989 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Niels Elburg <nwelburg@gmail.com>
|
||||
*
|
||||
* This file is part of lvdasciiart
|
||||
*
|
||||
* LVDAsciiArt 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.
|
||||
*
|
||||
* LVDAsciiArt 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 LVDAsciiAart; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/* There was an ASCII filter posted to the ffmpeg-devel mailing list.
|
||||
* This ASCII filter was slurped and modified to run as a livido plugin in veejay
|
||||
*
|
||||
* https://ffmpeg.org/pipermail/ffmpeg-devel/2014-June/159234.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2014 Alexander Tumin <iamtakingiteasy@eientei.org>
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg 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.
|
||||
*
|
||||
* FFmpeg 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 FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* aa (ascii-art) video filter using aalib
|
||||
*
|
||||
* original filter by Alexander Tumin
|
||||
*/
|
||||
#ifndef IS_LIVIDO_PLUGIN
|
||||
#define IS_LIVIDO_PLUGIN
|
||||
#endif
|
||||
#include <stdlib.h>
|
||||
#include <dirent.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "livido.h"
|
||||
LIVIDO_PLUGIN
|
||||
#include "utils.h"
|
||||
#include "livido-utils.c"
|
||||
|
||||
#include <aalib.h>
|
||||
|
||||
#include <libswscale/swscale.h>
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
#include FT_GLYPH_H
|
||||
#include FT_STROKER_H
|
||||
#define NUM_GLYPHS 256
|
||||
#define RUP8(num)(((num)+8)&~8)
|
||||
|
||||
typedef struct Glyph {
|
||||
FT_Glyph *glyph; ///< freetype glyph
|
||||
uint32_t code; ///< glyph codepoint
|
||||
FT_Bitmap bitmap; ///< glyph bitmap
|
||||
FT_BBox bbox; ///< glyph bounding box
|
||||
int bitmap_left; ///< distance from origin to left boundary
|
||||
int bitmap_top; ///< distance from origin to top boundary
|
||||
} Glyph;
|
||||
|
||||
typedef struct {
|
||||
struct SwsContext *sws; ///< sws scaling context
|
||||
uint8_t *buf[3]; ///< sws scaling destination buffer
|
||||
int w;
|
||||
int h;
|
||||
int flags;
|
||||
} lvd_scale_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
char *fontfile; ///< font file
|
||||
int fontsize; ///< font size in pixels
|
||||
int font; ///< selected font
|
||||
|
||||
FT_Library library; ///< freetype library
|
||||
FT_Face face; ///< freetype font face
|
||||
int xadvance; ///< glyph x advance
|
||||
int yadvance; ///< glyph y advance
|
||||
|
||||
aa_context *aa; ///< aalib context
|
||||
struct aa_hardware_params aa_params;
|
||||
struct aa_renderparams renderparams;
|
||||
|
||||
int x; ///< cursor x (in characters)
|
||||
int y; ///< corsor y (int characters)
|
||||
int w; ///< canvas size (in characters)
|
||||
int h;
|
||||
|
||||
int initialized;
|
||||
int rollover;
|
||||
int density;
|
||||
int mode;
|
||||
int aa_flags;
|
||||
|
||||
uint8_t *buf[3];
|
||||
uint8_t *curframe_data[3];
|
||||
int curframe_width;
|
||||
int curframe_height;
|
||||
|
||||
Glyph **glyphs; ///< array of glyphs
|
||||
lvd_scale_t scale;
|
||||
} lvd_aa_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int fontidx;
|
||||
char **fontlist;
|
||||
int maxfonts;
|
||||
} font_param_t;
|
||||
|
||||
#undef __FTERRORS_H__
|
||||
|
||||
#define FT_ERROR_START_LIST {
|
||||
#define FT_ERRORDEF(e, v, s) { (e), (s) },
|
||||
#define FT_ERROR_END_LIST { 0, NULL } };
|
||||
|
||||
const struct {
|
||||
int err_code;
|
||||
const char *err_msg;
|
||||
} ft_errors[] =
|
||||
#include FT_ERRORS_H
|
||||
#define FT_ERRMSG(e) ft_errors[e].err_msg
|
||||
|
||||
static int is_ttf(const char *file)
|
||||
{
|
||||
if(strstr( file, ".ttf" ) || strstr(file, ".TTF" ) )
|
||||
return 1;
|
||||
if(strstr( file, ".otf" ) || strstr(file, ".OTF" ) )
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int find_font_file(FT_Library lib, char *path, char **fontlist, int *fontidx, int maxfonts )
|
||||
{
|
||||
if(!path) return 0;
|
||||
|
||||
struct stat l;
|
||||
livido_memset( &l, 0, sizeof(struct stat) );
|
||||
if( lstat( path, &l ) < 0 )
|
||||
return 0;
|
||||
|
||||
if( S_ISLNK( l.st_mode ) )
|
||||
{
|
||||
livido_memset(&l,0,sizeof(struct stat));
|
||||
stat( path, &l );
|
||||
}
|
||||
|
||||
if( S_ISDIR( l.st_mode ))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if( S_ISREG( l.st_mode ))
|
||||
{
|
||||
if( is_ttf( path ) )
|
||||
{
|
||||
if( *fontidx < maxfonts )
|
||||
{
|
||||
FT_Face face;
|
||||
if( FT_New_Face( lib, path, 0, &face ) == 0 ) {
|
||||
if( FT_Set_Pixel_Sizes( face, 0, 8 ) == 0 ) {
|
||||
fontlist[ *fontidx ] = strdup(path);
|
||||
*fontidx = *fontidx + 1;
|
||||
}
|
||||
FT_Done_Face( face );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int find_fonts(FT_Library lib, char *path, char **fontlist, int *fontidx, int maxfonts)
|
||||
{
|
||||
struct dirent **files;
|
||||
int n = scandir(path, &files, NULL,alphasort);
|
||||
if(n < 0)
|
||||
return 0;
|
||||
|
||||
char tmp[2048];
|
||||
|
||||
while( n -- )
|
||||
{
|
||||
snprintf( tmp, sizeof(tmp), "%s/%s", path, files[n]->d_name );
|
||||
if( strcmp( files[n]->d_name , "." ) != 0 && strcmp( files[n]->d_name, ".." ) != 0 )
|
||||
{
|
||||
if(find_font_file( lib, tmp, fontlist, fontidx, maxfonts ))
|
||||
find_fonts( lib, tmp,fontlist,fontidx,maxfonts );
|
||||
}
|
||||
free( files[n] );
|
||||
}
|
||||
free(files);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void load_fonts(FT_Library lib,char **fontlist, int *fontidx, int maxfonts)
|
||||
{
|
||||
char *home = getenv("HOME");
|
||||
char path[2048];
|
||||
|
||||
snprintf(path, sizeof(path), "%s/.veejay/fonts", home );
|
||||
find_fonts(lib,path, fontlist, fontidx,maxfonts);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/.fonts", home );
|
||||
find_fonts(lib, path, fontlist, fontidx, maxfonts);
|
||||
|
||||
find_fonts(lib,"/usr/share/fonts/truetype", fontlist, fontidx, maxfonts);
|
||||
find_fonts(lib,"/usr/share/fonts/opentype", fontlist, fontidx, maxfonts);
|
||||
find_fonts(lib,"/usr/local/share/fonts", fontlist, fontidx, maxfonts );
|
||||
}
|
||||
|
||||
static int load_font(lvd_aa_t *s)
|
||||
{
|
||||
if( FT_New_Face(s->library, s->fontfile, 0, &s->face ) )
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int load_glyph(lvd_aa_t *s, uint32_t code, Glyph *glyph)
|
||||
{
|
||||
int err;
|
||||
FT_BitmapGlyph bitmapglyph;
|
||||
|
||||
if (FT_Load_Char(s->face, code, FT_LOAD_DEFAULT)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
glyph->glyph = livido_malloc(sizeof(Glyph));
|
||||
if(!glyph->glyph) {
|
||||
return 1;
|
||||
}
|
||||
glyph->code = code;
|
||||
|
||||
if (FT_Get_Glyph(s->face->glyph, glyph->glyph)) {
|
||||
err = 1;
|
||||
goto glyph_cleanup;
|
||||
}
|
||||
|
||||
if (FT_Glyph_To_Bitmap(glyph->glyph, FT_RENDER_MODE_NORMAL, 0, 1)) {
|
||||
err = 1;
|
||||
goto glyph_cleanup;
|
||||
}
|
||||
|
||||
bitmapglyph = (FT_BitmapGlyph) *glyph->glyph;
|
||||
glyph->bitmap = bitmapglyph->bitmap;
|
||||
glyph->bitmap_left = bitmapglyph->left;
|
||||
glyph->bitmap_top = bitmapglyph->top;
|
||||
|
||||
FT_Glyph_Get_CBox(*glyph->glyph, ft_glyph_bbox_pixels, &glyph->bbox);
|
||||
|
||||
return 0;
|
||||
|
||||
glyph_cleanup:
|
||||
if (glyph->glyph)
|
||||
livido_free(&glyph->glyph);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int init(lvd_aa_t *s, font_param_t *fp)
|
||||
{
|
||||
int err;
|
||||
int i;
|
||||
|
||||
s->fontfile = fp->fontlist[ s->font ];
|
||||
|
||||
if (!s->fontfile) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
err = FT_Init_FreeType(&s->library);
|
||||
|
||||
if (err) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
err = load_font(s);
|
||||
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
err = FT_Set_Pixel_Sizes(s->face, 0, s->fontsize);
|
||||
|
||||
if (err) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
s->glyphs = (Glyph**) livido_malloc(sizeof(Glyph*) * NUM_GLYPHS);
|
||||
|
||||
for (i = 0; i < NUM_GLYPHS; i++) {
|
||||
s->glyphs[i] = (Glyph*) livido_malloc(sizeof(Glyph));
|
||||
err = load_glyph(s, i, s->glyphs[i]);
|
||||
if (!err) {
|
||||
continue;
|
||||
}
|
||||
livido_free(s->glyphs[i]);
|
||||
s->glyphs[i] = NULL;
|
||||
}
|
||||
|
||||
s->initialized = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void deinit(lvd_aa_t *s)
|
||||
{
|
||||
int i;
|
||||
s->aa->driverdata = 0;
|
||||
aa_close(s->aa);
|
||||
|
||||
for( i = 0; i < NUM_GLYPHS; i ++ ) {
|
||||
if(s->glyphs[i] == NULL)
|
||||
continue;
|
||||
if(s->glyphs[i]->glyph) {
|
||||
FT_Done_Glyph(*(s->glyphs[i]->glyph));
|
||||
livido_free(s->glyphs[i]->glyph);
|
||||
}
|
||||
livido_free(s->glyphs[i]);
|
||||
}
|
||||
|
||||
FT_Done_Face(s->face);
|
||||
FT_Done_FreeType(s->library);
|
||||
|
||||
s->initialized = 0;
|
||||
s->aa = NULL;
|
||||
}
|
||||
|
||||
static int vf_driver_init(const struct aa_hardware_params *source, const void *data, struct aa_hardware_params *dest, void **params)
|
||||
{
|
||||
*dest = *source;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void vf_driver_uninit(struct aa_context *context)
|
||||
{
|
||||
}
|
||||
|
||||
static void vf_driver_setattr(aa_context *context, int attr)
|
||||
{
|
||||
}
|
||||
|
||||
static void vf_driver_getsize(aa_context *context, int *width, int *height)
|
||||
{
|
||||
lvd_aa_t *s = context->driverdata;
|
||||
if (s) {
|
||||
*width = s->w;
|
||||
*height = s->h;
|
||||
}
|
||||
}
|
||||
|
||||
static void vf_driver_gotoxy(aa_context *context, int x, int y)
|
||||
{
|
||||
lvd_aa_t *s = context->driverdata;
|
||||
if (s) {
|
||||
s->x = x;
|
||||
s->y = y;
|
||||
}
|
||||
}
|
||||
|
||||
// Average
|
||||
static void draw_glyph_Y(int width, int height, uint8_t *bitbuffer, uint32_t bitmap_rows, uint32_t bitmap_wid, uint32_t bitmap_pitch, uint8_t *Y, int x, int y)
|
||||
{
|
||||
int r,c,p,pos;
|
||||
for (r=0; (r < bitmap_rows) && (r+y < height); r++)
|
||||
{
|
||||
for (c=0; (c < bitmap_wid) && (c+x < width); c++)
|
||||
{
|
||||
pos = r * bitmap_pitch + c;
|
||||
p = (c+x) + ((y+r)*width);
|
||||
|
||||
if( Y[p] < 16 )
|
||||
Y[p] = bitbuffer[pos];
|
||||
else
|
||||
Y[ p ] = ( bitbuffer[pos] + Y[p] ) >> 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Use Y as opacity channel (each pixel equals opacity value)
|
||||
static void draw_glyph_YasAlpha(int width, int height, uint8_t *bitbuffer, uint32_t bitmap_rows, uint32_t bitmap_wid, uint32_t bitmap_pitch, uint8_t *Y, int x, int y, uint8_t *L)
|
||||
{
|
||||
int r,c, p, pos;
|
||||
for (r=0; (r < bitmap_rows) && (r+y < height); r++)
|
||||
{
|
||||
for (c=0; (c < bitmap_wid) && (c+x < width); c++)
|
||||
{
|
||||
pos = r * bitmap_pitch + c;
|
||||
p = (c+x) + ((y+r)*width);
|
||||
|
||||
uint8_t op1 = L[p];
|
||||
uint8_t op0 = 0xff - op1;
|
||||
|
||||
Y[p] = ( op0 * Y[p] + op1 * bitbuffer[pos] ) >> 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Use Y as opacity channel (each pixel equals opacity value) and copy-in chroma channels
|
||||
static void draw_glyph_op(int width, int height, uint8_t *bitbuffer, uint32_t bitmap_rows, uint32_t bitmap_wid, uint32_t bitmap_pitch, uint8_t *Y, uint8_t *U, uint8_t *V, int x, int y, uint8_t *L, uint8_t *L1, uint8_t *L2)
|
||||
{
|
||||
int r,c, p, pos;
|
||||
for (r=0; (r < bitmap_rows) && (r+y < height); r++)
|
||||
{
|
||||
for (c=0; (c < bitmap_wid) && (c+x < width); c++)
|
||||
{
|
||||
pos = r * bitmap_pitch + c;
|
||||
p = (c+x) + ((y+r)*width);
|
||||
|
||||
uint8_t op1 = L[p];
|
||||
uint8_t op0 = 0xff - op1;
|
||||
|
||||
Y[p] = ( op0 * Y[p] + op1 * bitbuffer[pos] ) >> 8;
|
||||
U[ p ] = L1[p];
|
||||
V[ p ] = L2[p];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_glyph(
|
||||
FT_Bitmap *bitmap,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
int height,
|
||||
uint8_t *Y, uint8_t *U, uint8_t *V, int rollover, int mode, uint8_t *buffer[3])
|
||||
{
|
||||
if( x < 0 || x > width ) {
|
||||
if(!rollover)
|
||||
return;
|
||||
|
||||
if( x > width )
|
||||
x = x % width;
|
||||
if( x < 0 )
|
||||
x += width;
|
||||
}
|
||||
if( y < 0 || y > height ) {
|
||||
if(!rollover)
|
||||
return;
|
||||
|
||||
if( y > height )
|
||||
y = y % height;
|
||||
if( y < 0 )
|
||||
y += height;
|
||||
}
|
||||
|
||||
uint8_t *bitbuffer = bitmap->buffer;
|
||||
uint32_t bitmap_rows = bitmap->rows;
|
||||
uint32_t bitmap_wid = bitmap->width;
|
||||
uint32_t bitmap_pitch = bitmap->pitch;
|
||||
|
||||
switch(mode) {
|
||||
case 0:
|
||||
draw_glyph_Y(width,height,bitbuffer,bitmap_rows,bitmap_wid,bitmap_pitch,Y,x,y);
|
||||
break;
|
||||
case 1:
|
||||
draw_glyph_YasAlpha(width,height,bitbuffer,bitmap_rows,bitmap_wid,bitmap_pitch,Y,x,y,buffer[0]);
|
||||
break;
|
||||
case 2:
|
||||
draw_glyph_op(width,height,bitbuffer,bitmap_rows,bitmap_wid,bitmap_pitch,Y,U,V,x,y,buffer[0],buffer[1],buffer[2]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void vf_driver_print(aa_context *context, const char *text)
|
||||
{
|
||||
lvd_aa_t *s = context->driverdata;
|
||||
const char *c = text;
|
||||
Glyph *glyph = NULL;
|
||||
int cx, cy;
|
||||
if (s) {
|
||||
while(*c) {
|
||||
Glyph dummy = { 0 };
|
||||
dummy.code = (uint32_t) *c;
|
||||
|
||||
glyph = s->glyphs[ (dummy.code % 0xff) ];
|
||||
|
||||
if (!glyph) {
|
||||
s->x += 1;
|
||||
c++;
|
||||
continue;
|
||||
}
|
||||
|
||||
cx = (s->x * s->xadvance) + glyph->bitmap_left;
|
||||
cy = (s->y * s->yadvance) - glyph->bitmap_top;
|
||||
|
||||
draw_glyph(
|
||||
&(glyph->bitmap),
|
||||
cx, cy,
|
||||
s->curframe_width, s->curframe_height,
|
||||
s->curframe_data[0],s->curframe_data[1],s->curframe_data[2],
|
||||
s->rollover,
|
||||
s->mode,
|
||||
s->buf
|
||||
);
|
||||
|
||||
s->x += 1;
|
||||
c++;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static struct aa_driver vf_driver = {
|
||||
.shortname = "vf",
|
||||
.name = "video filter driver",
|
||||
.init = vf_driver_init,
|
||||
.uninit = vf_driver_uninit,
|
||||
.setattr = vf_driver_setattr,
|
||||
.getsize = vf_driver_getsize,
|
||||
.print = vf_driver_print,
|
||||
.gotoxy = vf_driver_gotoxy
|
||||
};
|
||||
|
||||
static int config_props_in(lvd_aa_t *s, int w, int h, int density)
|
||||
{
|
||||
if (!s->aa) {
|
||||
s->w = w/density;
|
||||
s->h = h/density;
|
||||
|
||||
s->aa_params.supported = s->aa_flags;
|
||||
s->aa_params.width = s->w;
|
||||
s->aa_params.height = s->h;
|
||||
|
||||
s->aa = aa_init(&vf_driver, &s->aa_params, 0);
|
||||
|
||||
if (!s->aa) {
|
||||
return 1;
|
||||
}
|
||||
s->aa->driverdata = s;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int init_instance( livido_port_t *my_instance )
|
||||
{
|
||||
int w = 0, h = 0;
|
||||
|
||||
lvd_extract_dimensions( my_instance, "out_channels", &w, &h );
|
||||
|
||||
lvd_aa_t *aa = (lvd_aa_t*) livido_malloc( sizeof(lvd_aa_t));
|
||||
if(!aa) {
|
||||
return LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
}
|
||||
|
||||
livido_memset(aa,0,sizeof(lvd_aa_t));
|
||||
|
||||
aa->scale.buf[0] = (uint8_t*) livido_malloc( sizeof(uint8_t) * RUP8( w * h) );
|
||||
if(!aa->scale.buf[0]) {
|
||||
livido_free(aa);
|
||||
return LIVIDO_ERROR_MEMORY_ALLOCATION;
|
||||
}
|
||||
|
||||
aa->scale.flags = SWS_FAST_BILINEAR;
|
||||
aa->scale.w = -1;
|
||||
aa->scale.h = -1;
|
||||
|
||||
aa->fontsize = -1.0;
|
||||
aa->density = -1;
|
||||
aa->font = -1;
|
||||
aa->aa_flags = 0;
|
||||
|
||||
aa->buf[0] = (uint8_t*) livido_malloc (sizeof(uint8_t) * RUP8(w * h * 3 ) );
|
||||
aa->buf[1] = aa->buf[0] + RUP8(w*h);
|
||||
aa->buf[2] = aa->buf[1] + RUP8(w*h);
|
||||
|
||||
livido_property_set( my_instance, "PLUGIN_private", LIVIDO_ATOM_TYPE_VOIDPTR,1, &aa);
|
||||
|
||||
return LIVIDO_NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
livido_deinit_f deinit_instance( livido_port_t *my_instance )
|
||||
{
|
||||
lvd_aa_t *aa = NULL;
|
||||
if( livido_property_get( my_instance, "PLUGIN_private", 0, &aa ) == LIVIDO_NO_ERROR ) {
|
||||
if( aa ) {
|
||||
|
||||
if(aa->initialized)
|
||||
deinit(aa);
|
||||
|
||||
if(aa->scale.buf[0]) {
|
||||
livido_free(aa->scale.buf[0]);
|
||||
}
|
||||
|
||||
if(aa->buf[0]) {
|
||||
livido_free(aa->buf[0]);
|
||||
}
|
||||
|
||||
if(aa->scale.sws) {
|
||||
sws_freeContext( aa->scale.sws );
|
||||
}
|
||||
|
||||
livido_free(aa);
|
||||
aa = NULL;
|
||||
}
|
||||
livido_property_set( my_instance, "PLUGIN_private", LIVIDO_ATOM_TYPE_VOIDPTR, 0, NULL );
|
||||
}
|
||||
return LIVIDO_NO_ERROR;
|
||||
}
|
||||
|
||||
int process_instance( livido_port_t *my_instance, double timecode )
|
||||
{
|
||||
uint8_t *A[4] = {NULL,NULL,NULL,NULL};
|
||||
uint8_t *O[4]= {NULL,NULL,NULL,NULL};
|
||||
|
||||
int palette;
|
||||
int w;
|
||||
int h;
|
||||
|
||||
lvd_aa_t *aa = NULL;
|
||||
livido_property_get( my_instance, "PLUGIN_private", 0, &aa );
|
||||
|
||||
if( aa == NULL )
|
||||
return LIVIDO_ERROR_INTERNAL;
|
||||
|
||||
int error = lvd_extract_channel_values( my_instance, "out_channels", 0, &w,&h, O,&palette );
|
||||
if( error != LIVIDO_NO_ERROR )
|
||||
return LIVIDO_ERROR_NO_OUTPUT_CHANNELS;
|
||||
|
||||
error = lvd_extract_channel_values( my_instance, "in_channels" , 0, &w, &h, A, &palette );
|
||||
if( error != LIVIDO_NO_ERROR )
|
||||
return LIVIDO_ERROR_NO_INPUT_CHANNELS;
|
||||
|
||||
int font = lvd_extract_param_index( my_instance,"in_parameters", 0 );
|
||||
int font_size = lvd_extract_param_index( my_instance,"in_parameters", 1 );
|
||||
int brightness = lvd_extract_param_index( my_instance, "in_parameters", 2 );
|
||||
int contrast = lvd_extract_param_index( my_instance, "in_parameters", 3);
|
||||
int gamma = lvd_extract_param_index( my_instance, "in_parameters", 4);
|
||||
int inversion = lvd_extract_param_index( my_instance, "in_parameters", 5 );
|
||||
int dither = lvd_extract_param_index( my_instance, "in_parameters", 6 );
|
||||
int rollover = lvd_extract_param_index( my_instance, "in_parameters", 7 );
|
||||
int density = lvd_extract_param_index( my_instance, "in_parameters", 8 );
|
||||
int mode = lvd_extract_param_index( my_instance, "in_parameters", 9 );
|
||||
int aaflagmode = lvd_extract_param_index( my_instance, "in_parameters", 10 );
|
||||
|
||||
font_param_t *fp = NULL;
|
||||
livido_port_t *font_port = NULL;
|
||||
if( livido_property_get( my_instance, "in_parameters", 0, &font_port ) != LIVIDO_NO_ERROR )
|
||||
return LIVIDO_ERROR_INTERNAL;
|
||||
if( livido_property_get( font_port, "PLUGIN_param_private", 0, &fp ) != LIVIDO_NO_ERROR )
|
||||
return LIVIDO_ERROR_INTERNAL;
|
||||
|
||||
int re_init = !aa->initialized;
|
||||
|
||||
int aa_flag = AA_NORMAL_MASK | AA_REVERSE_MASK;
|
||||
if( aaflagmode == 1 )
|
||||
aa_flag = AA_NORMAL_MASK | AA_REVERSE_MASK | AA_EXTENDED;
|
||||
|
||||
if( aa_flag != aa->aa_flags ) {
|
||||
aa->aa_flags = aa_flag;
|
||||
re_init = 1;
|
||||
}
|
||||
|
||||
if( density != aa->density ) {
|
||||
aa->density = density;
|
||||
re_init = 1;
|
||||
}
|
||||
|
||||
if( font_size != aa->fontsize ) {
|
||||
aa->fontsize = font_size;
|
||||
re_init = 1;
|
||||
}
|
||||
|
||||
if( font != aa->font ) {
|
||||
aa->font = font;
|
||||
re_init = 1;
|
||||
}
|
||||
|
||||
aa->xadvance = density * 2;
|
||||
aa->yadvance = density * 4;
|
||||
aa->rollover = rollover;
|
||||
aa->mode = mode;
|
||||
|
||||
if(re_init) {
|
||||
if( aa->initialized )
|
||||
deinit(aa);
|
||||
|
||||
if(aa->scale.sws) {
|
||||
sws_freeContext( aa->scale.sws );
|
||||
aa->scale.sws = NULL;
|
||||
}
|
||||
|
||||
if( init(aa, fp) ) {
|
||||
return LIVIDO_ERROR_INTERNAL;
|
||||
}
|
||||
|
||||
if( config_props_in(aa,w,h,density) ) {
|
||||
deinit(aa);
|
||||
return LIVIDO_ERROR_INTERNAL;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t *framebuffer = aa_image(aa->aa);
|
||||
uint8_t *fb[3] = { framebuffer, NULL, NULL };
|
||||
|
||||
if( aa->scale.sws == NULL ) {
|
||||
aa->scale.w = RUP8(w/density);
|
||||
aa->scale.h = RUP8(h/density);
|
||||
aa->scale.sws = sws_getContext( w, h, AV_PIX_FMT_YUV444P, aa->scale.w, aa->scale.h, AV_PIX_FMT_GRAY8, aa->scale.flags,NULL,NULL,NULL);
|
||||
if(aa->scale.sws == NULL)
|
||||
return LIVIDO_ERROR_INTERNAL;
|
||||
}
|
||||
|
||||
int src_strides[3] = { w, w, w };
|
||||
int dst_strides[3] = { aa->scale.w, 0, 0 };
|
||||
|
||||
sws_scale( aa->scale.sws,
|
||||
(const uint8_t * const *)A,
|
||||
src_strides,
|
||||
0,
|
||||
h,
|
||||
fb,
|
||||
dst_strides );
|
||||
|
||||
aa->renderparams.bright = brightness;
|
||||
aa->renderparams.contrast = contrast;
|
||||
aa->renderparams.gamma = (double) gamma * 0.1;
|
||||
aa->renderparams.inversion = inversion;
|
||||
aa->renderparams.dither = dither;
|
||||
|
||||
aa->curframe_data[0] = O[0];
|
||||
aa->curframe_data[1] = O[1];
|
||||
aa->curframe_data[2] = O[2];
|
||||
|
||||
if ( mode == 1 ) {
|
||||
livido_memcpy( aa->buf[0], A[0], w * h );
|
||||
}
|
||||
else if ( mode == 2 ) {
|
||||
livido_memcpy( aa->buf[0], A[0], w * h );
|
||||
livido_memcpy( aa->buf[1], A[1], w * h );
|
||||
livido_memcpy( aa->buf[2], A[2], w * h );
|
||||
}
|
||||
|
||||
livido_memset( O[0], 0, w * h );
|
||||
livido_memset( O[1], 128, w * h );
|
||||
livido_memset( O[2], 128, w * h );
|
||||
|
||||
aa->curframe_width = w;
|
||||
aa->curframe_height = h;
|
||||
aa_render(aa->aa, &aa->renderparams, 0, 0, aa->w, aa->h);
|
||||
aa_flush(aa->aa);
|
||||
|
||||
return LIVIDO_NO_ERROR;
|
||||
}
|
||||
|
||||
static int init_font_param( livido_port_t *port )
|
||||
{
|
||||
font_param_t *fp = (font_param_t*) livido_malloc(sizeof(font_param_t));
|
||||
fp->maxfonts = 1024;
|
||||
fp->fontlist = (char**) livido_malloc(sizeof(char*) * fp->maxfonts );
|
||||
livido_memset(fp->fontlist,0,sizeof(char*) * fp->maxfonts );
|
||||
fp->fontidx = 0;
|
||||
|
||||
FT_Library lib;
|
||||
FT_Init_FreeType(&lib);
|
||||
load_fonts(lib, fp->fontlist, &(fp->fontidx), fp->maxfonts);
|
||||
FT_Done_FreeType(lib);
|
||||
|
||||
livido_property_set( port, "PLUGIN_param_private", LIVIDO_ATOM_TYPE_VOIDPTR,1,&fp );
|
||||
return (fp->fontidx - 1);
|
||||
}
|
||||
|
||||
livido_port_t *livido_setup(livido_setup_t list[], int version)
|
||||
|
||||
{
|
||||
LIVIDO_IMPORT(list);
|
||||
|
||||
livido_port_t *port = NULL;
|
||||
livido_port_t *in_params[11];
|
||||
livido_port_t *in_chans[1];
|
||||
livido_port_t *out_chans[1];
|
||||
livido_port_t *info = NULL;
|
||||
livido_port_t *filter = NULL;
|
||||
|
||||
//@ setup root node, plugin info
|
||||
info = livido_port_new( LIVIDO_PORT_TYPE_PLUGIN_INFO );
|
||||
port = info;
|
||||
|
||||
livido_set_string_value( port, "maintainer", "Niels");
|
||||
livido_set_string_value( port, "version","1");
|
||||
|
||||
filter = livido_port_new( LIVIDO_PORT_TYPE_FILTER_CLASS );
|
||||
livido_set_int_value( filter, "api_version", LIVIDO_API_VERSION );
|
||||
|
||||
//@ setup function pointers
|
||||
livido_set_voidptr_value( filter, "deinit_func", &deinit_instance );
|
||||
livido_set_voidptr_value( filter, "init_func", &init_instance );
|
||||
livido_set_voidptr_value( filter, "process_func", &process_instance );
|
||||
port = filter;
|
||||
|
||||
//@ meta information
|
||||
livido_set_string_value( port, "name", "AsciiArt");
|
||||
livido_set_string_value( port, "description", "AsciiAart with AAlib");
|
||||
livido_set_string_value( port, "author", "Alexander Tumin");
|
||||
|
||||
livido_set_int_value( port, "flags", 0);
|
||||
livido_set_string_value( port, "license", "LGPL2.1");
|
||||
livido_set_int_value( port, "version", 1);
|
||||
|
||||
//@ some palettes veejay-classic uses
|
||||
int palettes0[] = {
|
||||
LIVIDO_PALETTE_YUV444P,
|
||||
0,
|
||||
};
|
||||
|
||||
//@ setup output channel
|
||||
out_chans[0] = livido_port_new( LIVIDO_PORT_TYPE_CHANNEL_TEMPLATE );
|
||||
port = out_chans[0];
|
||||
|
||||
livido_set_string_value( port, "name", "Output Channel");
|
||||
livido_set_int_array( port, "palette_list", 2, palettes0);
|
||||
livido_set_int_value( port, "flags", 0);
|
||||
|
||||
in_chans[0] = livido_port_new( LIVIDO_PORT_TYPE_CHANNEL_TEMPLATE );
|
||||
port = in_chans[0];
|
||||
livido_set_string_value( port, "name", "Input Channel");
|
||||
livido_set_int_array( port, "palette_list", 2, palettes0);
|
||||
livido_set_int_value( port, "flags", 0);
|
||||
|
||||
in_params[0] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[0];
|
||||
|
||||
int num_fonts = init_font_param(port);
|
||||
|
||||
livido_set_string_value(port, "name", "Font" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 0 );
|
||||
livido_set_int_value(port, "min" , 0);
|
||||
livido_set_int_value(port, "max", num_fonts);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Font");
|
||||
|
||||
|
||||
in_params[1] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[1];
|
||||
|
||||
livido_set_string_value(port, "name", "Font Size" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 8 );
|
||||
livido_set_int_value(port, "min" ,4);
|
||||
livido_set_int_value(port, "max", 24);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Font Size");
|
||||
|
||||
in_params[2] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[2];
|
||||
|
||||
livido_set_string_value(port, "name", "Brightness" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
livido_set_int_value(port, "default", 50 );
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 255);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Brightness");
|
||||
|
||||
in_params[3] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[3];
|
||||
|
||||
livido_set_string_value(port, "name", "Contrast" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 64 );
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 255);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Contrast");
|
||||
|
||||
in_params[4] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[4];
|
||||
|
||||
livido_set_string_value(port, "name", "Gamma" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 14);
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 100);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Gamma");
|
||||
|
||||
in_params[5] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[5];
|
||||
|
||||
livido_set_string_value(port, "name", "Inversion" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 0);
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 1);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Inversion");
|
||||
|
||||
in_params[6] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[6];
|
||||
|
||||
livido_set_string_value(port, "name", "Dithering" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 2);
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 3);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Dithering");
|
||||
|
||||
in_params[7] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[7];
|
||||
|
||||
livido_set_string_value(port, "name", "Rollover" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 0);
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 1);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Rollover");
|
||||
|
||||
in_params[8] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[8];
|
||||
|
||||
livido_set_string_value(port, "name", "Density" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 2);
|
||||
livido_set_int_value(port, "min" ,2);
|
||||
livido_set_int_value(port, "max", 4);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Density");
|
||||
|
||||
in_params[9] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[9];
|
||||
|
||||
livido_set_string_value(port, "name", "Mode" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 0);
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 2);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Mode");
|
||||
|
||||
|
||||
in_params[10] = livido_port_new( LIVIDO_PORT_TYPE_PARAMETER_TEMPLATE );
|
||||
port = in_params[10];
|
||||
|
||||
livido_set_string_value(port, "name", "Extended ASCII" );
|
||||
livido_set_string_value(port, "kind", "INDEX" );
|
||||
|
||||
livido_set_int_value(port, "default", 0);
|
||||
livido_set_int_value(port, "min" ,0);
|
||||
livido_set_int_value(port, "max", 1);
|
||||
|
||||
livido_set_string_value( port, "description" ,"Extended ASCII");
|
||||
|
||||
//@ setup the nodes
|
||||
livido_set_portptr_array( filter, "in_parameter_templates", 11, in_params );
|
||||
livido_set_portptr_array( filter, "out_channel_templates", 1, out_chans );
|
||||
livido_set_portptr_array( filter, "in_channel_templates",1, in_chans );
|
||||
|
||||
livido_set_portptr_value(info, "filters", filter);
|
||||
return info;
|
||||
}
|
||||
159
veejay-current/plugin-packs/lvdasciiart/plugins/utils.h
Normal file
159
veejay-current/plugin-packs/lvdasciiart/plugins/utils.h
Normal file
@@ -0,0 +1,159 @@
|
||||
#ifndef LVDUTILSFX
|
||||
#define LVDUTILSFX
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#ifdef STRICT_CHECKING
|
||||
#include <assert.h>
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#ifdef ARCH_X86
|
||||
#define fast_sin(d,x) asm("fsin" : "=t" (d) : "0" (x))
|
||||
#define fast_cos(d,x) asm("fcos" : "=t" (d) : "0" (x))
|
||||
#define fast_sqrt(res,x) asm ("fsqrt" : "=t" (res) : "0" (x))
|
||||
#define sin_cos(si, co, x) asm ("fsincos" : "=t" (co), "=u" (si) : "0" (x))
|
||||
#else
|
||||
#define fast_sin(d,x) d = sin(x)
|
||||
#define fast_cos(d,x) d = cos(x)
|
||||
#define fast_sqrt( res,x ) res = sqrt(x)
|
||||
#define sin_cos(si, co, x) si = sin(x); co = cos(x)
|
||||
|
||||
#endif
|
||||
static inline int myround(float n)
|
||||
{
|
||||
if (n >= 0)
|
||||
return (int)(n + 0.5);
|
||||
else
|
||||
return (int)(n - 0.5);
|
||||
}
|
||||
|
||||
#define _rgb2yuv(r,g,b,y,u,v)\
|
||||
{\
|
||||
float Ey = (0.299 * (float)r) + (0.587 * (float)g) + (0.114 * (float) b);\
|
||||
float Eu = (-0.168736 * (float)r) - (0.331264 * (float)g) + (0.500 * (float)b) + 128.0;\
|
||||
float Ev = (0.500 * (float)r) - (0.418688 * (float)g) - (0.081312 * (float)b)+ 128.0;\
|
||||
y = myround(Ey);\
|
||||
u = myround(Eu);\
|
||||
v = myround(Ev);\
|
||||
if( y > 0xff ) y = 0xff ; else if ( y < 0 ) y = 0;\
|
||||
if( u > 0xff ) u = 0xff ; else if ( u < 0 ) u = 0;\
|
||||
if( v > 0xff ) v = 0xff ; else if ( v < 0 ) v = 0;\
|
||||
}
|
||||
|
||||
|
||||
#ifdef USE_MATRIX_PLACEMENT
|
||||
typedef struct
|
||||
{
|
||||
int w;
|
||||
int h;
|
||||
} matrix_t;
|
||||
|
||||
typedef matrix_t (*matrix_f)(int i, int s, int w, int h);
|
||||
static matrix_t matrix_placementA(int photoindex, int size, int w , int h);
|
||||
static matrix_t matrix_placementB(int photoindex, int size, int w , int h);
|
||||
static matrix_f get_matrix_func(int type);
|
||||
|
||||
static matrix_t matrix_placementA(int photoindex, int size, int w , int h)
|
||||
{
|
||||
matrix_t m;
|
||||
m.w = (photoindex % size) * (w/size);
|
||||
m.h = (photoindex / size) * (h/size);
|
||||
return m;
|
||||
}
|
||||
|
||||
static matrix_t matrix_placementB(int photoindex, int size, int w , int h)
|
||||
{
|
||||
matrix_t m;
|
||||
m.w = (photoindex/size) * (w/size);
|
||||
m.h = (photoindex % size) * (h/size);
|
||||
return m;
|
||||
}
|
||||
|
||||
static matrix_t matrix_placementC(int photoindex, int size, int w , int h)
|
||||
{
|
||||
matrix_t m;
|
||||
int n = size*size-1;
|
||||
m.w = ((n-photoindex) % size) * (w/size);
|
||||
m.h = ((n-photoindex) / size) * (h/size);
|
||||
return m;
|
||||
}
|
||||
|
||||
static matrix_t matrix_placementD(int photoindex, int size, int w , int h)
|
||||
{
|
||||
matrix_t m;
|
||||
int n = size*size-1;
|
||||
m.w = ((n-photoindex) / size) * (w/size);
|
||||
m.h = ((n-photoindex) % size) * (h/size);
|
||||
return m;
|
||||
}
|
||||
|
||||
static matrix_f get_matrix_func(int type)
|
||||
{
|
||||
if(type==0)
|
||||
return &matrix_placementA;
|
||||
if(type==1)
|
||||
return &matrix_placementB;
|
||||
if(type==2)
|
||||
return &matrix_placementC;
|
||||
return &matrix_placementD;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int lvd_extract_param_index( livido_port_t *instance, const char *pname, int n )
|
||||
{
|
||||
int pn = 0;
|
||||
livido_port_t *c = NULL;
|
||||
if( livido_property_get( instance, pname,n, &c ) != LIVIDO_NO_ERROR )
|
||||
return 0;
|
||||
|
||||
if( livido_property_get( c, "value", 0, &pn ) != LIVIDO_NO_ERROR )
|
||||
return 0;
|
||||
|
||||
return pn;
|
||||
}
|
||||
|
||||
static void lvd_extract_dimensions( livido_port_t *instance,const char *name, int *w, int *h )
|
||||
{
|
||||
livido_port_t *channel = NULL;
|
||||
if( livido_property_get( instance, name, 0, &channel ) != LIVIDO_NO_ERROR )
|
||||
return;
|
||||
livido_property_get( channel, "width", 0, w );
|
||||
livido_property_get( channel, "height",0, h );
|
||||
}
|
||||
|
||||
static int lvd_extract_channel_values( livido_port_t *instance,
|
||||
const char *pname,
|
||||
int n,
|
||||
int *w,
|
||||
int *h,
|
||||
uint8_t **pixel_data,
|
||||
int *palette )
|
||||
{
|
||||
livido_port_t *c = NULL;
|
||||
int error = livido_property_get( instance, pname,n, &c );
|
||||
if( error != LIVIDO_NO_ERROR )
|
||||
return error;
|
||||
|
||||
error = livido_property_get( c, "width", 0,w );
|
||||
if( error != LIVIDO_NO_ERROR )
|
||||
return error;
|
||||
error = livido_property_get( c, "height",0,h );
|
||||
if( error != LIVIDO_NO_ERROR )
|
||||
return error;
|
||||
error = livido_property_get( c, "current_palette",0, palette );
|
||||
if( error != LIVIDO_NO_ERROR )
|
||||
return error;
|
||||
|
||||
int i = 0;
|
||||
for( i = 0; i <4 ; i ++ )
|
||||
{
|
||||
error = livido_property_get( c, "pixel_data", i, &(pixel_data[i]));
|
||||
if( error != LIVIDO_NO_ERROR )
|
||||
return error;
|
||||
}
|
||||
return LIVIDO_NO_ERROR;
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user