diff options
61 files changed, 3077 insertions, 9689 deletions
@@ -1,21 +1 @@ -Erik Walthinsen <omega@temple-baptist.com> -Matt Howell <mhowell@users.sourceforge.net> -Brent Bradburn <bbradburn@users.sourceforge.net> -Wim Taymans <wim.taymans@chello.be> -Richard Boulton <richard@tartarus.org> -Zaheer Abbas Merali <zaheerabbas at merali dot org> -David I. Lehn <dlehn@users.sourceforge.net> -Chris Emerson <chris@tartarus.org> -Jens Thiele <karme@unforgettable.com> -Thomas Nyberg <thomas@codefactory.se> -Bastien Nocera <hadess@hadess.net> -Christian Fredrik Kalager Schaller <Uraeus@linuxrising.org> -Thomas Vander Stichele <thomas@apestaart.org> -Andy Wingo <wingo@pobox.com> -Cameron Hutchison <camh@xdna.net> -David Schleef <ds@schleef.org> -Benjamin Otte <in7y118@public.uni-hamburg.de> -Ronald Bultje <rbultje@ronald.bitfreak.net> -Julien MOUTTE <julien@moutte.net> -Jan Schmidt <thaytan@mad.scientist.com> -Arwed v. Merkatz <v.merkatz@gmx.net> +
@@ -1,340 +1,340 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. + GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/COPYING.LIB b/COPYING.LIB index eb685a5..e17b0a8 100644 --- a/COPYING.LIB +++ b/COPYING.LIB @@ -1,481 +1,481 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - 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 Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the 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 a program 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. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - 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, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -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 compile 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) 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. - - c) 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. - - d) 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 source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - 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 to -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 Library 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 - - Appendix: 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 Library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -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! + GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ 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 Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the 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 a program 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.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ 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, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+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 compile 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) 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.
+
+ c) 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.
+
+ d) 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 source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ 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 to
+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 Library 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
+
+ Appendix: 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 Library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+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!
@@ -1,156 +1,156 @@ -2008-04-06 Sebastian Dröge <slomo@circular-chaos.org> - - Patch by: Damien Lespiau <damien dot lespiau at gmail dot com> - - * configure.ac: - Actually build dlls when cross-compiling with mingw32. - Fixes bug #526247. - -2008-03-24 David Schleef <ds@schleef.org> - - * Makefile.am: - * configure.ac: Fix build system for recent changes in m4 - files. Fixed problem building gst/gl/ - -2008-02-23 Tim-Philipp Müller <tim at centricular dot net> - - * gst-libs/gst/gl/gstglbuffer.c: - (gst_gl_buffer_format_from_video_format): - Fix compiler warning if there are video format - enums gstglbuffer doesn't know about yet. - - * gst-libs/gst/gl/gstgldisplay.c: - (gst_gl_display_upload_texture_rectangle), - (gst_gl_display_draw_texture): - Fix printf format for 64-bit integers. - -2008-01-31 David Schleef <ds@schleef.org> - - * configure.ac: - * pkgconfig/Makefile.am: - * pkgconfig/gstreamer-gl-uninstalled.pc.in: - * pkgconfig/gstreamer-gl.pc.in: - * pkgconfig/gstreamer-plugins-gl-uninstalled.pc.in: - * pkgconfig/gstreamer-plugins-gl.pc.in: - Rename pkgconfig files. And install them. - * tests/check/Makefile.am: - * tests/check/generic/states.c: - * tests/check/pipelines/simple-launch-lines.c: - Add some tests copied from -good. - -2008-01-31 Tim-Philipp Müller <tim at centricular dot net> - - * gst-libs/gst/gl/Makefile.am: - The library needs to link against libgstvideo-0.10. - - * gst/gl/Makefile.am: - The plugin does not (I think) need to link against GL or libgstvideo, - since our new gstreamer GL library already does that, but it does - need to link against our brand-new libgstgl-0.10. - -2008-01-31 Tim-Philipp Müller <tim at centricular dot net> - - * configure.ac: - When using the non-pkg-config check, set and export GL_LIBS - correctly. - -2008-01-31 David Schleef <ds@schleef.org> - - * gst/gl/.cvsignore: ingore some files - * gst-libs/gst/Makefile.am: distcheck fixes - * gst/gl/Makefile.am: distcheck fixes - * win32/common/config.h: -good has this in CVS, so we will too. - -2008-01-31 David Schleef <ds@schleef.org> - - * configure.ac: - Readd pre-pkgconfig OpenGL detection, since pkgconfig requires - Mesa from git master. - * gst/gl/glimagesink.c: - * gst/gl/gstopengl.c: - Move debug category initialization to element. - * gst-libs/gst/gl/Makefile.am: - * gst-libs/gst/gl/gstglfilter.c: - * gst-libs/gst/gl/gstglfilter.h: - * gst/gl/gstglfilter.c: - * gst/gl/gstglfilter.h: - Move glfilter to library. - * pkgconfig/gstreamer-plugins-gl.pc.in: - Add gstreamer-base-0.10 as a requirement. - * po/en.po: - Update. - -2008-01-18 Tim-Philipp Müller <tim at centricular dot net> - - * configure.ac: - * docs/Makefile.am: - * gst-libs/Makefile.am: - * gst-libs/gst/gl/Makefile.am: - * gst/gl/Makefile.am: - * tests/Makefile.am: - Fix compilation in uninstalled setup and some - distcheck-y bits (not all though). - -2008-01-17 David Schleef <ds@schleef.org> - - Add some files to make project compile. - * gst-libs/gst/gettext.h: - * gst-libs/gst/gst-i18n-plugin.h: - * po/.cvsignore: - * po/Makevars: - * po/POTFILES.in: - * po/en.po: - -2008-01-17 David Schleef <ds@schleef.org> - - Fixes to make project compile. Probably still doesn't work. - * configure.ac: - * gst-libs/gst/Makefile.am: - * gst-libs/gst/gl/Makefile.am: - * gst/Makefile.am: - * gst/gl/Makefile.am: - * gst/gl/gstgltestsrc.c: - * po/LINGUAS: - * win32/MANIFEST: - -2008-01-17 David Schleef <ds@schleef.org> - - Add project infrastructure. Not complete, doesn't work. - * .cvsignore: - * AUTHORS: - * COPYING: - * COPYING.LIB: - * INSTALL: - * Makefile.am: - * NEWS: - * README: - * RELEASE: - * REQUIREMENTS: - * autogen.sh: - * configure.ac: - * docs/.cvsignore: - * docs/Makefile.am: - * docs/libs/Makefile.am: - * docs/plugins/Makefile.am: - * docs/version.entities.in: - * ext/Makefile.am: - * gst-libs/Makefile.am: - * gst-libs/gst/Makefile.am: - * gst-libs/gst/gl/Makefile.am: - * gst-plugins-gl.doap: - * gst-plugins-gl.spec.in: - * gst/Makefile.am: - * m4/.cvsignore: - * m4/Makefile.am: - * pkgconfig/.cvsignore: - * pkgconfig/Makefile.am: - * pkgconfig/gstreamer-plugins-gl-uninstalled.pc.in: - * pkgconfig/gstreamer-plugins-gl.pc.in: - * sys/Makefile.am: - * tests/Makefile.am: - * tests/check/Makefile.am: - * tests/examples/Makefile.am: - * tests/icles/Makefile.am: - * tools/Makefile.am: - * win32/common/config.h.in: - +2008-04-06 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Patch by: Damien Lespiau <damien dot lespiau at gmail dot com>
+
+ * configure.ac:
+ Actually build dlls when cross-compiling with mingw32.
+ Fixes bug #526247.
+
+2008-03-24 David Schleef <ds@schleef.org>
+
+ * Makefile.am:
+ * configure.ac: Fix build system for recent changes in m4
+ files. Fixed problem building gst/gl/
+
+2008-02-23 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst-libs/gst/gl/gstglbuffer.c:
+ (gst_gl_buffer_format_from_video_format):
+ Fix compiler warning if there are video format
+ enums gstglbuffer doesn't know about yet.
+
+ * gst-libs/gst/gl/gstgldisplay.c:
+ (gst_gl_display_upload_texture_rectangle),
+ (gst_gl_display_draw_texture):
+ Fix printf format for 64-bit integers.
+
+2008-01-31 David Schleef <ds@schleef.org>
+
+ * configure.ac:
+ * pkgconfig/Makefile.am:
+ * pkgconfig/gstreamer-gl-uninstalled.pc.in:
+ * pkgconfig/gstreamer-gl.pc.in:
+ * pkgconfig/gstreamer-plugins-gl-uninstalled.pc.in:
+ * pkgconfig/gstreamer-plugins-gl.pc.in:
+ Rename pkgconfig files. And install them.
+ * tests/check/Makefile.am:
+ * tests/check/generic/states.c:
+ * tests/check/pipelines/simple-launch-lines.c:
+ Add some tests copied from -good.
+
+2008-01-31 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst-libs/gst/gl/Makefile.am:
+ The library needs to link against libgstvideo-0.10.
+
+ * gst/gl/Makefile.am:
+ The plugin does not (I think) need to link against GL or libgstvideo,
+ since our new gstreamer GL library already does that, but it does
+ need to link against our brand-new libgstgl-0.10.
+
+2008-01-31 Tim-Philipp Müller <tim at centricular dot net>
+
+ * configure.ac:
+ When using the non-pkg-config check, set and export GL_LIBS
+ correctly.
+
+2008-01-31 David Schleef <ds@schleef.org>
+
+ * gst/gl/.cvsignore: ingore some files
+ * gst-libs/gst/Makefile.am: distcheck fixes
+ * gst/gl/Makefile.am: distcheck fixes
+ * win32/common/config.h: -good has this in CVS, so we will too.
+
+2008-01-31 David Schleef <ds@schleef.org>
+
+ * configure.ac:
+ Readd pre-pkgconfig OpenGL detection, since pkgconfig requires
+ Mesa from git master.
+ * gst/gl/glimagesink.c:
+ * gst/gl/gstopengl.c:
+ Move debug category initialization to element.
+ * gst-libs/gst/gl/Makefile.am:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglfilter.h:
+ * gst/gl/gstglfilter.c:
+ * gst/gl/gstglfilter.h:
+ Move glfilter to library.
+ * pkgconfig/gstreamer-plugins-gl.pc.in:
+ Add gstreamer-base-0.10 as a requirement.
+ * po/en.po:
+ Update.
+
+2008-01-18 Tim-Philipp Müller <tim at centricular dot net>
+
+ * configure.ac:
+ * docs/Makefile.am:
+ * gst-libs/Makefile.am:
+ * gst-libs/gst/gl/Makefile.am:
+ * gst/gl/Makefile.am:
+ * tests/Makefile.am:
+ Fix compilation in uninstalled setup and some
+ distcheck-y bits (not all though).
+
+2008-01-17 David Schleef <ds@schleef.org>
+
+ Add some files to make project compile.
+ * gst-libs/gst/gettext.h:
+ * gst-libs/gst/gst-i18n-plugin.h:
+ * po/.cvsignore:
+ * po/Makevars:
+ * po/POTFILES.in:
+ * po/en.po:
+
+2008-01-17 David Schleef <ds@schleef.org>
+
+ Fixes to make project compile. Probably still doesn't work.
+ * configure.ac:
+ * gst-libs/gst/Makefile.am:
+ * gst-libs/gst/gl/Makefile.am:
+ * gst/Makefile.am:
+ * gst/gl/Makefile.am:
+ * gst/gl/gstgltestsrc.c:
+ * po/LINGUAS:
+ * win32/MANIFEST:
+
+2008-01-17 David Schleef <ds@schleef.org>
+
+ Add project infrastructure. Not complete, doesn't work.
+ * .cvsignore:
+ * AUTHORS:
+ * COPYING:
+ * COPYING.LIB:
+ * INSTALL:
+ * Makefile.am:
+ * NEWS:
+ * README:
+ * RELEASE:
+ * REQUIREMENTS:
+ * autogen.sh:
+ * configure.ac:
+ * docs/.cvsignore:
+ * docs/Makefile.am:
+ * docs/libs/Makefile.am:
+ * docs/plugins/Makefile.am:
+ * docs/version.entities.in:
+ * ext/Makefile.am:
+ * gst-libs/Makefile.am:
+ * gst-libs/gst/Makefile.am:
+ * gst-libs/gst/gl/Makefile.am:
+ * gst-plugins-gl.doap:
+ * gst-plugins-gl.spec.in:
+ * gst/Makefile.am:
+ * m4/.cvsignore:
+ * m4/Makefile.am:
+ * pkgconfig/.cvsignore:
+ * pkgconfig/Makefile.am:
+ * pkgconfig/gstreamer-plugins-gl-uninstalled.pc.in:
+ * pkgconfig/gstreamer-plugins-gl.pc.in:
+ * sys/Makefile.am:
+ * tests/Makefile.am:
+ * tests/check/Makefile.am:
+ * tests/examples/Makefile.am:
+ * tests/icles/Makefile.am:
+ * tools/Makefile.am:
+ * win32/common/config.h.in:
+
@@ -1,236 +1,236 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free -Software Foundation, Inc. - -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. - -Basic Installation -================== - -These are generic installation instructions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. (Caching is -disabled by default to prevent problems with accidental use of stale -cache files.) - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You only need -`configure.ac' if you want to change it or regenerate `configure' using -a newer version of `autoconf'. - -The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. If you're - using `csh' on an old version of System V, you might need to type - `sh ./configure' instead to prevent `csh' from trying to execute - `configure' itself. - - Running `configure' takes awhile. While running, it prints some - messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package. - - 4. Type `make install' to install the programs and any data files and - documentation. - - 5. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - -Compilers and Options -===================== - -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - -You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you must use a version of `make' that -supports the `VPATH' variable, such as GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. - - If you have to use a `make' that does not support the `VPATH' -variable, you have to compile the package for one architecture at a -time in the source code directory. After you have installed the -package for one architecture, use `make distclean' before reconfiguring -for another architecture. - -Installation Names -================== - -By default, `make install' 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'. - - 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. - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - -Specifying the System Type -========================== - -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the 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). Here is a another example: - - /bin/bash ./configure CONFIG_SHELL=/bin/bash - -Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent -configuration-related scripts to be executed by `/bin/bash'. - -`configure' Invocation -====================== - -`configure' recognizes the following options to control how it operates. - -`--help' -`-h' - Print a summary of the options to `configure', and exit. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - +Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about. Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory. After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' 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'.
+
+ 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.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the 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). Here is a another example:
+
+ /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+ Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am index e5ab0c0..a678bf6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,62 +1,62 @@ -DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc - -SUBDIRS = \ - gst-libs \ - gst sys ext \ - tools \ - tests \ - docs \ - po \ - common \ - m4 \ - pkgconfig - -DIST_SUBDIRS = \ - docs \ - gst-libs \ - gst sys ext \ - tools \ - tests \ - po \ - common \ - m4 \ - pkgconfig - -# include before EXTRA_DIST for win32 assignment -include $(top_srcdir)/common/win32.mak - -EXTRA_DIST = \ - gst-plugins-gl.spec depcomp \ - AUTHORS COPYING COPYING.LIB NEWS README RELEASE REQUIREMENTS \ - ChangeLog gst-plugins-gl.doap autogen.sh $(win32) - -DISTCLEANFILES = _stdint.h - -ACLOCAL_AMFLAGS = -I m4 -I common/m4 - -include $(top_srcdir)/common/release.mak -include $(top_srcdir)/common/po.mak - -check-valgrind: - cd tests/check && make check-valgrind - -if HAVE_GST_CHECK -check-torture: - cd tests/check && make torture -else -check-torture: - true -endif - -WIN32_COPY = \ - $(top_builddir)/gst-libs/gst/*/*-enumtypes.[ch] \ - $(top_builddir)/_stdint.h - -win32-update: - for f in $(WIN32_COPY); do cp $$f win32/common;done - -include $(top_srcdir)/common/coverage/lcov.mak - -check: check-exports - - +DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
+
+SUBDIRS = \
+ gst-libs \
+ gst sys ext \
+ tools \
+ tests \
+ docs \
+ po \
+ common \
+ m4 \
+ pkgconfig
+
+DIST_SUBDIRS = \
+ docs \
+ gst-libs \
+ gst sys ext \
+ tools \
+ tests \
+ po \
+ common \
+ m4 \
+ pkgconfig
+
+# include before EXTRA_DIST for win32 assignment
+include $(top_srcdir)/common/win32.mak
+
+EXTRA_DIST = \
+ gst-plugins-gl.spec depcomp \
+ AUTHORS COPYING COPYING.LIB NEWS README RELEASE REQUIREMENTS \
+ ChangeLog gst-plugins-gl.doap autogen.sh $(win32)
+
+DISTCLEANFILES = _stdint.h
+
+ACLOCAL_AMFLAGS = -I m4 -I common/m4
+
+include $(top_srcdir)/common/release.mak
+include $(top_srcdir)/common/po.mak
+
+check-valgrind:
+ cd tests/check && make check-valgrind
+
+if HAVE_GST_CHECK
+check-torture:
+ cd tests/check && make torture
+else
+check-torture:
+ true
+endif
+
+WIN32_COPY = \
+ $(top_builddir)/gst-libs/gst/*/*-enumtypes.[ch] \
+ $(top_builddir)/_stdint.h
+
+win32-update:
+ for f in $(WIN32_COPY); do cp $$f win32/common;done
+
+include $(top_srcdir)/common/coverage/lcov.mak
+
+check: check-exports
+
+
@@ -1,700 +1,13 @@ -This is GStreamer Base Plug-ins 0.10.15, "No need to argue" - -Please note that decodebin2 API included in this release is still -considered unstable and WILL change in future releases. At this stage, only -developers or early adopters should consider using the decodebin2 API embodied -in its signals and properties. - -Changes since 0.10.14: - - * RTP/RTSP/RTCP/SDP support improved - * New FFT support library libgstfft, based on Kiss FFT - * New formats supported in volume and audiotestsrc - * Fixes in audiorate and videorate - * Audio capture fixes - * Playbin and decodebin fixes - * New tagdemux base class for ID3/APE style tag readers - * Fix a nasty crash in the X sinks on shutdown - * New tags supported - * Add support for multichannel WAV files. - * Preserve channel layout information when up/down-mixing. - * Many bug-fixes and improvements - -Bugs fixed since 0.10.14: - - * 475395 : decodebin2 leaks request-pads - * 475451 : [decodebin2] leaks ghostpad - * 378770 : [xvimagesink] race condition in event thread? - * 407282 : [decodebin2] autoplug-sort signal has GList ** parameter - * 430677 : [audioconvert] does not preserve channel positions when f... - * 442654 : [volume] controller bypassed by default - * 445529 : [volume] support for 24/32-bit audio/x-raw-int - * 446766 : return code for gst_base_rtp_payload_audio_handle_event() - * 451970 : Subparse requires HTML parser - * 453650 : [audiobasesrc] two alsasrcs do not work in one pipeline - * 459334 : [textoverlay] expose pango line alignment property - * 459585 : [basertpdepayload] api without namespace - * 460422 : [audiotestsrc] Add support for float and double output - * 462805 : [alsa] compilation fails with gcc 4.2 - * 462979 : Add 'silent' property to GstTimeOverlay - * 463215 : [audioconvert] compile errors - * 464320 : [PATCH] gst-plugins-base-0.14 does not build for win32 - * 464666 : [playbin] QT trailer hangs in preroll with decodebin2 - * 464690 : Add connection-speed property to uridecodebin element - * 465015 : [playbin] Not removed probes causes deadlocks in streamin... - * 465028 : some warnings with mingw - * 467667 : GST_FRAMES_TO_CLOCK_TIME() and GST_CLOCK_TIME_TO_FRAMES()... - * 468129 : [basertpaudiopayload] event handler returns the wrong value - * 468619 : New library gstfft: FFT library for integer and float typ... - * 470456 : [API] add gst_missing_*_installer_detail_new() - * 470766 : [ssaparse] line breaks in SSA subtitle parser - * 471067 : Make the SDP code useable for generating SDP descriptions - * 471194 : [rtpbuffer] RTP headers are wrong for win32 - * 473097 : [baseaudiosink] gstreamer-properties hangs when testing s... - * 474384 : gstrtsp-enumtypes.c and .h needed for win32 - * 474880 : [xvimagesink] [ximagesink] leaking buffer caps reference - * 475731 : rtspconnection is able to read incomplete messages - * 483620 : All Rtp buffers are discarded -- gst_rtp_buffer_get_payl... - * 484989 : memleak, not unrefed caps for gstbasertppayload.c - * 489010 : Please change default channel order for WAVE_EXT-less .wa... - * 491722 : [playbin] regression: crash with external subtitles - * 492098 : [GstFFT] Broken scaling - * 492114 : Build issues on Windows/MSVC - * 492306 : compilation errors with MinGW - * 492813 : Missing symbols in libgstrtp.def - * 493986 : Build issues on Windows (missing symbols) - * 494346 : pre-release vs6 patch - * 496548 : Including malloc.h breaks macos build - * 496724 : DSW file references non-existent DSP files - * 464079 : audiotestsrc doesn't respond to conversion queries properly - * 442065 : floatcast.h includes config.h and might break other apps - * 466717 : gst_event_new_new_segment_full:assertion `start < = stop' ... - * 485753 : Decodebin2 deadlocks when nulling pipeline during typefind - * 464028 : Move connection-speed from playbin to playbasebin - -API added since 0.10.14: - - * GstTagDemux base class for simple tag demuxers - * GstBaseAudioSrc::provide-clock property - * gst_rtcp_ntp_to_unix() - * gst_rtcp_unix_to_ntp() - * gst_rtp_buffer_get_header_len() - * gst_rtp_buffer_get_extension_data() - * gst_rtp_buffer_compare_seqnum() - * gst_rtp_buffer_ext_timestamp() - * gst_rtcp_packet_sdes_copy_entry() - * gst_install_plugins_supported() - * gst_missing_*_installer_detail_new() convenience API - * gst_rtsp_connection_poll() - * GstTextOverlay::line-alignment property - -Changes since 0.10.13: - - * Audio dither and noise-shaping when reducing bit-depth - * RTSP and SDP helper libraries added - * Experimental buffering element "queue2" now supports pull-mode - and file-based buffering. - * Support for more 32-bit video pixel layouts - * Various fixes and improvements - -Bugs fixed since 0.10.13: - - * 380625 : [x*imagesink] add 'handle-expose' property - * 385527 : oggmux sometimes gets DELTA flag on output wrong near start - * 402076 : videoscale 4-tap method broken for downscaling - * 437169 : [xvimagesink] add property to disable Xv double-buffering - * 441264 : queue2 support to do buffering on a file - * 442553 : [v4lsrc] doesn't output segments in GST_FORMAT_TIME - * 442557 : [videorate] doesn't handle latency queries - * 442944 : Audiotestsrc can overflow on seeks - * 444523 : [queue2] Pull mode support - * 444630 : Compilation error with fsseko (from gstqueue2.c) -- unabl... - * 445505 : [queue2] It does not work in pull mode with oggdemux - * 446551 : [queue2] Buffering is not working properly if it is set t... - * 446572 : [queue2] Division by zero - * 446972 : warning when compiling gstoggdemux.c - * 449156 : Regression in CVS for decodebin2 - * 450875 : Missing files in po/POTFILES.in - * 451707 : [tag] UTF-8 in ID3v1 tag not correctly decoded - * 451908 : [ffmpegcolorspace] regression: doesn't accept GST_VIDEO_C... - * 454264 : Playbin fails to " play " image url after a movie url - * 456656 : [API] Addition of audio buffer clipping function to gstaudio - * 460978 : gst_audio_buffer_clip outputs warnings - * 152864 : [PATCH] GstAlsaMixer doesn't support signals - * 360246 : [audioconvert] Optionally apply dithering - * 394061 : Add support for Subviewer subtitles - * 420326 : Base payloader class has wrong property types and ranges - * 451145 : [vorbisdec] errors out on 0-sized packets - * 459204 : [PATCH] [playbin] gst_play_base_bin_get_streaminfo_value_... - -API added since 0.10.13: - - * RTSP and SDP libraries added - * gst_rtsp_base64_decode_ip - * Add buffer clipping function gst_audio_buffer_clip for raw audio - buffers. Fixes #456656. - * gst_mixer_get_mixer_flags - * gst_mixer_message_parse_mute_toggled - * gst_mixer_message_parse_record_toggled - * gst_mixer_message_parse_volume_changed - * gst_mixer_message_parse_option_changed - * GstMixerMessageType - * GstMixerFlags - -Changes since 0.10.12: - * Many fixes and improvements - * RTP and RTCP support improved - -Bugs fixed since 0.10.12: - - * 339838 : [audioconvert] support floats with non-native endianness - * 393975 : closing x/xvimagesink window crashes gst-launch - * 405072 : [API] add gst_tag_freeform_string_to_utf8() - * 413799 : [subparse] add support for MPL2 format - * 414645 : GstMixerTrack should make untranslated label available - * 420079 : [audioconvert] Uses biased rounding which results in dist... - * 420578 : [subparse] add more colour map in sami parser - * 421834 : videorate breaks on dimension changes - * 423051 : Vorbis tags of type double use locale-dependent formatting - * 423055 : Verify ReplayGain vorbistag processing in libs/tag testsuite - * 425455 : Decodebin2 leaks pads - * 426250 : GstPlayBaseBin leaks streaminfo objects - * 428187 : Rtp base depayloader class doesn't send new_segment after... - * 431672 : gst_base_rtp_audio_payload_push() should take object of i... - * 432362 : [ximagesink] doesn't build if XShm is not available - * 432755 : [videorate] leaks buffer if flow != OK - * 432984 : [baseaudiosrc] misleading warning message when dropping s... - * 433888 : [theoradec] does not generate a perfect stream - * 436562 : Theoradec doesn't work well with gnonlin - * 438840 : [theoradec] does not compile with old version of libtheora - * 440997 : [gstriff] Doesn't handle width!=depth files with audio/x-... - * 441295 : audioconvert doesn't build on VS6 - * 442024 : regression in playbin buffering - * 350299 : [playbin] " Internal data flow error " opening movie with s... - * 410039 : totem crashed with SIGSEGV in new_decoded_pad_full() - * 340842 : do latency calculation for live sources - * 341078 : RB does not play beyond initially downloaded podcast file - * 414496 : [id3demux, id3v2mux] Add support for GST_TAG_MUSICBRAINZ_... - -API additions since 0.10.12: - - * add gst_tag_freeform_string_to_utf8() - * GstRTPBuffer::gst_rtp_buffer_default_clock_rate() - * GstBaseAudioSink::slave-method property - * add "min-ptime" property to RTP base audio payloader - * gst_base_rtp_audio_payload_push() - * gst_base_rtp_audio_payload_get_adapter() - * GstMixerTrack::untranslated-label property - -Changes since 0.10.11: - - * New API for on-demand plugin installation - * Xv thread-safety and configuration enhancements - * decodebin2 improvements - * Support more raw audio format conversions - * Improvements in Ogg support - * AudioFilter base class ported to 0.10 - * Fixes for subtitles - * Latency/live-playback support for Alsa - * Lots of bug fixes and improvements - -Bugs fixed since 0.10.11: - - * 398721 : No video in .ogm files with decodebin2 - * 339837 : [audioconvert] support for 64-bit float audio - * 341524 : [decodebin] can't handle decoders with always src pads wi... - * 352069 : Add de.po German translation - * 363379 : [oggmux] doesn't detect EOS on all sinkpads - * 378436 : [oggdemux] rhythmbox crash on fast clicking on rating in ... - * 380342 : Totem does not play mp3 files when lyrics are present - * 383195 : [cddabasesrc,basertpaudiopayload] compile errors with gcc... - * 383198 : totem crashed to gst_xvimagesink_update_colorbalance - * 384008 : [xvimagesink] accesses - > xwindow outside locks - * 384060 : gst_xoverlay_set_xwindow_id() causing lockups with x(v)im... - * 387138 : x input events processing in sinks with xoverlay interfac... - * 390063 : Documentation typo - * 390076 : add xv adaptor and port properties in xvimagesink element. - * 391365 : [oggdemux] internal stream error on OggFlac - * 392070 : [vorbis] GST_TAG_LOCATION not mapped - * 392393 : [API] add libgstbaseutils library for missing plugins mes... - * 396042 : mpeg4 video typefinder loops endlessly on quicktime redirect - * 396835 : audioconvert/audioresample combination causing buffer of ... - * 397673 : [patch] XIOError caught in x[v]imagesink.c - * 397810 : [typefinding] .vob file: could not determine type of stream - * 398110 : [theoraenc] GLib failed to allocate 3080991032 bytes on g... - * 399340 : Crash in the oggdemux plugin when trying to play a specia... - * 401029 : [playbin] rapidly changing visualisation freezes - * 401072 : Move libgimme-codec helper functions to GStreamer - * 402505 : visualisations don't work for some samplerates - * 407811 : decodebin2 hang on HD clip - * 409683 : Crash with Decodebin2 - * 410396 : not reading " DATE " tags from Flac files - * 410963 : Fails to build with -z defs - * 357503 : [suparse] wrong timing with microdvd subtitles - * 393310 : [pango] localtime_r does not exist in MinGW - * 397207 : Test failure w/ HP-UX 11.11 & native compiler - * 399948 : [textoverlay] leaks upstream events if textpad unlinked - * 403963 : GstAudioFilter base class broken - * 404512 : [videoscale] floating point exception on 1x1 video - * 405020 : [alsa] probing the device-name doesn't seem to work corre... - * 408278 : [videorate] memory leak - * 410772 : Crash copying a GstNetBuffer - * 401118 : [visual] error if width not a multiple of 4 - * 405451 : [alsasink] deadlocks when disconnecting USB Sounddevice - -API additions since 0.10.11: - - * GstAudioFilter - * GST_VIDEO_SINK_CAST() - * gst_pb_utils_add_codec_description_to_tag_list() - * gst_pb_utils_get_codec_description() - * gst_pb_utils_get_source_description() - * gst_pb_utils_get_sink_description() - * gst_pb_utils_get_decoder_description() - * gst_pb_utils_get_encoder_description() - * gst_pb_utils_get_element_description() - * gst_pb_utils_init() - * gst_install_plugins_context_new() - * gst_install_plugins_context_set_xid() - * gst_install_plugins_context_free() - * gst_install_plugins_async() - * gst_install_plugins_sync() - * gst_install_plugins_return_get_name() - * gst_install_plugins_installation_in_progress() - * gst_missing_uri_source_message_new() - * gst_missing_uri_sink_message_new - * gst_missing_element_message_new - * gst_missing_decoder_message_new - * gst_missing_encoder_message_new - * gst_missing_plugin_message_get_installer_detail - * gst_missing_plugin_message_get_description - * gst_is_missing_plugin_message - -Bugs fixed since 0.10.10: - - * 360552 : [riff] [avi] extracts non-UTF8 metadata - * 365501 : [x/xvimagesink] race condition when creating first image ... - * 339366 : [playbin] hangs if suburi file type cannot be determined - * 355914 : libvisual causes xvimagesink: assertion `GST_CAPS_REFCOU... - * 363118 : gst_riff_create_video_caps() should also store variant in... - * 363607 : xvimagesink xwindow_draw_border() slowness - * 336301 : [playbin] can't handle RTSP source - * 337026 : oggmux doesn't set EOS properly - * 337031 : vorbisdec outputs too much data - * 340049 : New BaseRTPAudioPayloader class to -base - * 348264 : Theora encoding, Ogg muxing don't handle discontinuities - * 354773 : xvimage assumes that XV_COLORKEY can be set in RGB888 format - * 355917 : libvisual plugin is broken - * 355935 : multifdsink doesn't allow setting maximums (soft, hard) i... - * 357038 : [ffmpegcolorspace] RGBA handling broken - * 357215 : [playbin] buffering notification not quite right yet - * 357289 : [riff] riff parser can't detect aac audio stream - * 357404 : [playbin] Linking can fail silently - * 357531 : [subparse] problem if markup is not closed - * 357577 : [playbin] regression: buffering still images broken - * 357591 : Avoid compiler warning with uclibc and -Werror - * 357613 : XvStopVideo in xvimagesink - * 357800 : [libvisual] doesn't pass audio data to libvisual 0.4.0 co... - * 359580 : tcpserversink and dataprotocol assert for multipart streams - * 361095 : Fixes compiling with forte: warning clean up (part 3) - * 361456 : [basertppayload] Memory leak - * 361634 : sink- > ringbuffer NULL in BaseAudioSink's setcaps() - * 361984 : [subparse] doesn't accept .srt file that doesn't start wi... - * 366334 : [PATCH] Windows vs8 fixes - * 368273 : Using the remove signal on multifdsink is not threadsafe - * 368310 : include file gstbasertpaudiopayload.h not included for r... - * 369482 : [typefind] MPEG system streams get recognized as mp3 files - * 370092 : [PATCH] Decodebin v2 : Implementation - * 377183 : regression: no eos when playing ogg vorbis files - * 381219 : bad debugging code left in audiorate - * 382223 : [decodebin] more delayed linking - * 382269 : Typefind detects mpeg video clip as audio/mpeg - * 335635 : Add an Ogg/Vorbis retagging element - * 341681 : [textoverlay] flickering with continuously timestamped text - * 342228 : [alsa] Recognize " Front " as a Master channel - * 357330 : [subparse] some sami parser minor but enhanced patch - * 357532 : [gsttag] vorbistag doesn't handle dates that include time... - * 359237 : [typefinding] doesn't recognize XML files shorter than 25... - * 362845 : [subparse] add support for tmplayer format - * 357977 : [videorate] new segment start is not respected - * 364812 : [PATCH] oggmux release pad does not remove pad - * 364856 : pngenc stride problems - * 372507 : Mac build fixes - -API added since 0.10.10: - - * playbin::queue-min-threshold property. - * GstVideoOrientation interface - * gst_base_rtp_depayload_push_ts - * gst_base_rtp_depayload_push - * Add dropped_buffers to multifdsink's get-stats GValueArray - * gst_ring_buffer_commit_full - -Changes since 0.10.9: - - * New elements: gdppay, gdpdepay - -Bugs fixed since 0.10.9: - - * 343787 : The adder cannot handle when multiple elements tries to l... - * 336075 : ALSA emu10k1 mixer tracks are wrongly classified as playb... - * 349105 : crash with playbin and resizing screen - * 342494 : [v4l] Query " device-name " even if device is not open - * 342680 : [adder] seeking with multiple ogg files fails to work - * 345188 : [alsa] can't handle more than 8 channels - * 347091 : converting vorbis comments to GstTagLists is lossy - * 348157 : Changed " Change Device " menu behaviour in gnome-volume-co... - * 348916 : [typefind] add multipart/x-mixed-replace typefinder - * 350157 : [riff] riff parser can't detect dts audio stream - * 350655 : [oggdemux] should process seeking queries - * 350900 : [adder] should not clamp floating point values - * 351426 : API: add gst_tag_parse_extended_comment - * 351502 : g_value_set_string leaks - * 351742 : [vorbisenc] discontinuity detection too sensitive, might ... - * 353658 : [videotestsrc] doesn't round strides correctly for YVYU - * 354594 : multifdsink doesn't work reliably with sync-method = 'nex... - * 351790 : [ogmparse] crash parsing video stream on x86-64 - * 140139 : [avidemux] can't play broken avi with ogg (not vorbis) au... - * 347783 : [PLUGIN-MOVE] GDP elements should be moved - * 347918 : Internal data flow error in udpsrc - * 349656 : jitterbuffer in GstBaseRtp fails to handle rtp seqnum rol... - * 350784 : element alsamixer doesn't respect asoundrc - * 351308 : [netbuffer] build fails with gkt-doc critical warnings - * 353234 : audiorate preserves DISCONT on buffers - * 353912 : Add cmml caps to oggmux - -API added since 0.10.9: - - * gst_rtp_buffer_get_payload_subbuffer() - * gst_tag_parse_extended_comment() - * GstPlayBin::connection-speed - * GstTheoraParse::synchronization-points - * GST_AUDIO_CHANNEL_POSITION_NONE - -Changes since 0.10.8: - - * Parallel installability with 0.8.x series - * Threadsafe design and API - * Subtitle fixes - * Support for images in tags - * Playback improvements - * Gnomevfssrc now supports burn:// uris - * Videoscale now supports more RGBA formats - * Multifdsink improvements - * Testsuite can now generate coverage information - -Bugs fixed since 0.10.8: - - * 347296 : Problems with clocks on alsasrc hangs the application - * 347295 : [vorbisdec] Pushes before being initialized - * 329798 : [playbin] doesn't always give correct error message for m... - * 342085 : [alsasink] doesn't set buffer-time correctly - * 342789 : [audioresample] doesn't clear state when stopped, causing... - * 343303 : [subparse] workaround for bad entities in sami parser - * 343385 : [gnomevfs] add support for burn:// URIs - * 343500 : [riff] gst_riff_parse_strf_vids() can't parse extra data. - * 343699 : oggmux leaks - * 344503 : [subparse] parse font face property in sami parser. - * 345131 : [PATCH] videoscale support for 32-bit RGB-formats - * 345206 : [textoverlay] crash with non-UTF8 input - * 345225 : [theoradec] Clipping for exact seeking - * 345641 : [API] [libgsttag] add enums for image tag type - * 345879 : [riff] won't play a .wmv file with WMVA video stream - * 346581 : [typefinding] recognise text/html - * 347221 : [audioconvert] channel remapping does not work right - * 347304 : Massive leaks with xvimagesink - * 346527 : alsasrc get_range does not respect requested size - -Changes since 0.10.7: - - * alsasink probing fixes - * xvimagesink error reporting fixes - * subtitle fixes - * adder fixes - * vorbis multichannel fixes - * multifdsink streamheader fixes - -Bugs fixed since 0.10.7: - - * 169936 : [subparse] support for SAMI subtitles - * 315312 : Gstreamer Xv uses RGB instead of YUV. - * 334002 : video4linux shouldn't depend on X in configure script - * 336881 : [libvisual] additional support for libvisual-0.4 - * 337544 : [xvimagesink] Internal Error when image is too large - * 339520 : [subparse] add " encoding " property - * 340909 : [alsasink] can't enable spdif output - * 341542 : some users have an assertion failed: (GST_VIDEO_SINK_WIDT... - * 341562 : audioconvert doesn't list formats in order of preference - * 341696 : audioconvert crashes if converting from a format with no ... - * 341719 : bisection algorithm in ogg doesn't bisect in some cases - * 341732 : [alsasink] doesn't query supported sample rates - * 341873 : [alsasink] minor memory leak, uses unprotected static var... - * 342143 : [subparse] sami parser needs to escape characters - * 342181 : [alsa] add property probe interface to alsasink and alsasrc - * 342268 : [playbin] add 'subtitle-encoding' property - * 342345 : [riff] Elephant's Dream AVI does not play, JUNK chunk bef... - * 342566 : Building without GTK+ fails - * 343397 : H.264/AAC movie deadlocks with totem in gstreamer code, p... - * 339935 : [adder] dead-locks when adding sink pads in PAUSED state - -Changes since 0.10.6: - - * typefind improvements - * bug-fixes in textoverlay, audioconvert, videotestsrc, - multifdsink and audio source/sink base classes - * Ice-cast metadata support has moved from gnomevfssrc to the - icydemux element in gst-plugins-good - * audioresample now supports floating point samples - * Adder element fixes. - * Fixes for network playback and audio resampling in playbin - -Bugs fixed since 0.10.6: - - * 340060 : [adder] handle newsegment events properly - * 340375 : [API 0.11] [patch] typefind to differentiate between mp4 ... - * 339405 : [textoverlay] can't display '\n' character - * 338657 : [patch] adder should send events from src-pad to all sink... - * 338919 : [patch] alsasink should also query witdh capabilities fro... - * 301759 : [audioresample] float audio support (for OSX audio sinks) - * 331901 : [videotestsrc] framerate=0/1 gives assertion error - * 333657 : Replacing icy demuxing in gnomevfssrc - * 336339 : [audioresample] should support width != 16 - * 338718 : [patch] [audioconvert] correctly clip float samples > 1.0 - * 338778 : [patch] Bad audio with ASX files - * 338991 : [patch] Videoscale doesn't pass on pixel-aspect ratio - * 339574 : [patch] Race condition in multifdsink can lead to spuriou... - * 339786 : [typefinding] wavpack typefinding doesn't always work - * 340369 : [volume element] " volume " property range insufficient - * 340379 : [playbin] doesn't insert audioresample, causes problems w... - * 340392 : Problem with internal-decodebin - * 341160 : [multifdsink] client_status enum has an uninitialized nick - * 341182 : Accessing playbin's streaminfo property from high languag... - * 341432 : [playbin] automatically get icecast metadata requiring ic... - * 341542 : some users have an assertion failed: (GST_VIDEO_SINK_WIDT... - * 341557 : Map GST_TAG_IMAGE < = > ID3v2 APIC tag - -API added since 0.10.6: - - * client-fd-removed signal added to multifdsink - * stream-info-value-array property added to playbin - * gst_video_calculate_display_ratio() in libgstvideo - -Changes since 0.10.5: - - * QoS in sinks and transform elements - * Needs GStreamer 0.10.5 for new GstBaseSink::async_playback() vmethod - * added theoraparse element - -Bugs fixed since 0.10.5: - - * 313136 : [playbin] hang while playing truncated ogg file - * 172848 : [subparse] subtitles with special chars are displayed as ... - * 305279 : [riff] uncompressed AVIs with 24bpp don't work - * 320765 : [ffmpegcolorspace] make win32+msvc compliant, don't use _... - * 323852 : Disable tests/icles on platforms that do not have X - * 325653 : build errors compiling audioresample on win32(vs7) - * 327357 : gst-plugins-base fails to compile with GCC 4.1 - * 334620 : [gnomevfssrc] fails to connect to icecast streaming servers - * 334822 : [ffmpegcolorspace] YVU9 support - * 335028 : [typefinding] ID3 v1 tag is not recognized with mp3-in-wa... - * 335365 : inefficient use of GList in gst-plugins-base - * 336190 : [gnomevfssink] should accept non-URI filenames as " location " - * 336194 : [gnomevfssrc] some minor memory leaks - * 336477 : plugins need better/univied descriptions - * 336617 : Unable to recognise MPEG TS stream - * 337548 : Memory leaks in basertpdepayload - * 337945 : [oggdemux] segment stop position ignored - * 338419 : Regression in the handling of files with multiple audio/s... - * 338897 : Videoscale crashes as part of DVD to Ogg transcoding - * 339013 : [videorate] Goes into an infinite loop - * 339047 : [riff] handle H264 fourcc in addition to h264 - * 339212 : ISO file typefinding regression - * 330748 : deadlock in base audio sink on playing- > paused state change - -Bugs fixed since 0.10.4: - - * 334216 : [gnomevfssrc] won't open some media on NFS mounts any longer - * 334226 : typefindfunctions plugin crashes on PPC on registration - -Changes since 0.10.3: - - * (Experimental) QoS support - * oggmuxer now creates 100% valid streams for Theora, Vorbis and Speex - * documentation updates - * better support for subtitles (seeking) - -Bugs fixed since 0.10.3: - - * 310202 : [subtitles] < i > < /i > tags and others should be supported i... - * 312439 : XVideo output doesn't work on remote displays (probably r... - * 321271 : audio output is truncated at EOS - * 321650 : Can't decode this ogm file - * 325732 : [oggdemux] problem when seeking to time less than 4s with... - * 325972 : [typefinding] doesn't recognise this mp3 - * 326720 : [alsasink] doesn't support more than 2 channels anymore - * 330711 : [ffmpegcolorspace] problems with palettized RGB (fencount... - * 330789 : gstbaseaudiosink causes noise on seeking - * 330888 : Fix build with gcc 2.95 (again) - * 331295 : gnomevfssink doesn't respect umask when creating files - * 331526 : 3GP type detection is too simple - * 331678 : Decodebin is not reusable within a single pipeline (as in... - * 331690 : playbin won't play my last.fm stream - * 331763 : [alsamixer] unmute sets the volume to 100% - * 331765 : [alsamixer] mixer applet slider doesn't want to move from... - * 331903 : [videorate] doesnt handle input caps of framerate=0/1 sanely - * 332778 : [ogmparse] " Already an existing pad " WARNING - * 332964 : random crashes in mp3_type_find - * 333254 : theora encoder does not set IN_CAPS flag properly - * 333352 : [gnomevfssink] reports disk full as generic error - * 333488 : Allow for palette < 256 colours in AVI files - * 333510 : [PATCH] Fix gst_pad_new_from_template (gst_static_pad_tem... - * 333545 : [riff] set depth on wma caps to make asfdemux and pitfdll... - * 333663 : [patch] unref the result of gst_pad_get_parent - * 333900 : [typefind] cannot play a particular mp3 file - * 334112 : variable not initialized - * 334129 : Disable frame dropping for now - * 317038 : use default channel layout if none is specified in multic... - * 319340 : [cdparanoia] uncorrected-error signal never fired - -API added since 0.10.3: - - * GstTextOverlay::halignment - * GstTextOverlay::valignment - -Changes since 0.10.2: - - * typefind improvements - * Ogg decoding and encoding fixes - * Improved audio and video sink classes - * Bug and leak fixes - * Improved video scaling - * On-the-fly visualisation switching - * Subtitle support - -Bugs fixed since 0.10.2: - - * 330244 : gsttextoverlay.c:895: 'struct _GstCollectData' has no mem... - * 324000 : [playbin] post error or message on unknown input - * 153004 : [typefind] can't identify mp3 file with one single mpeg f... - * 323874 : [playbin] leaks sinks and threads when using gconfaudiosink - * 324626 : ffmpegcolorspace support for fourcc " UYVY " - * 326447 : check that all elements in -base pass queries they can't ... - * 328263 : Fix build with gcc 2.95 - * 328279 : [decodebin] timeout issue when pre-rolling - * 329326 : Fix oggmux removing pads from collect pads - -Changes since 0.10.1: - - * ported gnomevfssink, cdparanoia - * New library and base class: GstCddaBaseSrc - * ported mixerutils.h - * added 'sine-tab' waveform to audiotestsrc - * added float audio to audiorate - -Bugs fixed since 0.10.1: - - * 324216 : [cdparanoia] missing patches from 0.8 - * 324696 : [videotestsrc] does not start counting the time from zero... - * 324900 : Problem compiling gst-plugins-base with Forte - * 325984 : [playbin] cannot handle sources that produce raw audio/video - * 325990 : patch videotestsrc for using glib types - * 326601 : GstRingBuffer crashes with alaw/mulaw caps - * 327114 : [theoradec] should post tags on the bus - * 327216 : vorbisdec segfaults on certain queries - -API added since 0.10.1: - - * added libgstcddabase - * added mixerutils.h - -Changes since 0.10.0: - - * Parallel installability with 0.8.x series - * Threadsafe design and API - * removed gst-launch-ext - * Ported: ogmparse - * Fixes for: subparse, xvimagesink, audioresample, videorate, decodebin - -Bugs fixed since 0.10.0: - - * 322347 : GstBaseRtpDepayload timestamps are wring - * 323900 : Basertpdepayloader lets NEWSEGMENT events through unfiltered - * 323878 : missing < string.h > inclusion (for memset & FD_ZERO) - -API added since 0.10.0: - - * GstAlsaMixer::device - * GstAlsaMixer::device-name - -Bugs fixed since 0.9.7: - - * 319172 : gstreamer-plugins-base-0.9.pc doesn't export linking flags - * 323017 : While(1) loop with sleep(0) in basertpdepayload.c - -Changes since 0.9.6: - - * Parallel installability with 0.8.x series - * Threadsafe design and API - * ximagesink and xvimagesink updates and interactive test - * added pango - * rename net to netbuffer library - * rtp element renaming - * stream selector fixes - -Bugs fixed since 0.9.6: - - * 319618 : [decodebin] some ogg videos don't play - * 320644 : RTP packetizer does't set the packet timestamps correctly - * 322388 : xvimagesink force-aspect-ratio=True always displays squar... - * 322704 : oggdemux typefind list leak - -Changes since 0.9.5: - - * Parallel installability with 0.8.x series - * Threadsafe design and API - * lots of leak fixes - * flicker-free and rewritten X sinks - * fractional framerates - * removed sinesrc, replaced by audiotestsrc - -Bugs fixed since 0.9.5: - - * 316442 : playbin should use autoaudiosink/autovideosink by default - * 318353 : [ffmpegcolorspace] forward-port fixes from 0.8 branch - * 320200 : vorbisenc: min-bitrate and max-bitrate are 1/1000 bps rat... - * 321164 : gstringbuffer stops working under load - * 321426 : ximage plugin should be renamed to ximagesink - * 321446 : sinesrc should be dropped in favour of audiotestsrc - * 321451 : GstRtpBuffer: no way to create a sub buffer with only the... - * 321816 : [API] xoverlay API to post prepare-xwindow-id message - * 321894 : vorbisenc doesn't compile - * 322117 : Rename libgsttagedit to libgsttag - -Changes since 0.9.4: - - * video caps now use a good range for framerate and w/h - * oggdemux/oggmux improvements - * playbin improvements - -Bugs fixed since 0.9.4: - - * 319110 : [PATCH] oggdemux chain finding is slow - * 320058 : playbin of a jpeg over http does not work - * 320923 : [volume] doesn't build on Solaris - * 321011 : gstbasertpdepayload doesn't send the " new segment " event ... - -Changes since 0.9.3: - - * New element: audiotestsrc - * typefind improvements - * buffer-frames removed - -Changes since 0.9.2: - - * RTP base classes - -Bugs fixed since 0.9.2: - - * 313251 : ximagesink unused functions - * 315159 : audioconvert lost 24 bit conversions in the rewrite - +This is GStreamer opengl Plug-ins 0.10.0
+
+Changes since 0.10.0:
+
+ *
+
+Bugs fixed since 0.10.0:
+
+ *
+
+API added since 0.10.0:
+
+ *
@@ -1,247 +1,247 @@ -WHAT IT IS ----------- - -This is GStreamer, a framework for streaming media. - -WHERE TO START --------------- - -We have a website at -http://gstreamer.freedesktop.org/ - -You should start by going through our FAQ at -http://gstreamer.freedesktop.org/data/doc/gstreamer/head/faq/html/ - -There is more documentation; go to -http://gstreamer.freedesktop.org/documentation - -You can subscribe to our mailing lists; see the website for details. - -We track bugs in GNOME's bugzilla; see the website for details. - -You can join us on IRC - #gstreamer on irc.freenode.org - -GStreamer 0.10 series ---------------------- - -Starring - - GSTREAMER - -The core around which all other modules revolve. Base functionality and -libraries, some essential elements, documentation, and testing. - - BASE - -A well-groomed and well-maintained collection of GStreamer plug-ins and -elements, spanning the range of possible types of elements one would want -to write for GStreamer. - -And introducing, for the first time ever, on the development screen ... - - THE GOOD - - --- "Such ingratitude. After all the times I've saved your life." - -A collection of plug-ins you'd want to have right next to you on the -battlefield. Shooting sharp and making no mistakes, these plug-ins have it -all: good looks, good code, and good licensing. Documented and dressed up -in tests. If you're looking for a role model to base your own plug-in on, -here it is. - -If you find a plot hole or a badly lip-synced line of code in them, -let us know - it is a matter of honour for us to ensure Blondie doesn't look -like he's been walking 100 miles through the desert without water. - - THE UGLY - - --- "When you have to shoot, shoot. Don't talk." - -There are times when the world needs a color between black and white. -Quality code to match the good's, but two-timing, backstabbing and ready to -sell your freedom down the river. These plug-ins might have a patent noose -around their neck, or a lock-up license, or any other problem that makes you -think twice about shipping them. - -We don't call them ugly because we like them less. Does a mother love her -son less because he's not as pretty as the other ones ? No - she commends -him on his great personality. These plug-ins are the life of the party. -And we'll still step in and set them straight if you report any unacceptable -behaviour - because there are two kinds of people in the world, my friend: -those with a rope around their neck and the people who do the cutting. - - THE BAD - - --- "That an accusation?" - -No perfectly groomed moustache or any amount of fine clothing is going to -cover up the truth - these plug-ins are Bad with a capital B. -They look fine on the outside, and might even appear to get the job done, but -at the end of the day they're a black sheep. Without a golden-haired angel -to watch over them, they'll probably land in an unmarked grave at the final -showdown. - -Don't bug us about their quality - exercise your Free Software rights, -patch up the offender and send us the patch on the fastest steed you can -steal from the Confederates. Because you see, in this world, there's two -kinds of people, my friend: those with loaded guns and those who dig. -You dig. - -The Lowdown ------------ - - --- "I've never seen so many plug-ins wasted so badly." - -GStreamer Plug-ins has grown so big that it's hard to separate the wheat from -the chaff. Also, distributors have brought up issues about the legal status -of some of the plug-ins we ship. To remedy this, we've divided the previous -set of available plug-ins into four modules: - -- gst-plugins-base: a small and fixed set of plug-ins, covering a wide range - of possible types of elements; these are continuously kept up-to-date - with any core changes during the development series. - - - We believe distributors can safely ship these plug-ins. - - People writing elements should base their code on these elements. - - These elements come with examples, documentation, and regression tests. - -- gst-plugins-good: a set of plug-ins that we consider to have good quality - code, correct functionality, our preferred license (LGPL for the plug-in - code, LGPL or LGPL-compatible for the supporting library). - - - We believe distributors can safely ship these plug-ins. - - People writing elements should base their code on these elements. - -- gst-plugins-ugly: a set of plug-ins that have good quality and correct - functionality, but distributing them might pose problems. The license - on either the plug-ins or the supporting libraries might not be how we'd - like. The code might be widely known to present patent problems. - - - Distributors should check if they want/can ship these plug-ins. - - People writing elements should base their code on these elements. - -- gst-plugins-bad: a set of plug-ins that aren't up to par compared to the - rest. They might be close to being good quality, but they're missing - something - be it a good code review, some documentation, a set of tests, - a real live maintainer, or some actual wide use. - If the blanks are filled in they might be upgraded to become part of - either gst-plugins-good or gst-plugins-ugly, depending on the other factors. - - - If the plug-ins break, you can't complain - instead, you can fix the - problem and send us a patch, or bribe someone into fixing them for you. - - New contributors can start here for things to work on. - -PLATFORMS ---------- - -- Linux is of course fully supported -- FreeBSD is reported to work; other BSD's should work too -- Solaris is reported to work; a specific sunaudiosink plugin has been written -- MacOSX is reported to work; specific audio and video sinks have been written -- Windows support is experimental but improving. Output sinks have been - written but are not yet included in the code. We support - - MSys/MingW builds - - Microsoft Visual Studio 6 builds (see win32/README.txt) - -INSTALLING FROM PACKAGES ------------------------- - -You should always prefer installing from packages first. GStreamer is -well-maintained for a number of distributions, including Fedora, Debian, -Ubuntu, Mandrake, Gentoo, ... - -Only in cases where you: -- want to hack on GStreamer -- want to verify that a bug has been fixed -- do not have a sane distribution -should you choose to build from source tarballs or CVS. - -Find more information about the various packages at -http://gstreamer.freedesktop.org/download/ - -COMPILING FROM SOURCE TARBALLS ------------------------------- - -- again, make sure that you really need to install from source ! - If GStreamer is one of your first projects ever that you build from source, - consider taking on an easier project. - -- check output of ./configure --help to see if any options apply to you -- run - ./configure - make - - to build GStreamer. -- if you want to install it (not required, but what you usually want to do), run - make install - -- try out a simple test: - gst-launch -v fakesrc num_buffers=5 ! fakesink - (If you didn't install GStreamer, prefix gst-launch with tools/) - - If it outputs a bunch of messages from fakesrc and fakesink, everything is - ok. - - If it did not work, keep in mind that you might need to adjust the - PATH and/or LD_LIBRARY_PATH environment variables to make the system - find GStreamer in the prefix where you installed (by default that is /usr/local). - -- After this, you're ready to install gst-plugins, which will provide the - functionality you're probably looking for by now, so go on and read - that README. - -COMPILING FROM CVS ------------------- - -When building from CVS sources, you will need to run autogen.sh to generate -the build system files. - -You will need a set of additional tools typical for building from CVS, -including: -- autoconf -- automake -- libtool - -autogen.sh will check for recent enough versions and complain if you don't have -them. You can also specify specific versions of automake and autoconf with ---with-automake and --with-autoconf - -Check autogen.sh options by running autogen.sh --help - -autogen.sh can pass on arguments to configure - you just need to separate them -from autogen.sh with -- between the two. -prefix has been added to autogen.sh but will be passed on to configure because -some build scripts like that. - -When you have done this once, you can use autoregen.sh to re-autogen with -the last passed options as a handy shortcut. Use it. - -After the autogen.sh stage, you can follow the directions listed in -"COMPILING FROM SOURCE" - -You can also run your whole cvs stack uninstalled. The script in -the gstreamer module /docs/faq/gst-uninstalled) is helpful in setting -up your environment for this. - -PLUG-IN DEPENDENCIES AND LICENSES ---------------------------------- - -GStreamer is developed under the terms of the LGPL (see LICENSE file for -details). Some of our plug-ins however rely on libraries which are available -under other licenses. This means that if you are distributing an application -which has a non-GPL compatible license (for instance a closed-source -application) with GStreamer, you have to make sure not to distribute GPL-linked -plug-ins. - -When using GPL-linked plug-ins, GStreamer is for all practical reasons -under the GPL itself. - -HISTORY -------- - -The fundamental design comes from the video pipeline at Oregon Graduate -Institute, as well as some ideas from DirectMedia. It's based on plug-ins that -will provide the various codec and other functionality. The interface -hopefully is generic enough for various companies (ahem, Apple) to release -binary codecs for Linux, until such time as they get a clue and release the -source. +WHAT IT IS
+----------
+
+This is GStreamer, a framework for streaming media.
+
+WHERE TO START
+--------------
+
+We have a website at
+http://gstreamer.freedesktop.org/
+
+You should start by going through our FAQ at
+http://gstreamer.freedesktop.org/data/doc/gstreamer/head/faq/html/
+
+There is more documentation; go to
+http://gstreamer.freedesktop.org/documentation
+
+You can subscribe to our mailing lists; see the website for details.
+
+We track bugs in GNOME's bugzilla; see the website for details.
+
+You can join us on IRC - #gstreamer on irc.freenode.org
+
+GStreamer 0.10 series
+---------------------
+
+Starring
+
+ GSTREAMER
+
+The core around which all other modules revolve. Base functionality and
+libraries, some essential elements, documentation, and testing.
+
+ BASE
+
+A well-groomed and well-maintained collection of GStreamer plug-ins and
+elements, spanning the range of possible types of elements one would want
+to write for GStreamer.
+
+And introducing, for the first time ever, on the development screen ...
+
+ THE GOOD
+
+ --- "Such ingratitude. After all the times I've saved your life."
+
+A collection of plug-ins you'd want to have right next to you on the
+battlefield. Shooting sharp and making no mistakes, these plug-ins have it
+all: good looks, good code, and good licensing. Documented and dressed up
+in tests. If you're looking for a role model to base your own plug-in on,
+here it is.
+
+If you find a plot hole or a badly lip-synced line of code in them,
+let us know - it is a matter of honour for us to ensure Blondie doesn't look
+like he's been walking 100 miles through the desert without water.
+
+ THE UGLY
+
+ --- "When you have to shoot, shoot. Don't talk."
+
+There are times when the world needs a color between black and white.
+Quality code to match the good's, but two-timing, backstabbing and ready to
+sell your freedom down the river. These plug-ins might have a patent noose
+around their neck, or a lock-up license, or any other problem that makes you
+think twice about shipping them.
+
+We don't call them ugly because we like them less. Does a mother love her
+son less because he's not as pretty as the other ones ? No - she commends
+him on his great personality. These plug-ins are the life of the party.
+And we'll still step in and set them straight if you report any unacceptable
+behaviour - because there are two kinds of people in the world, my friend:
+those with a rope around their neck and the people who do the cutting.
+
+ THE BAD
+
+ --- "That an accusation?"
+
+No perfectly groomed moustache or any amount of fine clothing is going to
+cover up the truth - these plug-ins are Bad with a capital B.
+They look fine on the outside, and might even appear to get the job done, but
+at the end of the day they're a black sheep. Without a golden-haired angel
+to watch over them, they'll probably land in an unmarked grave at the final
+showdown.
+
+Don't bug us about their quality - exercise your Free Software rights,
+patch up the offender and send us the patch on the fastest steed you can
+steal from the Confederates. Because you see, in this world, there's two
+kinds of people, my friend: those with loaded guns and those who dig.
+You dig.
+
+The Lowdown
+-----------
+
+ --- "I've never seen so many plug-ins wasted so badly."
+
+GStreamer Plug-ins has grown so big that it's hard to separate the wheat from
+the chaff. Also, distributors have brought up issues about the legal status
+of some of the plug-ins we ship. To remedy this, we've divided the previous
+set of available plug-ins into four modules:
+
+- gst-plugins-base: a small and fixed set of plug-ins, covering a wide range
+ of possible types of elements; these are continuously kept up-to-date
+ with any core changes during the development series.
+
+ - We believe distributors can safely ship these plug-ins.
+ - People writing elements should base their code on these elements.
+ - These elements come with examples, documentation, and regression tests.
+
+- gst-plugins-good: a set of plug-ins that we consider to have good quality
+ code, correct functionality, our preferred license (LGPL for the plug-in
+ code, LGPL or LGPL-compatible for the supporting library).
+
+ - We believe distributors can safely ship these plug-ins.
+ - People writing elements should base their code on these elements.
+
+- gst-plugins-ugly: a set of plug-ins that have good quality and correct
+ functionality, but distributing them might pose problems. The license
+ on either the plug-ins or the supporting libraries might not be how we'd
+ like. The code might be widely known to present patent problems.
+
+ - Distributors should check if they want/can ship these plug-ins.
+ - People writing elements should base their code on these elements.
+
+- gst-plugins-bad: a set of plug-ins that aren't up to par compared to the
+ rest. They might be close to being good quality, but they're missing
+ something - be it a good code review, some documentation, a set of tests,
+ a real live maintainer, or some actual wide use.
+ If the blanks are filled in they might be upgraded to become part of
+ either gst-plugins-good or gst-plugins-ugly, depending on the other factors.
+
+ - If the plug-ins break, you can't complain - instead, you can fix the
+ problem and send us a patch, or bribe someone into fixing them for you.
+ - New contributors can start here for things to work on.
+
+PLATFORMS
+---------
+
+- Linux is of course fully supported
+- FreeBSD is reported to work; other BSD's should work too
+- Solaris is reported to work; a specific sunaudiosink plugin has been written
+- MacOSX is reported to work; specific audio and video sinks have been written
+- Windows support is experimental but improving. Output sinks have been
+ written but are not yet included in the code. We support
+ - MSys/MingW builds
+ - Microsoft Visual Studio 6 builds (see win32/README.txt)
+
+INSTALLING FROM PACKAGES
+------------------------
+
+You should always prefer installing from packages first. GStreamer is
+well-maintained for a number of distributions, including Fedora, Debian,
+Ubuntu, Mandrake, Gentoo, ...
+
+Only in cases where you:
+- want to hack on GStreamer
+- want to verify that a bug has been fixed
+- do not have a sane distribution
+should you choose to build from source tarballs or CVS.
+
+Find more information about the various packages at
+http://gstreamer.freedesktop.org/download/
+
+COMPILING FROM SOURCE TARBALLS
+------------------------------
+
+- again, make sure that you really need to install from source !
+ If GStreamer is one of your first projects ever that you build from source,
+ consider taking on an easier project.
+
+- check output of ./configure --help to see if any options apply to you
+- run
+ ./configure
+ make
+
+ to build GStreamer.
+- if you want to install it (not required, but what you usually want to do), run
+ make install
+
+- try out a simple test:
+ gst-launch -v fakesrc num_buffers=5 ! fakesink
+ (If you didn't install GStreamer, prefix gst-launch with tools/)
+
+ If it outputs a bunch of messages from fakesrc and fakesink, everything is
+ ok.
+
+ If it did not work, keep in mind that you might need to adjust the
+ PATH and/or LD_LIBRARY_PATH environment variables to make the system
+ find GStreamer in the prefix where you installed (by default that is /usr/local).
+
+- After this, you're ready to install gst-plugins, which will provide the
+ functionality you're probably looking for by now, so go on and read
+ that README.
+
+COMPILING FROM CVS
+------------------
+
+When building from CVS sources, you will need to run autogen.sh to generate
+the build system files.
+
+You will need a set of additional tools typical for building from CVS,
+including:
+- autoconf
+- automake
+- libtool
+
+autogen.sh will check for recent enough versions and complain if you don't have
+them. You can also specify specific versions of automake and autoconf with
+--with-automake and --with-autoconf
+
+Check autogen.sh options by running autogen.sh --help
+
+autogen.sh can pass on arguments to configure - you just need to separate them
+from autogen.sh with -- between the two.
+prefix has been added to autogen.sh but will be passed on to configure because
+some build scripts like that.
+
+When you have done this once, you can use autoregen.sh to re-autogen with
+the last passed options as a handy shortcut. Use it.
+
+After the autogen.sh stage, you can follow the directions listed in
+"COMPILING FROM SOURCE"
+
+You can also run your whole cvs stack uninstalled. The script in
+the gstreamer module /docs/faq/gst-uninstalled) is helpful in setting
+up your environment for this.
+
+PLUG-IN DEPENDENCIES AND LICENSES
+---------------------------------
+
+GStreamer is developed under the terms of the LGPL (see LICENSE file for
+details). Some of our plug-ins however rely on libraries which are available
+under other licenses. This means that if you are distributing an application
+which has a non-GPL compatible license (for instance a closed-source
+application) with GStreamer, you have to make sure not to distribute GPL-linked
+plug-ins.
+
+When using GPL-linked plug-ins, GStreamer is for all practical reasons
+under the GPL itself.
+
+HISTORY
+-------
+
+The fundamental design comes from the video pipeline at Oregon Graduate
+Institute, as well as some ideas from DirectMedia. It's based on plug-ins that
+will provide the various codec and other functionality. The interface
+hopefully is generic enough for various companies (ahem, Apple) to release
+binary codecs for Linux, until such time as they get a clue and release the
+source.
@@ -1,205 +1,8 @@ - -Release notes for GStreamer Base Plug-ins 0.10.15 "No need to argue" - - - -The GStreamer team is proud to announce a new release -in the 0.10.x stable series of the -GStreamer Base Plug-ins. - - -The 0.10.x series is a stable series targeted at end users. -It is not API or ABI compatible with the stable 0.8.x series. -It is, however, parallel installable with the 0.8.x series. - - - -This module contains a set of reference plugins, base classes for other -plugins, and helper libraries. - -This module is kept up-to-date together with the core developments. Element -writers should look at the elements in this module as a reference for -their development. - -This module contains elements for, among others: - - device plugins: x(v)imagesink, alsa, v4lsrc, cdparanoia - containers: ogg - codecs: vorbis, theora - text: textoverlay, subparse - sources: audiotestsrc, videotestsrc, gnomevfssrc - network: tcp - typefind - audio processing: audioconvert, adder, audiorate, audioscale, volume - visualisation: libvisual - video processing: ffmpegcolorspace - aggregate elements: decodebin, playbin - - -Other modules containing plug-ins are: - - -gst-plugins-good -contains a set of well-supported plug-ins under our preferred license -gst-plugins-ugly -contains a set of well-supported plug-ins, but might pose problems for - distributors -gst-plugins-bad -contains a set of less supported plug-ins that haven't passed the - rigorous quality testing we expect - - - - - -Features of this release - - * RTP/RTSP/RTCP/SDP support improved - * New FFT support library libgstfft, based on Kiss FFT - * New formats supported in volume and audiotestsrc - * Fixes in audiorate and videorate - * Audio capture fixes - * Playbin and decodebin fixes - * New tagdemux base class for ID3/APE style tag readers - * Fix a nasty crash in the X sinks on shutdown - * New tags supported - * Add support for multichannel WAV files. - * Preserve channel layout information when up/down-mixing. - * Many bug-fixes and improvements - * - -Bugs fixed in this release - - * 475395 : decodebin2 leaks request-pads - * 475451 : [decodebin2] leaks ghostpad - * 378770 : [xvimagesink] race condition in event thread? - * 407282 : [decodebin2] autoplug-sort signal has GList ** parameter - * 430677 : [audioconvert] does not preserve channel positions when f... - * 442654 : [volume] controller bypassed by default - * 445529 : [volume] support for 24/32-bit audio/x-raw-int - * 446766 : return code for gst_base_rtp_payload_audio_handle_event() - * 451970 : Subparse requires HTML parser - * 453650 : [audiobasesrc] two alsasrcs do not work in one pipeline - * 459334 : [textoverlay] expose pango line alignment property - * 459585 : [basertpdepayload] api without namespace - * 460422 : [audiotestsrc] Add support for float and double output - * 462805 : [alsa] compilation fails with gcc 4.2 - * 462979 : Add 'silent' property to GstTimeOverlay - * 463215 : [audioconvert] compile errors - * 464320 : [PATCH] gst-plugins-base-0.14 does not build for win32 - * 464666 : [playbin] QT trailer hangs in preroll with decodebin2 - * 464690 : Add connection-speed property to uridecodebin element - * 465015 : [playbin] Not removed probes causes deadlocks in streamin... - * 465028 : some warnings with mingw - * 467667 : GST_FRAMES_TO_CLOCK_TIME() and GST_CLOCK_TIME_TO_FRAMES()... - * 468129 : [basertpaudiopayload] event handler returns the wrong value - * 468619 : New library gstfft: FFT library for integer and float typ... - * 470456 : [API] add gst_missing_*_installer_detail_new() - * 470766 : [ssaparse] line breaks in SSA subtitle parser - * 471067 : Make the SDP code useable for generating SDP descriptions - * 471194 : [rtpbuffer] RTP headers are wrong for win32 - * 473097 : [baseaudiosink] gstreamer-properties hangs when testing s... - * 474384 : gstrtsp-enumtypes.c and .h needed for win32 - * 474880 : [xvimagesink] [ximagesink] leaking buffer caps reference - * 475731 : rtspconnection is able to read incomplete messages - * 483620 : All Rtp buffers are discarded -- gst_rtp_buffer_get_payl... - * 484989 : memleak, not unrefed caps for gstbasertppayload.c - * 489010 : Please change default channel order for WAVE_EXT-less .wa... - * 491722 : [playbin] regression: crash with external subtitles - * 492098 : [GstFFT] Broken scaling - * 492114 : Build issues on Windows/MSVC - * 492306 : compilation errors with MinGW - * 492813 : Missing symbols in libgstrtp.def - * 493986 : Build issues on Windows (missing symbols) - * 494346 : pre-release vs6 patch - * 496548 : Including malloc.h breaks macos build - * 496724 : DSW file references non-existent DSP files - * 464079 : audiotestsrc doesn't respond to conversion queries properly - * 442065 : floatcast.h includes config.h and might break other apps - * 466717 : gst_event_new_new_segment_full:assertion `start < = stop' ... - * 485753 : Decodebin2 deadlocks when nulling pipeline during typefind - * 464028 : Move connection-speed from playbin to playbasebin - -API changed in this release - -- API additions: - -* GstTagDemux base class for simple tag demuxers -* GstBaseAudioSrc::provide-clock property -* gst_rtcp_ntp_to_unix() -* gst_rtcp_unix_to_ntp() -* gst_rtp_buffer_get_header_len() -* gst_rtp_buffer_get_extension_data() -* gst_rtp_buffer_compare_seqnum() -* gst_rtp_buffer_ext_timestamp() -* gst_rtcp_packet_sdes_copy_entry() -* gst_install_plugins_supported() -* gst_missing_*_installer_detail_new() convenience API -* gst_rtsp_connection_poll() -* GstTextOverlay::line-alignment property - -Download - -You can find source releases of gst-plugins-base in the download directory: -http://gstreamer.freedesktop.org/src/gst-plugins-base/ - -GStreamer Homepage - -More details can be found on the project's website: -http://gstreamer.freedesktop.org/ - -Support and Bugs - -We use GNOME's bugzilla for bug reports and feature requests: -http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer - -Developers - -CVS is hosted on cvs.freedesktop.org. -All code is in CVS and can be checked out from there. -Interested developers of the core library, plug-ins, and applications should -subscribe to the gstreamer-devel list. If there is sufficient interest we -will create more lists as necessary. - - -Applications - -Contributors to this release - - * Stefan Kost - * Alexander Shopov - * Damien Lespiau - * Dan Williams - * Daniel DÃaz - * David Schleef - * Davyd Madeley - * Funda Wang - * Haakon Sporsheim - * Ilkka Tuohela - * Jakub Bogusz - * Jan Schmidt - * Jason Kivlighn - * Jens Granseuer - * Johan Dahlin - * Jorge González González - * Josep Torra Valles - * Julien MOUTTE - * Laurent Glayal - * Michael Smith - * Mogens Jaeger - * Ole André Vadla RavnÃ¥s - * Olivier Crete - * Peter Kjellerstedt - * Renato Filho - * René Stadler - * Sebastian Dröge - * Sebastien Moutte - * Stefan Kost - * Thijs Vermeir - * Thomas Vander Stichele - * Tim-Philipp Müller - * Tommi Myöhänen - * Vincent Torri - * Wim Taymans - * Yang Hong +
+Release notes for GStreamer Opengl Plug-ins 0.10.0
+
+
+Contributors to this release
+
+ *
Â
\ No newline at end of file diff --git a/REQUIREMENTS b/REQUIREMENTS index 0c84c4d..fcf476a 100644 --- a/REQUIREMENTS +++ b/REQUIREMENTS @@ -1,105 +1,49 @@ -GStreamer uses a *large* array of tools and libraries, most of which are -optional. We have attempted to make sure that any code that depends on -optional libraries doesn't get built unless you have those libraries. If -you find this not to be the case, please, let us know by filing a bug -report at http://bugzilla.gnome.org/. - - -Required tools: -=============== - -An extra set of tools is required if you wish to build GStreamer out of -CVS (using autogen.sh): - -autoconf 2.52 or better -automake 1.5 -gettext 0.11.5 -libtool v1.4 or better -pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/) - -Required libraries: -=================== - -The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or -the version that corresponds to this plugin release. - -Package: GStreamer -Version: 0.10.11.2 -Recommended: 0.10.latest -URL: http://gstreamer.freedesktop.org/ -DebianPackage: libgstreamer0.10-dev -Notes: The required version is updated frequently, so the version - listed in this file is often wrong. If you are compiling from CVS, - the required version is often the latest GStreamer CVS. - -Package: liboil -Version: >= 0.3.8 -Recommended: 0.3.latest -URL: http://liboil.freedesktop.org/ -DebianPackage: liboil0.3-dev - - -Optional libraries: -=================== - -This file lists supporting libraries for which gst-plugins-base contains -plugins, as well as their minimum version. You can find the corresponding -plugins in ext/(library) - -Package: GTK+ -Version: >= 2.0 -Recommended: >= 2.2 -URL: http://www.gtk.org/ -DebianPackage: libgtk2.0-dev -Notes: Required by several examples - -Package: Xlib -Plugins: xvimagesink, ximagesink, v4l (v4lsrc), ximagesrc -DebianPackage: libx11-dev libxv-dev libxt-dev - -Package: Alsa -Version: >= 0.9.1 -Plugins: alsa (alsasrc, alsasink) -URL: http://www.alsa-project.org/ -DebianPackage: libasound2-dev - -Package: CDParanoia -Plugins: cdparanoia -URL: http://xiph.org/paranoia/ -DebianPackage: libcdparanoia0-dev - -Package: GnomeVFS -Version: >= 2.0 (2.4?) -Plugins: gnomevfs (gnomevfssrc) -URL: http://www.gnome.org/ -DebianPackage: libgnomevfs2-dev - -Package: libvisual -Version: >= 0.2.0 -Recommended: 0.4.0 -Plugins: libvisual -URL: http://localhost.nl/~synap/libvisual-wiki/index.php/Main_Page -DebianPackage: libvisual0.4-dev - -Package: Ogg -Version: >= 1.0 -Plugins: ogg (oggdemux, oggmux) -URL: http://xiph.org/ogg/ -DebianPackage: libogg-dev - -Package: Pango -Plugins: pango -DebianPackage: libpango1.0-dev -URL: http://www.pango.org/ - -Package: Theora -Plugins: theora (theoradec, theoraenc) -URL: http://www.theora.org/ -DebianPackage: libtheora-dev - -Package: Vorbis -Plugins: vorbis (vorbisdec, vorbisenc) -DebianPackage: libvorbis-dev -URL: http://www.vorbis.com/ - - +GStreamer uses a *large* array of tools and libraries, most of which are
+optional. We have attempted to make sure that any code that depends on
+optional libraries doesn't get built unless you have those libraries. If
+you find this not to be the case, please, let us know by filing a bug
+report at http://bugzilla.gnome.org/.
+
+
+Required tools:
+===============
+
+An extra set of tools is required if you wish to build GStreamer out of
+CVS (using autogen.sh):
+
+autoconf 2.52 or better
+automake 1.5
+gettext 0.11.5
+libtool v1.4 or better
+pkgconfig 0.9.0 or better (http://www.freedesktop.org/software/pkgconfig/)
+
+Required libraries:
+===================
+
+The core GStreamer libraries. See the gstreamer/ module in GStreamer cvs, or
+the version that corresponds to this plugin release.
+
+Package: GStreamer
+Version: 0.10.0
+Recommended: 0.10.latest
+URL: http://gstreamer.freedesktop.org/
+DebianPackage: libgstreamer0.10-dev
+Notes: The required version is updated frequently, so the version
+ listed in this file is often wrong. If you are compiling from CVS,
+ the required version is often the latest GStreamer CVS.
+
+Package: liboil
+Version: >= 0.3.8
+Recommended: 0.3.latest
+URL: http://liboil.freedesktop.org/
+DebianPackage: liboil0.3-dev
+
+
+Optional libraries:
+===================
+
+This file lists supporting libraries for which gst-plugins-base contains
+plugins, as well as their minimum version. You can find the corresponding
+plugins in ext/(library)
+
+
diff --git a/autogen.sh b/autogen.sh index 7cd5c78..9144cf5 100755..100644 --- a/autogen.sh +++ b/autogen.sh @@ -1,116 +1,116 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. - -DIE=0 -package=gst-plugins-gl -srcfile=gst-libs/gst/gl/gstgldisplay.h - -# a quick cvs co to ease the transition -if test ! -d common; -then - echo "+ getting common/ from cvs" - if test -e CVS/Tag - then - TAG="-r `tail -c +2 CVS/Tag`" - fi - cvs co $TAG common -fi - -# source helper functions -if test ! -f common/gst-autogen.sh; -then - echo There is something wrong with your source tree. - echo You are missing common/gst-autogen.sh - exit 1 -fi -. common/gst-autogen.sh - -CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-gtk-doc --enable-plugin-docs' - -autogen_options $@ - -echo -n "+ check for build tools" -if test ! -z "$NOCHECK"; then echo " skipped"; else echo; fi -version_check "autoconf" "$AUTOCONF autoconf autoconf259 autoconf257 autoconf-2.54 autoconf-2.53 autoconf-2.52" \ - "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 52 || DIE=1 -version_check "automake" "$AUTOMAKE automake automake-1.9 automake19 automake-1.7 automake-1.6 automake-1.5" \ - "ftp://ftp.gnu.org/pub/gnu/automake/" 1 7 || DIE=1 -version_check "autopoint" "autopoint" \ - "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 11 5 || DIE=1 -version_check "libtoolize" "$LIBTOOLIZE libtoolize glibtoolize" \ - "ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1 -version_check "pkg-config" "" \ - "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1 - -die_check $DIE - -autoconf_2_52d_check || DIE=1 -aclocal_check || DIE=1 -autoheader_check || DIE=1 - -die_check $DIE - -# if no arguments specified then this will be printed -if test -z "$*"; then - echo "+ checking for autogen.sh options" - echo " This autogen script will automatically run ./configure as:" - echo " ./configure $CONFIGURE_DEF_OPT" - echo " To pass any additional options, please specify them on the $0" - echo " command line." -fi - -toplevel_check $srcfile - -# autopoint -# older autopoint (< 0.12) has a tendency to complain about mkinstalldirs -if test -x mkinstalldirs; then rm mkinstalldirs; fi -# first remove patch if necessary, then run autopoint, then reapply -if test -f po/Makefile.in.in; -then - patch -p0 -R --forward < common/gettext.patch -fi -tool_run "$autopoint --force" -patch -p0 < common/gettext.patch - -tool_run "$aclocal" "-I m4 -I common/m4 $ACLOCAL_FLAGS" -tool_run "$libtoolize" "--copy --force" -tool_run "$autoheader" - -# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -- wingo -echo timestamp > stamp-h.in 2> /dev/null - -tool_run "$autoconf" -tool_run "$automake" "-a -c -Wno-portability" - -# if enable exists, add an -enable option for each of the lines in that file -if test -f enable; then - for a in `cat enable`; do - CONFIGURE_FILE_OPT="--enable-$a" - done -fi - -# if disable exists, add an -disable option for each of the lines in that file -if test -f disable; then - for a in `cat disable`; do - CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a" - done -fi - -test -n "$NOCONFIGURE" && { - echo "+ skipping configure stage for package $package, as requested." - echo "+ autogen.sh done." - exit 0 -} - -echo "+ running configure ... " -test ! -z "$CONFIGURE_DEF_OPT" && echo " ./configure default flags: $CONFIGURE_DEF_OPT" -test ! -z "$CONFIGURE_EXT_OPT" && echo " ./configure external flags: $CONFIGURE_EXT_OPT" -test ! -z "$CONFIGURE_FILE_OPT" && echo " ./configure enable/disable flags: $CONFIGURE_FILE_OPT" -echo - -./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || { - echo " configure failed" - exit 1 -} - -echo "Now type 'make' to compile $package." +#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+DIE=0
+package=gst-plugins-gl
+srcfile=gst-libs/gst/gl/gstgldisplay.h
+
+# a quick cvs co to ease the transition
+if test ! -d common;
+then
+ echo "+ getting common/ from cvs"
+ if test -e CVS/Tag
+ then
+ TAG="-r `tail -c +2 CVS/Tag`"
+ fi
+ cvs co $TAG common
+fi
+
+# source helper functions
+if test ! -f common/gst-autogen.sh;
+then
+ echo There is something wrong with your source tree.
+ echo You are missing common/gst-autogen.sh
+ exit 1
+fi
+. common/gst-autogen.sh
+
+CONFIGURE_DEF_OPT='--enable-maintainer-mode --enable-gtk-doc --enable-plugin-docs'
+
+autogen_options $@
+
+echo -n "+ check for build tools"
+if test ! -z "$NOCHECK"; then echo " skipped"; else echo; fi
+version_check "autoconf" "$AUTOCONF autoconf autoconf259 autoconf257 autoconf-2.54 autoconf-2.53 autoconf-2.52" \
+ "ftp://ftp.gnu.org/pub/gnu/autoconf/" 2 52 || DIE=1
+version_check "automake" "$AUTOMAKE automake automake-1.9 automake19 automake-1.7 automake-1.6 automake-1.5" \
+ "ftp://ftp.gnu.org/pub/gnu/automake/" 1 7 || DIE=1
+version_check "autopoint" "autopoint" \
+ "ftp://ftp.gnu.org/pub/gnu/gettext/" 0 11 5 || DIE=1
+version_check "libtoolize" "$LIBTOOLIZE libtoolize glibtoolize" \
+ "ftp://ftp.gnu.org/pub/gnu/libtool/" 1 5 0 || DIE=1
+version_check "pkg-config" "" \
+ "http://www.freedesktop.org/software/pkgconfig" 0 8 0 || DIE=1
+
+die_check $DIE
+
+autoconf_2_52d_check || DIE=1
+aclocal_check || DIE=1
+autoheader_check || DIE=1
+
+die_check $DIE
+
+# if no arguments specified then this will be printed
+if test -z "$*"; then
+ echo "+ checking for autogen.sh options"
+ echo " This autogen script will automatically run ./configure as:"
+ echo " ./configure $CONFIGURE_DEF_OPT"
+ echo " To pass any additional options, please specify them on the $0"
+ echo " command line."
+fi
+
+toplevel_check $srcfile
+
+# autopoint
+# older autopoint (< 0.12) has a tendency to complain about mkinstalldirs
+if test -x mkinstalldirs; then rm mkinstalldirs; fi
+# first remove patch if necessary, then run autopoint, then reapply
+if test -f po/Makefile.in.in;
+then
+ patch -p0 -R --forward < common/gettext.patch
+fi
+tool_run "$autopoint --force"
+patch -p0 < common/gettext.patch
+
+tool_run "$aclocal" "-I m4 -I common/m4 $ACLOCAL_FLAGS"
+tool_run "$libtoolize" "--copy --force"
+tool_run "$autoheader"
+
+# touch the stamp-h.in build stamp so we don't re-run autoheader in maintainer mode -- wingo
+echo timestamp > stamp-h.in 2> /dev/null
+
+tool_run "$autoconf"
+tool_run "$automake" "-a -c -Wno-portability"
+
+# if enable exists, add an -enable option for each of the lines in that file
+if test -f enable; then
+ for a in `cat enable`; do
+ CONFIGURE_FILE_OPT="--enable-$a"
+ done
+fi
+
+# if disable exists, add an -disable option for each of the lines in that file
+if test -f disable; then
+ for a in `cat disable`; do
+ CONFIGURE_FILE_OPT="$CONFIGURE_FILE_OPT --disable-$a"
+ done
+fi
+
+test -n "$NOCONFIGURE" && {
+ echo "+ skipping configure stage for package $package, as requested."
+ echo "+ autogen.sh done."
+ exit 0
+}
+
+echo "+ running configure ... "
+test ! -z "$CONFIGURE_DEF_OPT" && echo " ./configure default flags: $CONFIGURE_DEF_OPT"
+test ! -z "$CONFIGURE_EXT_OPT" && echo " ./configure external flags: $CONFIGURE_EXT_OPT"
+test ! -z "$CONFIGURE_FILE_OPT" && echo " ./configure enable/disable flags: $CONFIGURE_FILE_OPT"
+echo
+
+./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || {
+ echo " configure failed"
+ exit 1
+}
+
+echo "Now type 'make' to compile $package."
diff --git a/configure.ac b/configure.ac index 6a3e6d0..2d24816 100644 --- a/configure.ac +++ b/configure.ac @@ -1,367 +1,367 @@ -AC_PREREQ(2.52) - -dnl please read gstreamer/docs/random/autotools before changing this file - -dnl initialize autoconf -dnl releases only do -Wall, cvs and prerelease does -Werror too -dnl use a three digit version number for releases, and four for cvs/prerelease -AC_INIT(GStreamer OpenGL Plug-ins, 0.10.0.1, - http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer, - gst-plugins-gl) - -AG_GST_INIT - -dnl initialize automake -AM_INIT_AUTOMAKE - -dnl define PACKAGE_VERSION_* variables -AS_VERSION - -dnl check if this is a release version -AS_NANO(GST_CVS="no", GST_CVS="yes") - -dnl can autoconf find the source ? -AC_CONFIG_SRCDIR([gst-libs/gst/gl/gstgldisplay.c]) - -dnl define the output header for config -AM_CONFIG_HEADER([config.h]) - -dnl AM_MAINTAINER_MODE only provides the option to configure to enable it -AM_MAINTAINER_MODE - -dnl sets host_* variables -AC_CANONICAL_HOST - -dnl our libraries and install dirs use major.minor as a version -GST_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR -dnl we override it here if we need to for the release candidate of new series -GST_MAJORMINOR=0.10 -AC_SUBST(GST_MAJORMINOR) - -dnl CURRENT, REVISION, AGE -dnl - library source changed -> increment REVISION -dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0 -dnl - interfaces added -> increment AGE -dnl - interfaces removed -> AGE = 0 -dnl sets GST_LT_LDFLAGS -AS_LIBTOOL(GST, 0, 0, 0) - -dnl FIXME: this macro doesn't actually work; -dnl the generated libtool script has no support for the listed tags. -dnl So this needs to be fixed first if we want to use this -dnl AS_LIBTOOL_TAGS - -AC_LIBTOOL_WIN32_DLL -AM_PROG_LIBTOOL - -dnl *** required versions of GStreamer stuff *** -GST_REQ=0.10.15.1 -GSTPB_REQ=0.10.15.1 - -dnl *** autotools stuff **** - -dnl allow for different autotools -AS_AUTOTOOLS_ALTERNATE - -dnl Add parameters for aclocal -AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4") - -dnl set up gettext -dnl the version check needs to stay here because autopoint greps for it -AM_GNU_GETTEXT_VERSION([0.11.5]) -AM_GNU_GETTEXT([external]) -AG_GST_GETTEXT([gst-plugins-gl-$GST_MAJORMINOR]) - -dnl *** check for arguments to configure *** - -AG_GST_ARG_DEBUG -AG_GST_ARG_PROFILING -AG_GST_ARG_VALGRIND -AG_GST_ARG_GCOV - -AG_GST_ARG_EXAMPLES - -AG_GST_ARG_WITH_PKG_CONFIG_PATH -AG_GST_ARG_WITH_PACKAGE_NAME -AG_GST_ARG_WITH_PACKAGE_ORIGIN - -dnl *** checks for platform *** - -dnl * hardware/architecture * - -dnl common/m4/gst-arch.m4 -dnl check CPU type -AG_GST_ARCH - -dnl check for large file support -dnl affected plugins must include config.h -AC_SYS_LARGEFILE - -dnl *** checks for programs *** - -dnl find a compiler -AC_PROG_CC - -dnl check if the compiler supports '-c' and '-o' options -AM_PROG_CC_C_O - -AC_PATH_PROG(VALGRIND_PATH, valgrind, no) -AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno") - -dnl check for documentation tools -GTK_DOC_CHECK([1.3]) -AS_PATH_PYTHON([2.1]) -AG_GST_PLUGIN_DOCS([1.3],[2.1]) - -dnl *** checks for libraries *** - -dnl For interactive UNIX (a Sun thing) -dnl FIXME: this adds -lcposix to LIBS, but I doubt we use LIBS -AC_ISC_POSIX - -dnl libm, for sin() etc. -AC_CHECK_LIBM -AC_SUBST(LIBM) - -dnl *** checks for header files *** - -dnl check if we have ANSI C header files -AC_HEADER_STDC - -dnl *** checks for types/defines *** - -dnl *** checks for structures *** - -dnl *** checks for compiler characteristics *** - -dnl make sure we can use "inline" from C code -AC_C_INLINE - -dnl *** checks for library functions *** - -dnl Check for a way to display the function name in debug output -AG_GST_CHECK_FUNCTION - -dnl *** checks for dependency libraries *** - -dnl GLib is required -AG_GST_GLIB_CHECK([2.6]) - -dnl liboil is required -PKG_CHECK_MODULES(LIBOIL, liboil-0.3 >= 0.3.8, HAVE_LIBOIL=yes, HAVE_LIBOIL=no) -if test "x$HAVE_LIBOIL" != "xyes" -then - AC_ERROR([liboil-0.3.8 or later is required]) -fi - -dnl checks for gstreamer -dnl uninstalled is selected preferentially -- see pkg-config(1) -AG_GST_CHECK_GST($GST_MAJORMINOR, [$GST_REQ]) -AG_GST_CHECK_GST_BASE($GST_MAJORMINOR, [$GST_REQ]) -AG_GST_CHECK_GST_GDP($GST_MAJORMINOR, [$GST_REQ]) -AG_GST_CHECK_GST_CONTROLLER($GST_MAJORMINOR, [$GST_REQ]) -AG_GST_CHECK_GST_CHECK($GST_MAJORMINOR, [$GST_REQ], no) -AG_GST_CHECK_GST_PLUGINS_BASE($GST_MAJORMINOR, [$GSTPB_REQ], no) -AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes") - -dnl Check for documentation xrefs -GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`" -GST_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-$GST_MAJORMINOR`" -GSTPB_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-plugins-base-$GST_MAJORMINOR`" -AC_SUBST(GLIB_PREFIX) -AC_SUBST(GST_PREFIX) -AC_SUBST(GSTPB_PREFIX) - -dnl GTK is optional and used in examples -HAVE_GTK=NO -PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.2.0, HAVE_GTK_22=yes, HAVE_GTK_22=no) -if test "x$HAVE_GTK_22" = "xyes"; then - HAVE_GTK=yes - GTK_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0` - AC_SUBST(GTK_VERSION) - GTK_PREFIX=`$PKG_CONFIG --variable=prefix gdk-pixbuf-2.0` - AC_SUBST(GTK_BASE_DIR) -else - PKG_CHECK_MODULES(GTK2, gtk+-2.0, HAVE_GTK_20=yes, HAVE_GTK_20=no) -fi -if test "x$HAVE_GTK_20" = "xyes"; then - HAVE_GTK=yes -fi -GTK_CFLAGS=$GTK2_CFLAGS -GTK_LIBS=$GTK2_LIBS -AC_SUBST(GTK_LIBS) -AC_SUBST(GTK_CFLAGS) -AC_SUBST(HAVE_GTK) -AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes") - -dnl OpenGL is required -translit(dnm, m, l) AM_CONDITIONAL(USE_OPENGL, true) -AG_GST_CHECK_X -save_CPPFLAGS="$CPPFLAGS" -save_LIBS="$LIBS" -CPPFLAGS="$CPPFLAGS $X_CFLAGS" -LIBS="$LIBS $X_LIBS" -AG_GST_CHECK_FEATURE(OPENGL, [Open GL], glsink, [ - AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h, [ - HAVE_OPENGL="yes" - GL_LIBS="-lGL" - ], [ - HAVE_OPENGL="no" - ]) - AC_SUBST(GL_LIBS) -]) -CPPFLAGS="$save_CPPFLAGS" -LIBS="$save_LIBS" - -dnl Eventually use pkgconfig check -#AG_GST_CHECK_FEATURE(OPENGL, [Open GL], glsink, [ -# PKG_CHECK_MODULES(GL, gl >= 7.1.0, [ -# HAVE_GL="yes" -# AC_SUBST(GL_CFLAGS) -# AC_SUBST(GL_LIBS) -# ],[ -# HAVE_GL=no -# AC_MSG_RESULT(no) -# ]) -#]) - -dnl *** set variables based on configure arguments *** - -dnl set license and copyright notice -GST_LICENSE="LGPL" -AC_DEFINE_UNQUOTED(GST_LICENSE, "$GST_LICENSE", [GStreamer license]) -AC_SUBST(GST_LICENSE) - -dnl set location of plugin directory -AG_GST_SET_PLUGINDIR - -dnl define an ERROR_CFLAGS Makefile variable -AG_GST_SET_ERROR_CFLAGS($GST_CVS) - -dnl define correct level for debugging messages -AG_GST_SET_LEVEL_DEFAULT($GST_CVS) - -dnl used in examples -AG_GST_DEFAULT_ELEMENTS - -dnl *** plugins to includes *** - -AG_GST_CHECK_PLUGIN(gl) - -dnl *** sys plug-ins *** - -echo -AC_MSG_NOTICE([Checking libraries for plugins in sys/]) -echo - -dnl *** ext plug-ins *** -dnl keep this list sorted alphabetically ! - -if test "x$BUILD_EXTERNAL" = "xyes"; then - -echo -AC_MSG_NOTICE([Checking libraries for plugins in ext/]) -echo - -else - -dnl not building plugins with external dependencies, -dnl but we still need to set the conditionals -true - -fi dnl of EXT plugins - -dnl *** finalize CFLAGS, LDFLAGS, LIBS - -dnl Overview: -dnl GST_OPTION_CFLAGS: common flags for profiling, debugging, errors, ... -dnl GST_*: flags shared by built objects to link against GStreamer -dnl GST_ALL_LDFLAGS: linker flags shared by all -dnl GST_LIB_LDFLAGS: additional linker flags for all libaries -dnl GST_LT_LDFLAGS: library versioning of our libraries -dnl GST_PLUGIN_LDFLAGS: flags to be used for all plugins - -dnl GST_OPTION_CFLAGS -if test "x$USE_DEBUG" = xyes; then - PROFILE_CFLAGS="-g" -fi -AC_SUBST(PROFILE_CFLAGS) - -if test "x$GST_CVS" = "xyes"; then - DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED" -else - DEPRECATED_CFLAGS="" -fi -AC_SUBST(DEPRECATED_CFLAGS) - -dnl every flag in GST_OPTION_CFLAGS can be overridden at make time -GST_OPTION_CFLAGS="\$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)" -AC_SUBST(GST_OPTION_CFLAGS) - -dnl our libraries need to be versioned correctly -AC_SUBST(GST_LT_LDFLAGS) - -dnl GST_PLUGINS_GL_CFLAGS -dnl prefer internal headers to already installed ones -dnl also add builddir include for enumtypes and marshal -GST_PLUGINS_GL_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs" -AC_SUBST(GST_PLUGINS_GL_CFLAGS) - -dnl FIXME: do we want to rename to GST_ALL_* ? -dnl add GST_OPTION_CFLAGS, but overridable -GST_CFLAGS="$GST_CFLAGS \$(GST_OPTION_CFLAGS)" -AC_SUBST(GST_CFLAGS) -dnl add GCOV libs because libtool strips -fprofile-arcs -ftest-coverage -GST_LIBS="$GST_LIBS \$(GCOV_LIBS)" -AC_SUBST(GST_LIBS) - -dnl LDFLAGS really should only contain flags, not libs - they get added before -dnl whatevertarget_LIBS and -L flags here affect the rest of the linking -GST_ALL_LDFLAGS="-no-undefined" -AC_SUBST(GST_ALL_LDFLAGS) - -dnl GST_LIB_LDFLAGS -dnl linker flags shared by all libraries -dnl LDFLAGS modifier defining exported symbols from built libraries -dnl (export _gst_foo but not __gst_foo) -GST_LIB_LDFLAGS="-export-symbols-regex ^_?\(gst_\|Gst\|GST_\).*" -AC_SUBST(GST_LIB_LDFLAGS) - -dnl this really should only contain flags, not libs - they get added before -dnl whatevertarget_LIBS and -L flags here affect the rest of the linking -GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_desc\$\$' $GST_ALL_LDFLAGS" -AC_SUBST(GST_PLUGIN_LDFLAGS) - -dnl *** output files *** - -AC_CONFIG_FILES( -Makefile -gst-plugins-gl.spec -gst/Makefile -gst/gl/Makefile -sys/Makefile -ext/Makefile -gst-libs/Makefile -gst-libs/gst/Makefile -gst-libs/gst/gl/Makefile -tools/Makefile -win32/common/config.h -pkgconfig/Makefile -pkgconfig/gstreamer-gl.pc -pkgconfig/gstreamer-gl-uninstalled.pc -tests/Makefile -tests/check/Makefile -tests/examples/Makefile -tests/icles/Makefile -docs/Makefile -docs/libs/Makefile -docs/plugins/Makefile -docs/version.entities -po/Makefile.in -common/Makefile -common/m4/Makefile -m4/Makefile -) -AC_OUTPUT - -AG_GST_OUTPUT_PLUGINS +AC_PREREQ(2.52)
+
+dnl please read gstreamer/docs/random/autotools before changing this file
+
+dnl initialize autoconf
+dnl releases only do -Wall, cvs and prerelease does -Werror too
+dnl use a three digit version number for releases, and four for cvs/prerelease
+AC_INIT(GStreamer OpenGL Plug-ins, 0.10.0.1,
+ http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
+ gst-plugins-gl)
+
+AG_GST_INIT
+
+dnl initialize automake
+AM_INIT_AUTOMAKE
+
+dnl define PACKAGE_VERSION_* variables
+AS_VERSION
+
+dnl check if this is a release version
+AS_NANO(GST_CVS="no", GST_CVS="yes")
+
+dnl can autoconf find the source ?
+AC_CONFIG_SRCDIR([gst-libs/gst/gl/gstgldisplay.c])
+
+dnl define the output header for config
+AM_CONFIG_HEADER([config.h])
+
+dnl AM_MAINTAINER_MODE only provides the option to configure to enable it
+AM_MAINTAINER_MODE
+
+dnl sets host_* variables
+AC_CANONICAL_HOST
+
+dnl our libraries and install dirs use major.minor as a version
+GST_MAJORMINOR=$PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR
+dnl we override it here if we need to for the release candidate of new series
+GST_MAJORMINOR=0.10
+AC_SUBST(GST_MAJORMINOR)
+
+dnl CURRENT, REVISION, AGE
+dnl - library source changed -> increment REVISION
+dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
+dnl - interfaces added -> increment AGE
+dnl - interfaces removed -> AGE = 0
+dnl sets GST_LT_LDFLAGS
+AS_LIBTOOL(GST, 0, 0, 0)
+
+dnl FIXME: this macro doesn't actually work;
+dnl the generated libtool script has no support for the listed tags.
+dnl So this needs to be fixed first if we want to use this
+dnl AS_LIBTOOL_TAGS
+
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+
+dnl *** required versions of GStreamer stuff ***
+GST_REQ=0.10.15.1
+GSTPB_REQ=0.10.15.1
+
+dnl *** autotools stuff ****
+
+dnl allow for different autotools
+AS_AUTOTOOLS_ALTERNATE
+
+dnl Add parameters for aclocal
+AC_SUBST(ACLOCAL_AMFLAGS, "-I m4 -I common/m4")
+
+dnl set up gettext
+dnl the version check needs to stay here because autopoint greps for it
+AM_GNU_GETTEXT_VERSION([0.11.5])
+AM_GNU_GETTEXT([external])
+AG_GST_GETTEXT([gst-plugins-gl-$GST_MAJORMINOR])
+
+dnl *** check for arguments to configure ***
+
+AG_GST_ARG_DEBUG
+AG_GST_ARG_PROFILING
+AG_GST_ARG_VALGRIND
+AG_GST_ARG_GCOV
+
+AG_GST_ARG_EXAMPLES
+
+AG_GST_ARG_WITH_PKG_CONFIG_PATH
+AG_GST_ARG_WITH_PACKAGE_NAME
+AG_GST_ARG_WITH_PACKAGE_ORIGIN
+
+dnl *** checks for platform ***
+
+dnl * hardware/architecture *
+
+dnl common/m4/gst-arch.m4
+dnl check CPU type
+AG_GST_ARCH
+
+dnl check for large file support
+dnl affected plugins must include config.h
+AC_SYS_LARGEFILE
+
+dnl *** checks for programs ***
+
+dnl find a compiler
+AC_PROG_CC
+
+dnl check if the compiler supports '-c' and '-o' options
+AM_PROG_CC_C_O
+
+AC_PATH_PROG(VALGRIND_PATH, valgrind, no)
+AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
+
+dnl check for documentation tools
+GTK_DOC_CHECK([1.3])
+AS_PATH_PYTHON([2.1])
+AG_GST_PLUGIN_DOCS([1.3],[2.1])
+
+dnl *** checks for libraries ***
+
+dnl For interactive UNIX (a Sun thing)
+dnl FIXME: this adds -lcposix to LIBS, but I doubt we use LIBS
+AC_ISC_POSIX
+
+dnl libm, for sin() etc.
+AC_CHECK_LIBM
+AC_SUBST(LIBM)
+
+dnl *** checks for header files ***
+
+dnl check if we have ANSI C header files
+AC_HEADER_STDC
+
+dnl *** checks for types/defines ***
+
+dnl *** checks for structures ***
+
+dnl *** checks for compiler characteristics ***
+
+dnl make sure we can use "inline" from C code
+AC_C_INLINE
+
+dnl *** checks for library functions ***
+
+dnl Check for a way to display the function name in debug output
+AG_GST_CHECK_FUNCTION
+
+dnl *** checks for dependency libraries ***
+
+dnl GLib is required
+AG_GST_GLIB_CHECK([2.6])
+
+dnl liboil is required
+PKG_CHECK_MODULES(LIBOIL, liboil-0.3 >= 0.3.8, HAVE_LIBOIL=yes, HAVE_LIBOIL=no)
+if test "x$HAVE_LIBOIL" != "xyes"
+then
+ AC_ERROR([liboil-0.3.8 or later is required])
+fi
+
+dnl checks for gstreamer
+dnl uninstalled is selected preferentially -- see pkg-config(1)
+AG_GST_CHECK_GST($GST_MAJORMINOR, [$GST_REQ])
+AG_GST_CHECK_GST_BASE($GST_MAJORMINOR, [$GST_REQ])
+AG_GST_CHECK_GST_GDP($GST_MAJORMINOR, [$GST_REQ])
+AG_GST_CHECK_GST_CONTROLLER($GST_MAJORMINOR, [$GST_REQ])
+AG_GST_CHECK_GST_CHECK($GST_MAJORMINOR, [$GST_REQ], no)
+AG_GST_CHECK_GST_PLUGINS_BASE($GST_MAJORMINOR, [$GSTPB_REQ], no)
+AM_CONDITIONAL(HAVE_GST_CHECK, test "x$HAVE_GST_CHECK" = "xyes")
+
+dnl Check for documentation xrefs
+GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
+GST_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-$GST_MAJORMINOR`"
+GSTPB_PREFIX="`$PKG_CONFIG --variable=prefix gstreamer-plugins-base-$GST_MAJORMINOR`"
+AC_SUBST(GLIB_PREFIX)
+AC_SUBST(GST_PREFIX)
+AC_SUBST(GSTPB_PREFIX)
+
+dnl GTK is optional and used in examples
+HAVE_GTK=NO
+PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.2.0, HAVE_GTK_22=yes, HAVE_GTK_22=no)
+if test "x$HAVE_GTK_22" = "xyes"; then
+ HAVE_GTK=yes
+ GTK_VERSION=`$PKG_CONFIG --variable=gtk_binary_version gtk+-2.0`
+ AC_SUBST(GTK_VERSION)
+ GTK_PREFIX=`$PKG_CONFIG --variable=prefix gdk-pixbuf-2.0`
+ AC_SUBST(GTK_BASE_DIR)
+else
+ PKG_CHECK_MODULES(GTK2, gtk+-2.0, HAVE_GTK_20=yes, HAVE_GTK_20=no)
+fi
+if test "x$HAVE_GTK_20" = "xyes"; then
+ HAVE_GTK=yes
+fi
+GTK_CFLAGS=$GTK2_CFLAGS
+GTK_LIBS=$GTK2_LIBS
+AC_SUBST(GTK_LIBS)
+AC_SUBST(GTK_CFLAGS)
+AC_SUBST(HAVE_GTK)
+AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
+
+dnl OpenGL is required
+translit(dnm, m, l) AM_CONDITIONAL(USE_OPENGL, true)
+AG_GST_CHECK_X
+save_CPPFLAGS="$CPPFLAGS"
+save_LIBS="$LIBS"
+CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+LIBS="$LIBS $X_LIBS"
+AG_GST_CHECK_FEATURE(OPENGL, [Open GL], glsink, [
+ AG_GST_CHECK_LIBHEADER(GL, GL, glTexImage2D,, GL/gl.h, [
+ HAVE_OPENGL="yes"
+ GL_LIBS="-lGL"
+ ], [
+ HAVE_OPENGL="no"
+ ])
+ AC_SUBST(GL_LIBS)
+])
+CPPFLAGS="$save_CPPFLAGS"
+LIBS="$save_LIBS"
+
+dnl Eventually use pkgconfig check
+#AG_GST_CHECK_FEATURE(OPENGL, [Open GL], glsink, [
+# PKG_CHECK_MODULES(GL, gl >= 7.1.0, [
+# HAVE_GL="yes"
+# AC_SUBST(GL_CFLAGS)
+# AC_SUBST(GL_LIBS)
+# ],[
+# HAVE_GL=no
+# AC_MSG_RESULT(no)
+# ])
+#])
+
+dnl *** set variables based on configure arguments ***
+
+dnl set license and copyright notice
+GST_LICENSE="LGPL"
+AC_DEFINE_UNQUOTED(GST_LICENSE, "$GST_LICENSE", [GStreamer license])
+AC_SUBST(GST_LICENSE)
+
+dnl set location of plugin directory
+AG_GST_SET_PLUGINDIR
+
+dnl define an ERROR_CFLAGS Makefile variable
+AG_GST_SET_ERROR_CFLAGS($GST_CVS)
+
+dnl define correct level for debugging messages
+AG_GST_SET_LEVEL_DEFAULT($GST_CVS)
+
+dnl used in examples
+AG_GST_DEFAULT_ELEMENTS
+
+dnl *** plugins to includes ***
+
+AG_GST_CHECK_PLUGIN(gl)
+
+dnl *** sys plug-ins ***
+
+echo
+AC_MSG_NOTICE([Checking libraries for plugins in sys/])
+echo
+
+dnl *** ext plug-ins ***
+dnl keep this list sorted alphabetically !
+
+if test "x$BUILD_EXTERNAL" = "xyes"; then
+
+echo
+AC_MSG_NOTICE([Checking libraries for plugins in ext/])
+echo
+
+else
+
+dnl not building plugins with external dependencies,
+dnl but we still need to set the conditionals
+true
+
+fi dnl of EXT plugins
+
+dnl *** finalize CFLAGS, LDFLAGS, LIBS
+
+dnl Overview:
+dnl GST_OPTION_CFLAGS: common flags for profiling, debugging, errors, ...
+dnl GST_*: flags shared by built objects to link against GStreamer
+dnl GST_ALL_LDFLAGS: linker flags shared by all
+dnl GST_LIB_LDFLAGS: additional linker flags for all libaries
+dnl GST_LT_LDFLAGS: library versioning of our libraries
+dnl GST_PLUGIN_LDFLAGS: flags to be used for all plugins
+
+dnl GST_OPTION_CFLAGS
+if test "x$USE_DEBUG" = xyes; then
+ PROFILE_CFLAGS="-g"
+fi
+AC_SUBST(PROFILE_CFLAGS)
+
+if test "x$GST_CVS" = "xyes"; then
+ DEPRECATED_CFLAGS="-DGST_DISABLE_DEPRECATED"
+else
+ DEPRECATED_CFLAGS=""
+fi
+AC_SUBST(DEPRECATED_CFLAGS)
+
+dnl every flag in GST_OPTION_CFLAGS can be overridden at make time
+GST_OPTION_CFLAGS="\$(ERROR_CFLAGS) \$(DEBUG_CFLAGS) \$(PROFILE_CFLAGS) \$(GCOV_CFLAGS) \$(OPT_CFLAGS) \$(DEPRECATED_CFLAGS)"
+AC_SUBST(GST_OPTION_CFLAGS)
+
+dnl our libraries need to be versioned correctly
+AC_SUBST(GST_LT_LDFLAGS)
+
+dnl GST_PLUGINS_GL_CFLAGS
+dnl prefer internal headers to already installed ones
+dnl also add builddir include for enumtypes and marshal
+GST_PLUGINS_GL_CFLAGS="-I\$(top_srcdir)/gst-libs -I\$(top_builddir)/gst-libs"
+AC_SUBST(GST_PLUGINS_GL_CFLAGS)
+
+dnl FIXME: do we want to rename to GST_ALL_* ?
+dnl add GST_OPTION_CFLAGS, but overridable
+GST_CFLAGS="$GST_CFLAGS \$(GST_OPTION_CFLAGS)"
+AC_SUBST(GST_CFLAGS)
+dnl add GCOV libs because libtool strips -fprofile-arcs -ftest-coverage
+GST_LIBS="$GST_LIBS \$(GCOV_LIBS)"
+AC_SUBST(GST_LIBS)
+
+dnl LDFLAGS really should only contain flags, not libs - they get added before
+dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
+GST_ALL_LDFLAGS="-no-undefined"
+AC_SUBST(GST_ALL_LDFLAGS)
+
+dnl GST_LIB_LDFLAGS
+dnl linker flags shared by all libraries
+dnl LDFLAGS modifier defining exported symbols from built libraries
+dnl (export _gst_foo but not __gst_foo)
+GST_LIB_LDFLAGS="-export-symbols-regex ^_?\(gst_\|Gst\|GST_\).*"
+AC_SUBST(GST_LIB_LDFLAGS)
+
+dnl this really should only contain flags, not libs - they get added before
+dnl whatevertarget_LIBS and -L flags here affect the rest of the linking
+GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^[_]*gst_plugin_desc\$\$' $GST_ALL_LDFLAGS"
+AC_SUBST(GST_PLUGIN_LDFLAGS)
+
+dnl *** output files ***
+
+AC_CONFIG_FILES(
+Makefile
+gst-plugins-gl.spec
+gst/Makefile
+gst/gl/Makefile
+sys/Makefile
+ext/Makefile
+gst-libs/Makefile
+gst-libs/gst/Makefile
+gst-libs/gst/gl/Makefile
+tools/Makefile
+win32/common/config.h
+pkgconfig/Makefile
+pkgconfig/gstreamer-gl.pc
+pkgconfig/gstreamer-gl-uninstalled.pc
+tests/Makefile
+tests/check/Makefile
+tests/examples/Makefile
+tests/icles/Makefile
+docs/Makefile
+docs/libs/Makefile
+docs/plugins/Makefile
+docs/version.entities
+po/Makefile.in
+common/Makefile
+common/m4/Makefile
+m4/Makefile
+)
+AC_OUTPUT
+
+AG_GST_OUTPUT_PLUGINS
diff --git a/docs/.cvsignore b/docs/.cvsignore deleted file mode 100644 index e5a7abe..0000000 --- a/docs/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -version.entities diff --git a/docs/Makefile.am b/docs/Makefile.am index 6814772..5e80253 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -1 +1 @@ -SUBDIRS = libs plugins +SUBDIRS = libs plugins
diff --git a/docs/version.entities.in b/docs/version.entities.in index 79a6898..3e67cfd 100644 --- a/docs/version.entities.in +++ b/docs/version.entities.in @@ -1,2 +1,2 @@ -<!ENTITY GST_MAJORMINOR "@GST_MAJORMINOR@"> -<!ENTITY GST_VERSION "@VERSION@"> +<!ENTITY GST_MAJORMINOR "@GST_MAJORMINOR@">
+<!ENTITY GST_VERSION "@VERSION@">
diff --git a/gst-libs/Makefile.am b/gst-libs/Makefile.am index 062cb55..9f4dd99 100644 --- a/gst-libs/Makefile.am +++ b/gst-libs/Makefile.am @@ -1 +1 @@ -SUBDIRS = gst +SUBDIRS = gst
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am index 6efb9e0..49fdb74 100644 --- a/gst-libs/gst/Makefile.am +++ b/gst-libs/gst/Makefile.am @@ -1,7 +1,7 @@ - -SUBDIRS = gl - -noinst_HEADERS = \ - gettext.h \ - gst-i18n-plugin.h - +
+SUBDIRS = gl
+
+noinst_HEADERS = \
+ gettext.h \
+ gst-i18n-plugin.h
+
diff --git a/gst-libs/gst/gettext.h b/gst-libs/gst/gettext.h index 8b262f4..3052af4 100644 --- a/gst-libs/gst/gettext.h +++ b/gst-libs/gst/gettext.h @@ -1,69 +1,69 @@ -/* Convenience header for conditional use of GNU <libintl.h>. - Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Library General Public License as published - by the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. */ - -#ifndef _LIBGETTEXT_H -#define _LIBGETTEXT_H 1 - -/* NLS can be disabled through the configure --disable-nls option. */ -#if ENABLE_NLS - -/* Get declarations of GNU message catalog functions. */ -# include <libintl.h> - -#else - -/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which - chokes if dcgettext is defined as a macro. So include it now, to make - later inclusions of <locale.h> a NOP. We don't include <libintl.h> - as well because people using "gettext.h" will not include <libintl.h>, - and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> - is OK. */ -#if defined(__sun) -# include <locale.h> -#endif - -/* Disabled NLS. - The casts to 'const char *' serve the purpose of producing warnings - for invalid uses of the value returned from these functions. - On pre-ANSI systems without 'const', the config.h file is supposed to - contain "#define const". */ -# define gettext(Msgid) ((const char *) (Msgid)) -# define dgettext(Domainname, Msgid) ((const char *) (Msgid)) -# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid)) -# define ngettext(Msgid1, Msgid2, N) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) -# define dngettext(Domainname, Msgid1, Msgid2, N) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) -# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) -# define textdomain(Domainname) ((const char *) (Domainname)) -# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) -# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset)) - -#endif - -/* A pseudo function call that serves as a marker for the automated - extraction of messages, but does not call gettext(). The run-time - translation is done at a different place in the code. - The argument, String, should be a literal string. Concatenated strings - and other string expressions won't work. - The macro's expansion is not parenthesized, so that it is suitable as - initializer for static 'char[]' or 'const char[]' variables. */ -#define gettext_noop(String) String - -#endif /* _LIBGETTEXT_H */ +/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option. */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# define gettext(Msgid) ((const char *) (Msgid))
+# define dgettext(Domainname, Msgid) ((const char *) (Msgid))
+# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid))
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2))
+# define textdomain(Domainname) ((const char *) (Domainname))
+# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname))
+# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+#endif /* _LIBGETTEXT_H */
diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am index 656b8b5..32d5b2c 100644 --- a/gst-libs/gst/gl/Makefile.am +++ b/gst-libs/gst/gl/Makefile.am @@ -1,27 +1,23 @@ - -lib_LTLIBRARIES = libgstgl-@GST_MAJORMINOR@.la - -libgstgl_@GST_MAJORMINOR@_la_SOURCES = \ - glextensions.c \ - gstglbuffer.c \ - gstgldisplay.c \ - gstglfilter.c - -libgstgl_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/gl -libgstgl_@GST_MAJORMINOR@include_HEADERS = \ - glextensions.h \ - gstglbuffer.h \ - gstgldisplay.h \ - gstglfilter.h - -libgstgl_@GST_MAJORMINOR@_la_LIBADD = \ - $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) \ - $(GST_BASE_LIBS) $(GST_LIBS) \ - $(X_LIBS) $(GL_LIBS) - -libgstgl_@GST_MAJORMINOR@_la_CFLAGS = \ - $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) - -libgstgl_@GST_MAJORMINOR@_la_LDFLAGS = \ - $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS) - +
+lib_LTLIBRARIES = libgstgl-@GST_MAJORMINOR@.la
+
+libgstgl_@GST_MAJORMINOR@_la_SOURCES = \
+ gstgldisplay.c \
+ gstglbuffer.c
+
+libgstgl_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/gl
+libgstgl_@GST_MAJORMINOR@include_HEADERS = \
+ gstgldisplay.h \
+ gstglbuffer.h
+
+libgstgl_@GST_MAJORMINOR@_la_LIBADD = \
+ $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_MAJORMINOR) \
+ $(GST_BASE_LIBS) $(GST_LIBS) \
+ $(X_LIBS) $(GL_LIBS)
+
+libgstgl_@GST_MAJORMINOR@_la_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+
+libgstgl_@GST_MAJORMINOR@_la_LDFLAGS = \
+ $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
+
diff --git a/gst-libs/gst/gl/glextensions.c b/gst-libs/gst/gl/glextensions.c deleted file mode 100644 index c5bde8a..0000000 --- a/gst-libs/gst/gl/glextensions.c +++ /dev/null @@ -1,190 +0,0 @@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <GL/glx.h> -#include <GL/glxext.h> -#include <string.h> -#include <glib.h> - -#include "glextensions.h" - -int -gl_have_extension (const char *name) -{ - const char *s; - - s = (const char *) glGetString (GL_EXTENSIONS); - if (s == NULL) - return FALSE; - - if (strstr (s, name)) - return TRUE; - return FALSE; -} - -extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *); - -#define DEFINE_FUNC_RET(name,return_type,prototype,args) \ -return_type name prototype \ -{ \ - static return_type (*func) prototype; \ - if (func == NULL) { \ - func = (void *) glXGetProcAddressARB ((unsigned char *) #name); \ - } \ - return func args; \ -} - -#define DEFINE_FUNC(name,prototype,args) \ -void name prototype \ -{ \ - static void (*func) prototype; \ - if (func == NULL) { \ - func = (void *) glXGetProcAddressARB ((unsigned char *) #name); \ - } \ - func args; \ -} - -DEFINE_FUNC_RET (glCreateShaderObjectARB, GLhandleARB, - (GLenum shaderType), (shaderType)); -#if 0 -typedef GLhandleARB type_glCreateShaderObjectARB (GLenum shaderType); - -GLhandleARB -glCreateShaderObjectARB (GLenum shaderType) -{ - type_glCreateShaderObjectARB *func; - - if (func == NULL) { - func = (type_glCreateShaderObjectARB *) - glXGetProcAddress ((unsigned char *) "glCreateShaderObjectARB"); - } - return (*func) (shaderType); -} -#endif - -DEFINE_FUNC (glShaderSourceARB, - (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, - const GLint * length), (shaderObj, count, string, length)); - -DEFINE_FUNC (glUniform2fARB, - (GLint location, GLfloat val1, GLfloat val2), (location, val1, val2)); - -DEFINE_FUNC_RET (glGetUniformLocationARB, GLint, - (GLhandleARB programObj, const GLcharARB * name), (programObj, name)); - -DEFINE_FUNC (glUniform1iARB, (GLint location, GLint val), (location, val)); - -DEFINE_FUNC (glGetObjectParameterivARB, (GLhandleARB object, GLenum pname, - GLint * params), (object, pname, params)); - -DEFINE_FUNC (glCompileShaderARB, (GLhandleARB shader), (shader)); - -DEFINE_FUNC (glGetInfoLogARB, (GLhandleARB object, GLsizei maxLength, - GLsizei * length, GLcharARB * infoLog), (object, maxLength, length, - infoLog)); - -DEFINE_FUNC_RET (glCreateProgramObjectARB, GLhandleARB, (void), ()); - -DEFINE_FUNC (glAttachObjectARB, (GLhandleARB program, GLhandleARB shader), - (program, shader)); - -DEFINE_FUNC (glLinkProgramARB, (GLhandleARB program), (program)); - -DEFINE_FUNC (glUseProgramObjectARB, (GLhandleARB program), (program)); - -DEFINE_FUNC (glPixelDataRangeNV, (GLenum target, GLsizei length, void *pointer), - (target, length, pointer)); - -DEFINE_FUNC_RET (glXGetSyncValuesOML, Bool, - (Display * display, GLXDrawable drawable, int64_t * ust, int64_t * msc, - int64_t * sbc), (display, drawable, ust, msc, sbc)); - -DEFINE_FUNC_RET (glXGetMscRateOML, Bool, - (Display * display, GLXDrawable drawable, int32_t * numerator, - int32_t * denominator), (display, drawable, numerator, denominator)); - -DEFINE_FUNC_RET (glXSwapBuffersMscOML, int64_t, - (Display * display, GLXDrawable drawable, int64_t target_msc, - int64_t divisor, int64_t remainder), (display, drawable, target_msc, - divisor, remainder)); - -DEFINE_FUNC_RET (glXWaitForMscOML, Bool, - (Display * display, GLXDrawable drawable, int64_t target_msc, - int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, - int64_t * sbc), (display, drawable, target_msc, divisor, remainder, ust, - msc, sbc)); - -DEFINE_FUNC_RET (glXWaitForSbcOML, Bool, - (Display * display, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, - int64_t * msc, int64_t * sbc), (display, drawable, target_sbc, ust, msc, - sbc)); - -DEFINE_FUNC_RET (glXSwapIntervalSGI, int, (int interval), (interval)); - -DEFINE_FUNC_RET (glXSwapIntervalMESA, int, (unsigned int interval), (interval)); - -#if 0 -DEFINE_FUNC (glBindFramebufferEXT, (int target, uint framebuffer), - (target, framebuffer)); - -DEFINE_FUNC (glDeleteRenderbuffersEXT, (int n, unsigned int *renderbuffers), - (n, renderbuffers)); -DEFINE_FUNC (glGenRenderbuffersEXT, (int n, unsigned int *renderbuffers), - (n, renderbuffers)); -DEFINE_FUNC (glRenderbufferStorageEXT, (int target, int internalformat, - int width, int height), (target, internalformat, width, height)); -DEFINE_FUNC (glBindRenderbufferEXT, (int target, unsigned int renderbuffer), - (target, renderbuffer)); -DEFINE_FUNC (glFramebufferRenderbufferEXT, - (int target, int attachment, int renderbuffertarget, - unsigned int renderbuffer), (target, attachment, renderbuffertarget, - renderbuffer)); -#endif - -/* EXT_framebuffer_object */ -DEFINE_FUNC_RET (glIsRenderbufferEXT, Bool, - (GLuint renderbuffer), (renderbuffer)); -DEFINE_FUNC (glBindRenderbufferEXT, - (GLenum target, GLuint renderbuffer), (target, renderbuffer)); -DEFINE_FUNC (glDeleteRenderbuffersEXT, - (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)); -DEFINE_FUNC (glGenRenderbuffersEXT, - (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)); -DEFINE_FUNC (glRenderbufferStorageEXT, - (GLenum target, GLenum internalformat, GLsizei width, GLsizei height), - (target, internalformat, width, height)); -DEFINE_FUNC (glGetRenderbufferParameterivEXT, - (GLenum target, GLenum pname, GLint * params), (target, pname, params)); -DEFINE_FUNC_RET (glIsFramebufferEXT, Bool, (GLuint framebuffer), (framebuffer)); -DEFINE_FUNC (glBindFramebufferEXT, - (GLenum target, GLuint framebuffer), (target, framebuffer)); -DEFINE_FUNC (glDeleteFramebuffersEXT, - (GLsizei n, GLuint * framebuffers), (n, framebuffers)); -DEFINE_FUNC (glGenFramebuffersEXT, - (GLsizei n, GLuint * framebuffers), (n, framebuffers)); -DEFINE_FUNC_RET (glCheckFramebufferStatusEXT, GLenum, - (GLenum target), (target)); -DEFINE_FUNC (glFramebufferTexture1DEXT, - (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, - GLint level), (target, attachment, textarget, texture, level)); -DEFINE_FUNC (glFramebufferTexture2DEXT, (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, GLint level), (target, attachment, - textarget, texture, level)); -DEFINE_FUNC (glFramebufferTexture3DEXT, (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, GLint level, GLint zoffset), (target, - attachment, textarget, texture, level, zoffset)); -DEFINE_FUNC (glFramebufferRenderbufferEXT, (GLenum target, GLenum attachment, - GLenum renderbuffertarget, GLuint renderbuffer), (target, attachment, - renderbuffertarget, renderbuffer)); -DEFINE_FUNC (glGetFramebufferAttachmentParameterivEXT, (GLenum target, - GLenum pname, GLint * params), (target, pname, params)); -DEFINE_FUNC (glGenerateMipmapEXT, (GLenum target), (target)); - -DEFINE_FUNC (glWindowPos2iARB, (GLint x, GLint y), (x, y)); - -DEFINE_FUNC (glGenProgramsARB, (GLsizei a, GLuint * b), (a, b)); -DEFINE_FUNC (glBindProgramARB, (GLenum a, GLuint b), (a, b)); -DEFINE_FUNC (glProgramStringARB, - (GLenum a, GLenum b, GLsizei c, const GLvoid * d), (a, b, c, d)); diff --git a/gst-libs/gst/gl/glextensions.h b/gst-libs/gst/gl/glextensions.h deleted file mode 100644 index 8ac880f..0000000 --- a/gst-libs/gst/gl/glextensions.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef __GST_GLEXTENSIONS_H__ -#define __GST_GLEXTENSIONS_H__ - -#include <GL/gl.h> -//#include <glib.h> - -int gl_have_extension (const char *name); - -GLhandleARB glCreateShaderObjectARB (GLenum shaderType); -void glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length); -void glUniform2fARB (GLint location, GLfloat val1, GLfloat val2); -GLint glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); -void glUniform1iARB (GLint location, GLint val); -void glCompileShaderARB (GLhandleARB shader); -void glGetObjectParameterivARB (GLhandleARB object, GLenum pname, GLint *params); -void glGetInfoLogARB (GLhandleARB object, GLsizei maxLength, GLsizei *length, - GLcharARB *infoLog); -GLhandleARB glCreateProgramObjectARB (void); -void glAttachObjectARB (GLhandleARB program, GLhandleARB shader); -void glLinkProgramARB (GLhandleARB program); -void glUseProgramObjectARB (GLhandleARB program); -void glPixelDataRangeNV(GLenum target, GLsizei length, void *pointer); -void glActiveTexture(GLenum target); -Bool glXGetSyncValuesOML (Display *, GLXDrawable, int64_t *, int64_t *, int64_t *); -Bool glXGetMscRateOML (Display *, GLXDrawable, int32_t *, int32_t *); -int64_t glXSwapBuffersMscOML (Display *, GLXDrawable, int64_t, int64_t, int64_t); -Bool glXWaitForMscOML (Display *, GLXDrawable, int64_t, int64_t, int64_t, int64_t *, int64_t *, int64_t *); -Bool glXWaitForSbcOML (Display *, GLXDrawable, int64_t, int64_t *, int64_t *, int64_t *); -int glXSwapIntervalSGI (int); -int glXSwapIntervalMESA (unsigned int); - -/* EXT_framebuffer_object */ -Bool glIsRenderbufferEXT (GLuint renderbuffer); -void glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); -void glDeleteRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -void glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -void glRenderbufferStorageEXT (GLenum target, GLenum internalformat, - GLsizei width, GLsizei height); -void glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); -Bool glIsFramebufferEXT (GLuint framebuffer); -void glBindFramebufferEXT (GLenum target, GLuint framebuffer); -void glDeleteFramebuffersEXT (GLsizei n, GLuint *framebuffers); -void glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); -GLenum glCheckFramebufferStatusEXT (GLenum target); -void glFramebufferTexture1DEXT (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, GLint level); -void glFramebufferTexture2DEXT (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, GLint level); -void glFramebufferTexture3DEXT (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, GLint level, GLint zoffset); -void glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, - GLenum renderbuffertarget, GLuint renderbuffer); -void glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum pname, - GLint *params); -void glGenerateMipmapEXT (GLenum target); - -void glWindowPos2iARB (GLint x, GLint y); - -void glGenProgramsARB (GLsizei, GLuint *); -void glBindProgramARB (GLenum, GLuint); -void glProgramStringARB (GLenum, GLenum, GLsizei, const GLvoid *); - -#endif - diff --git a/gst-libs/gst/gl/gstglbuffer.c b/gst-libs/gst/gl/gstglbuffer.c deleted file mode 100644 index b046823..0000000 --- a/gst-libs/gst/gl/gstglbuffer.c +++ /dev/null @@ -1,454 +0,0 @@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gstglbuffer.h> -#include <gstgldisplay.h> -#include <GL/glext.h> -#include <unistd.h> -#include "glextensions.h" - -#include <string.h> - -static GObjectClass *gst_gl_buffer_parent_class; - -static void -gst_gl_buffer_finalize (GstGLBuffer * buffer) -{ - gst_gl_display_lock (buffer->display); - - glDeleteTextures (1, &buffer->texture); - if (buffer->texture_u) { - glDeleteTextures (1, &buffer->texture_u); - } - if (buffer->texture_v) { - glDeleteTextures (1, &buffer->texture_v); - } - - gst_gl_display_unlock (buffer->display); - g_object_unref (buffer->display); - - GST_MINI_OBJECT_CLASS (gst_gl_buffer_parent_class)-> - finalize (GST_MINI_OBJECT (buffer)); -} - -static void -gst_gl_buffer_init (GstGLBuffer * buffer, gpointer g_class) -{ - -} - -static void -gst_gl_buffer_class_init (gpointer g_class, gpointer class_data) -{ - GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS (g_class); - - gst_gl_buffer_parent_class = g_type_class_peek_parent (g_class); - - mini_object_class->finalize = (GstMiniObjectFinalizeFunction) - gst_gl_buffer_finalize; -} - - -GType -gst_gl_buffer_get_type (void) -{ - static GType _gst_gl_buffer_type; - - if (G_UNLIKELY (_gst_gl_buffer_type == 0)) { - static const GTypeInfo info = { - sizeof (GstBufferClass), - NULL, - NULL, - gst_gl_buffer_class_init, - NULL, - NULL, - sizeof (GstGLBuffer), - 0, - (GInstanceInitFunc) gst_gl_buffer_init, - NULL - }; - _gst_gl_buffer_type = g_type_register_static (GST_TYPE_BUFFER, - "GstGLBuffer", &info, 0); - } - return _gst_gl_buffer_type; -} - - -GstGLBuffer * -gst_gl_buffer_new (GstGLDisplay * display, int width, int height) -{ - g_return_val_if_fail (display != NULL, NULL); - g_return_val_if_fail (width > 0, NULL); - g_return_val_if_fail (height > 0, NULL); - - return gst_gl_buffer_new_with_format (display, GST_GL_BUFFER_FORMAT_RGBA, - width, height); -} - -GstGLBuffer * -gst_gl_buffer_new_with_format (GstGLDisplay * display, - GstGLBufferFormat format, int width, int height) -{ - GstGLBuffer *buffer; - - g_return_val_if_fail (format != GST_GL_BUFFER_FORMAT_UNKNOWN, NULL); - g_return_val_if_fail (display != NULL, NULL); - g_return_val_if_fail (width > 0, NULL); - g_return_val_if_fail (height > 0, NULL); - - buffer = (GstGLBuffer *) gst_mini_object_new (GST_TYPE_GL_BUFFER); - - buffer->display = g_object_ref (display); - buffer->width = width; - buffer->height = height; - buffer->format = format; - GST_BUFFER_SIZE (buffer) = gst_gl_buffer_format_get_size (format, width, - height); - - gst_gl_display_lock (buffer->display); - glGenTextures (1, &buffer->texture); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture); - switch (format) { - case GST_GL_BUFFER_FORMAT_RGBA: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, - buffer->width, buffer->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - break; - case GST_GL_BUFFER_FORMAT_RGB: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGB, - buffer->width, buffer->height, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); - break; - case GST_GL_BUFFER_FORMAT_YUYV: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_YCBCR_MESA, - buffer->width, buffer->height, - 0, GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, NULL); - break; - case GST_GL_BUFFER_FORMAT_PLANAR444: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - buffer->width, buffer->height, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - - glGenTextures (1, &buffer->texture_u); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_u); - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - buffer->width, buffer->height, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - - glGenTextures (1, &buffer->texture_v); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_v); - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - buffer->width, buffer->height, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - break; - case GST_GL_BUFFER_FORMAT_PLANAR422: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - buffer->width, buffer->height, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - - glGenTextures (1, &buffer->texture_u); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_u); - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - GST_ROUND_UP_2 (buffer->width) / 2, buffer->height, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - - glGenTextures (1, &buffer->texture_v); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_v); - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - GST_ROUND_UP_2 (buffer->width) / 2, buffer->height, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - break; - case GST_GL_BUFFER_FORMAT_PLANAR420: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - buffer->width, buffer->height, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - - glGenTextures (1, &buffer->texture_u); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_u); - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - GST_ROUND_UP_2 (buffer->width) / 2, - GST_ROUND_UP_2 (buffer->height) / 2, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - - glGenTextures (1, &buffer->texture_v); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_v); - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_LUMINANCE, - GST_ROUND_UP_2 (buffer->width) / 2, - GST_ROUND_UP_2 (buffer->height) / 2, - 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL); - break; - default: - g_warning ("GL buffer format not handled"); - } - - gst_gl_display_unlock (buffer->display); - - return buffer; -} - -GstGLBuffer * -gst_gl_buffer_new_from_video_format (GstGLDisplay * display, - GstVideoFormat video_format, int width, int height) -{ - GstGLBuffer *buffer; - - g_return_val_if_fail (width > 0, NULL); - g_return_val_if_fail (height > 0, NULL); - - buffer = gst_gl_buffer_new_with_format (display, - gst_gl_buffer_format_from_video_format (video_format), width, height); - - switch (video_format) { - case GST_VIDEO_FORMAT_RGBx: - case GST_VIDEO_FORMAT_BGRx: - case GST_VIDEO_FORMAT_xRGB: - case GST_VIDEO_FORMAT_xBGR: - buffer->is_yuv = FALSE; - break; - case GST_VIDEO_FORMAT_YUY2: - case GST_VIDEO_FORMAT_UYVY: - /* counterintuitive: when you use a GL_YCBCR_MESA texture, the - * colorspace is automatically converted, so it's referred to - * as RGB */ - buffer->is_yuv = FALSE; - break; - case GST_VIDEO_FORMAT_AYUV: - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - buffer->is_yuv = TRUE; - break; - default: - g_assert_not_reached (); - } - - return buffer; -} - -void -gst_gl_buffer_upload (GstGLBuffer * buffer, GstVideoFormat video_format, - void *data) -{ - int width = buffer->width; - int height = buffer->height; - - GST_DEBUG ("uploading %p %dx%d", data, width, height); - - g_return_if_fail (buffer->format == - gst_gl_buffer_format_from_video_format (video_format)); - - gst_gl_display_lock (buffer->display); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture); - - switch (video_format) { - case GST_VIDEO_FORMAT_RGBx: - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_BGRx: - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_AYUV: - case GST_VIDEO_FORMAT_xRGB: - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_xBGR: - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_YUY2: - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, data); - break; - case GST_VIDEO_FORMAT_UYVY: - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_MESA, data); - break; - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_LUMINANCE, GL_UNSIGNED_BYTE, data); - - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_u); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, - GST_ROUND_UP_2 (buffer->width) / 2, - GST_ROUND_UP_2 (buffer->height) / 2, - GL_LUMINANCE, GL_UNSIGNED_BYTE, - (guint8 *) data + - gst_video_format_get_component_offset (video_format, 1, width, - height)); - - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, buffer->texture_v); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, - GST_ROUND_UP_2 (buffer->width) / 2, - GST_ROUND_UP_2 (buffer->height) / 2, - GL_LUMINANCE, GL_UNSIGNED_BYTE, - (guint8 *) data + - gst_video_format_get_component_offset (video_format, 2, width, - height)); - break; - default: - g_assert_not_reached (); - } - - gst_gl_display_unlock (buffer->display); -} - - -void -gst_gl_buffer_download (GstGLBuffer * buffer, GstVideoFormat video_format, - void *data) -{ - GLuint fbo; - - g_return_if_fail (buffer->format == - gst_gl_buffer_format_from_video_format (video_format)); - - GST_DEBUG ("downloading"); - - gst_gl_display_lock (buffer->display); - - /* we need a reset function */ - glMatrixMode (GL_COLOR); - glLoadIdentity (); - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_BIAS, 0); - glPixelTransferf (GL_POST_COLOR_MATRIX_GREEN_BIAS, 0); - glPixelTransferf (GL_POST_COLOR_MATRIX_BLUE_BIAS, 0); - - glGenFramebuffersEXT (1, &fbo); - glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, fbo); - - glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, - GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_RECTANGLE_ARB, buffer->texture, 0); - - glDrawBuffer (GL_COLOR_ATTACHMENT1_EXT); - glReadBuffer (GL_COLOR_ATTACHMENT1_EXT); - - g_assert (glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT) == - GL_FRAMEBUFFER_COMPLETE_EXT); - - switch (video_format) { - case GST_VIDEO_FORMAT_RGBx: - glReadPixels (0, 0, buffer->width, buffer->height, GL_RGBA, - GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_BGRx: - glReadPixels (0, 0, buffer->width, buffer->height, GL_BGRA, - GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_xBGR: - glReadPixels (0, 0, buffer->width, buffer->height, GL_RGBA, - GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_AYUV: - case GST_VIDEO_FORMAT_xRGB: - glReadPixels (0, 0, buffer->width, buffer->height, GL_BGRA, - GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_YUY2: - case GST_VIDEO_FORMAT_UYVY: - g_warning ("video format not supported for download from GL texture"); - break; - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - glReadPixels (0, 0, buffer->width, buffer->height, - GL_LUMINANCE, GL_UNSIGNED_BYTE, data); - - glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, - GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_RECTANGLE_ARB, - buffer->texture_u, 0); - glReadPixels (0, 0, - GST_ROUND_UP_2 (buffer->width) / 2, - GST_ROUND_UP_2 (buffer->height) / 2, - GL_LUMINANCE, GL_UNSIGNED_BYTE, - (guint8 *) data + - gst_video_format_get_component_offset (video_format, 1, buffer->width, - buffer->height)); - - glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, - GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_RECTANGLE_ARB, - buffer->texture_v, 0); - glReadPixels (0, 0, - GST_ROUND_UP_2 (buffer->width) / 2, - GST_ROUND_UP_2 (buffer->height) / 2, - GL_LUMINANCE, GL_UNSIGNED_BYTE, - (guint8 *) data + - gst_video_format_get_component_offset (video_format, 2, buffer->width, - buffer->height)); - break; - default: - g_assert_not_reached (); - } - - glDeleteFramebuffersEXT (1, &fbo); - - gst_gl_display_unlock (buffer->display); -} - - - -/* buffer format */ - -GstGLBufferFormat -gst_gl_buffer_format_from_video_format (GstVideoFormat format) -{ - switch (format) { - case GST_VIDEO_FORMAT_RGBx: - case GST_VIDEO_FORMAT_BGRx: - case GST_VIDEO_FORMAT_xRGB: - case GST_VIDEO_FORMAT_xBGR: - case GST_VIDEO_FORMAT_RGBA: - case GST_VIDEO_FORMAT_BGRA: - case GST_VIDEO_FORMAT_ARGB: - case GST_VIDEO_FORMAT_ABGR: - case GST_VIDEO_FORMAT_AYUV: - return GST_GL_BUFFER_FORMAT_RGBA; - case GST_VIDEO_FORMAT_RGB: - case GST_VIDEO_FORMAT_BGR: - return GST_GL_BUFFER_FORMAT_RGB; - case GST_VIDEO_FORMAT_YUY2: - case GST_VIDEO_FORMAT_UYVY: - return GST_GL_BUFFER_FORMAT_YUYV; - case GST_VIDEO_FORMAT_I420: - case GST_VIDEO_FORMAT_YV12: - return GST_GL_BUFFER_FORMAT_PLANAR420; - default: - GST_WARNING ("GstVideoFormat %d not implemented", format); - /* fall through */ - case GST_VIDEO_FORMAT_UNKNOWN: - return GST_GL_BUFFER_FORMAT_UNKNOWN; - } - - g_return_val_if_reached (GST_GL_BUFFER_FORMAT_UNKNOWN); -} - -int -gst_gl_buffer_format_get_size (GstGLBufferFormat format, int width, int height) -{ - /* this is not strictly true, but it's used for compatibility with - * queue and BaseTransform */ - return width * height * 4; -} - -gboolean -gst_gl_buffer_format_parse_caps (GstCaps * caps, GstGLBufferFormat * format, - int *width, int *height) -{ - GstStructure *structure; - int format_as_int; - gboolean ret; - - structure = gst_caps_get_structure (caps, 0); - - if (!gst_structure_has_name (structure, "video/x-raw-gl")) { - return FALSE; - } - - ret = gst_structure_get_int (structure, "format", &format_as_int); - *format = format_as_int; - ret &= gst_structure_get_int (structure, "width", width); - ret &= gst_structure_get_int (structure, "height", height); - - return ret; -} diff --git a/gst-libs/gst/gl/gstglbuffer.h b/gst-libs/gst/gl/gstglbuffer.h deleted file mode 100644 index 0cf27de..0000000 --- a/gst-libs/gst/gl/gstglbuffer.h +++ /dev/null @@ -1,76 +0,0 @@ - -#ifndef _GST_GL_BUFFER_H_ -#define _GST_GL_BUFFER_H_ - -#include <gst/gst.h> -#include <gst/video/video.h> -#include <gstgldisplay.h> - -typedef struct _GstGLBuffer GstGLBuffer; - -#define GST_TYPE_GL_BUFFER (gst_gl_buffer_get_type()) - -#define GST_IS_GL_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_GL_BUFFER)) -#define GST_GL_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_GL_BUFFER, GstGLBuffer)) - -typedef enum { - GST_GL_BUFFER_FORMAT_UNKNOWN, - GST_GL_BUFFER_FORMAT_RGBA, - GST_GL_BUFFER_FORMAT_RGB, - GST_GL_BUFFER_FORMAT_YUYV, - GST_GL_BUFFER_FORMAT_PLANAR444, - GST_GL_BUFFER_FORMAT_PLANAR422, - GST_GL_BUFFER_FORMAT_PLANAR420 -} GstGLBufferFormat; - -struct _GstGLBuffer { - GstBuffer buffer; - - GstGLDisplay *display; - - GstGLBufferFormat format; - gboolean is_yuv; - - GLuint texture; - GLuint texture_u; - GLuint texture_v; - - int width; - int height; -}; - -GType gst_gl_buffer_get_type (void); - -#define gst_gl_buffer_ref(x) ((GstGLBuffer *)(gst_buffer_ref((GstBuffer *)(x)))) -#define gst_gl_buffer_unref(x) (gst_buffer_unref((GstBuffer *)(x))) - -GstGLBuffer * gst_gl_buffer_new (GstGLDisplay *display, - int width, int height); -GstGLBuffer * gst_gl_buffer_new_with_format (GstGLDisplay *display, - GstGLBufferFormat format, int width, int height); -GstGLBuffer * gst_gl_buffer_new_from_video_format (GstGLDisplay *display, - GstVideoFormat format, int width, int height); -void gst_gl_buffer_upload (GstGLBuffer *buffer, - GstVideoFormat format, void *data); -void gst_gl_buffer_download (GstGLBuffer *buffer, GstVideoFormat format, - void *data); - - -#define GST_GL_VIDEO_CAPS \ - "video/x-raw-gl," \ - "format=(int)1," \ - "is_yuv=(boolean)FALSE," \ - "width=(int)[1,2048]," \ - "height=(int)[1,2048]," \ - "pixel-aspect-ratio=(fraction)1/1," \ - "framerate=(fraction)[0/1,100/1]" - -GstGLBufferFormat gst_gl_buffer_format_from_video_format (GstVideoFormat format); -int gst_gl_buffer_format_get_size (GstGLBufferFormat format, int width, - int height); -gboolean gst_gl_buffer_format_parse_caps (GstCaps *caps, GstGLBufferFormat *format, - int *width, int *height); - - -#endif - diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c deleted file mode 100644 index d04242c..0000000 --- a/gst-libs/gst/gl/gstgldisplay.c +++ /dev/null @@ -1,875 +0,0 @@ -/* gstgldisplay.c - * Copyright (C) 2007 David A. Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "gstgldisplay.h" -#include "glextensions.h" -#include <gst/gst.h> - -#include <string.h> - -static void gst_gl_display_finalize (GObject * object); -static void gst_gl_display_init_tmp_window (GstGLDisplay * display); - -GST_BOILERPLATE (GstGLDisplay, gst_gl_display, GObject, G_TYPE_OBJECT); - -static void -gst_gl_display_base_init (gpointer g_class) -{ - -} - -static void -gst_gl_display_class_init (GstGLDisplayClass * klass) -{ - G_OBJECT_CLASS (klass)->finalize = gst_gl_display_finalize; -} - -static void -gst_gl_display_init (GstGLDisplay * display, GstGLDisplayClass * klass) -{ - - display->lock = g_mutex_new (); - -} - -static void -gst_gl_display_finalize (GObject * object) -{ - GstGLDisplay *display = GST_GL_DISPLAY (object); - - GST_DEBUG ("finalize %p", object); - - if (display->window != None) { - XDestroyWindow (display->display, display->window); - } - if (display->context) { - glXDestroyContext (display->display, display->context); - } - //if (display->visinfo) { - // XFree (display->visinfo); - //} - if (display->display) { - XCloseDisplay (display->display); - } - - if (display->lock) { - g_mutex_free (display->lock); - } -} - -static gboolean gst_gl_display_check_features (GstGLDisplay * display); - -GstGLDisplay * -gst_gl_display_new (void) -{ - return g_object_new (GST_TYPE_GL_DISPLAY, NULL); -} - -//#define HANDLE_X_ERRORS -#ifdef HANDLE_X_ERRORS -static int -x_error_handler (Display * display, XErrorEvent * event) -{ - g_assert_not_reached (); -} -#endif - -gboolean -gst_gl_display_connect (GstGLDisplay * display, const char *display_name) -{ - gboolean usable; - XGCValues values; - XPixmapFormatValues *px_formats; - int n_formats; - int i; - - display->display = XOpenDisplay (display_name); - if (display->display == NULL) { - return FALSE; - } -#ifdef HANDLE_X_ERRORS - XSynchronize (display->display, True); - XSetErrorHandler (x_error_handler); -#endif - - usable = gst_gl_display_check_features (display); - if (!usable) { - return FALSE; - } - - display->screen = DefaultScreenOfDisplay (display->display); - display->screen_num = DefaultScreen (display->display); - display->visual = DefaultVisual (display->display, display->screen_num); - display->root = DefaultRootWindow (display->display); - display->white = XWhitePixel (display->display, display->screen_num); - display->black = XBlackPixel (display->display, display->screen_num); - display->depth = DefaultDepthOfScreen (display->screen); - - display->gc = XCreateGC (display->display, - DefaultRootWindow (display->display), 0, &values); - - px_formats = XListPixmapFormats (display->display, &n_formats); - for (i = 0; i < n_formats; i++) { - GST_DEBUG ("%d: depth %d bpp %d pad %d", i, - px_formats[i].depth, - px_formats[i].bits_per_pixel, px_formats[i].scanline_pad); - } - - gst_gl_display_init_tmp_window (display); - - return TRUE; -} - -static gboolean -gst_gl_display_check_features (GstGLDisplay * display) -{ - gboolean ret; - XVisualInfo *visinfo; - Screen *screen; - Window root; - int scrnum; - int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, GLX_RED_SIZE, 8, - GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, None - }; - XSetWindowAttributes attr; - int error_base; - int event_base; - int mask; - const char *extstring; - Window window; - - screen = XDefaultScreenOfDisplay (display->display); - scrnum = XScreenNumberOfScreen (screen); - root = XRootWindow (display->display, scrnum); - - ret = glXQueryExtension (display->display, &error_base, &event_base); - if (!ret) { - GST_DEBUG ("No GLX extension"); - return FALSE; - } - - visinfo = glXChooseVisual (display->display, scrnum, attrib); - if (visinfo == NULL) { - GST_DEBUG ("No usable visual"); - return FALSE; - } - - display->visinfo = visinfo; - - display->context = glXCreateContext (display->display, visinfo, NULL, True); - - attr.background_pixel = 0; - attr.border_pixel = 0; - attr.colormap = XCreateColormap (display->display, root, - visinfo->visual, AllocNone); - attr.event_mask = StructureNotifyMask | ExposureMask; - attr.override_redirect = True; - - mask = CWBackPixel | CWBorderPixel | CWColormap | CWOverrideRedirect; - - GST_DEBUG ("creating window with visual %ld", visinfo->visualid); - - window = XCreateWindow (display->display, root, 0, 0, - 100, 100, 0, visinfo->depth, InputOutput, visinfo->visual, mask, &attr); - - XSync (display->display, FALSE); - - glXMakeCurrent (display->display, window, display->context); - - glGetIntegerv (GL_MAX_TEXTURE_SIZE, &display->max_texture_size); - - extstring = (const char *) glGetString (GL_EXTENSIONS); - - display->have_ycbcr_texture = FALSE; -#ifdef GL_YCBCR_MESA - if (strstr (extstring, "GL_MESA_ycbcr_texture")) { - display->have_ycbcr_texture = TRUE; - } -#endif - - display->have_color_matrix = FALSE; -#ifdef GL_POST_COLOR_MATRIX_RED_BIAS - if (strstr (extstring, "GL_SGI_color_matrix")) { - display->have_color_matrix = TRUE; - } -#endif - - display->have_texture_rectangle = FALSE; -#ifdef GL_TEXTURE_RECTANGLE_ARB - if (strstr (extstring, "GL_ARB_texture_rectangle")) { - display->have_texture_rectangle = TRUE; - } -#endif - - glXMakeCurrent (display->display, None, NULL); - XDestroyWindow (display->display, window); - - return TRUE; -} - -gboolean -gst_gl_display_can_handle_type (GstGLDisplay * display, GstVideoFormat type) -{ - switch (type) { - case GST_VIDEO_FORMAT_RGBx: - case GST_VIDEO_FORMAT_BGRx: - case GST_VIDEO_FORMAT_xRGB: - case GST_VIDEO_FORMAT_xBGR: - return TRUE; - case GST_VIDEO_FORMAT_YUY2: - case GST_VIDEO_FORMAT_UYVY: - return display->have_ycbcr_texture; - case GST_VIDEO_FORMAT_AYUV: - return display->have_color_matrix; - default: - return FALSE; - } -} - -void -gst_gl_display_lock (GstGLDisplay * display) -{ - gboolean ret; - - g_assert (display->window != None); - g_assert (display->context != NULL); - - g_mutex_lock (display->lock); - ret = glXMakeCurrent (display->display, display->window, display->context); - if (!ret) { - g_warning ("glxMakeCurrent failed"); - } - gst_gl_display_check_error (display, __LINE__); -} - -void -gst_gl_display_unlock (GstGLDisplay * display) -{ - gst_gl_display_check_error (display, __LINE__); - glXMakeCurrent (display->display, None, NULL); - g_mutex_unlock (display->lock); -} - -static void -gst_gl_display_init_tmp_window (GstGLDisplay * display) -{ - XSetWindowAttributes attr = { 0 }; - int scrnum; - int mask; - Window root; - Window parent_window; - Screen *screen; - int width; - int height; - - GST_DEBUG ("creating temp window"); - - screen = XDefaultScreenOfDisplay (display->display); - scrnum = XScreenNumberOfScreen (screen); - root = XRootWindow (display->display, scrnum); - - attr.background_pixel = 0; - attr.border_pixel = 0; - attr.colormap = XCreateColormap (display->display, root, - display->visinfo->visual, AllocNone); - if (display->parent_window != None) { - XWindowAttributes parent_attr; - - attr.override_redirect = True; - parent_window = display->parent_window; - - XGetWindowAttributes (display->display, parent_window, &parent_attr); - width = parent_attr.width; - height = parent_attr.height; - } else { - attr.override_redirect = False; - parent_window = root; - width = 100; - height = 100; - } - - mask = CWBackPixel | CWBorderPixel | CWColormap | CWOverrideRedirect; - - display->window = XCreateWindow (display->display, - parent_window, 0, 0, width, height, - 0, display->visinfo->depth, InputOutput, - display->visinfo->visual, mask, &attr); - if (display->visible) { - XMapWindow (display->display, display->window); - } - XSync (display->display, FALSE); -} - -static void -gst_gl_display_destroy_tmp_window (GstGLDisplay * display) -{ - XDestroyWindow (display->display, display->window); -} - -void -gst_gl_display_set_visible (GstGLDisplay * display, gboolean visible) -{ - if (display->visible == visible) - return; - display->visible = visible; - if (display->visible) { - XMapWindow (display->display, display->window); - } else { - XUnmapWindow (display->display, display->window); - } - XSync (display->display, FALSE); -} - -void -gst_gl_display_set_window (GstGLDisplay * display, Window window) -{ - g_mutex_lock (display->lock); - - if (display->display == NULL) { - display->parent_window = window; - } else { - if (window != display->parent_window) { - XSync (display->display, False); - - gst_gl_display_destroy_tmp_window (display); - - display->parent_window = window; - - gst_gl_display_init_tmp_window (display); - } - } - - g_mutex_unlock (display->lock); -} - -void -gst_gl_display_update_window (GstGLDisplay * display) -{ - XWindowAttributes attr; - - g_return_if_fail (display != NULL); - - g_mutex_lock (display->lock); - if (display->window != None && display->parent_window != None) { - XSync (display->display, False); - XGetWindowAttributes (display->display, display->parent_window, &attr); - - GST_DEBUG ("new size %d %d", attr.width, attr.height); - - if (display->win_width != attr.width || display->win_height != attr.height) { - XResizeWindow (display->display, display->window, - attr.width, attr.height); - //XSync (display->display, False); - } - display->win_width = attr.width; - display->win_height = attr.height; - } - g_mutex_unlock (display->lock); -} - -void -gst_gl_display_update_attributes (GstGLDisplay * display) -{ - XWindowAttributes attr; - - if (display->window != None) { - XGetWindowAttributes (display->display, display->window, &attr); - - GST_DEBUG ("window visual %ld display visual %ld", - attr.visual->visualid, display->visinfo->visual->visualid); - - display->win_width = attr.width; - display->win_height = attr.height; - } else { - display->win_width = 0; - display->win_height = 0; - } -} - -void -gst_gl_display_set_window_size (GstGLDisplay * display, int width, int height) -{ - if (display->win_width != width || display->win_height != height) { - display->win_width = width; - display->win_height = height; - XResizeWindow (display->display, display->window, width, height); - XSync (display->display, False); - } -} - -void -gst_gl_display_clear (GstGLDisplay * display) -{ - gst_gl_display_lock (display); - - glDepthFunc (GL_LESS); - glEnable (GL_DEPTH_TEST); - glClearColor (0.2, 0.2, 0.2, 1.0); - glViewport (0, 0, display->win_width, display->win_height); - - gst_gl_display_unlock (display); -} - -void -gst_gl_display_check_error (GstGLDisplay * display, int line) -{ - GLenum err = glGetError (); - - if (err) { - GST_ERROR ("GL Error 0x%x at line %d", (int) err, line); - g_assert (0); - } -} - - -GLuint -gst_gl_display_upload_texture_rectangle (GstGLDisplay * display, - GstVideoFormat type, void *data, int width, int height) -{ - GLuint texture; - - glGenTextures (1, &texture); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, texture); - - switch (type) { - case GST_VIDEO_FORMAT_RGBx: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_BGRx: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_xRGB: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_xBGR: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_YUY2: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_YCBCR_MESA, width, height, - 0, GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, data); - break; - case GST_VIDEO_FORMAT_UYVY: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_YCBCR_MESA, width, height, - 0, GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_MESA, data); - break; - case GST_VIDEO_FORMAT_AYUV: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - default: - g_assert_not_reached (); - } - - return texture; -} - - -#if 0 -static void -draw_rect_texture (GstGLDisplay * display, GstVideoFormat type, - void *data, int width, int height) -{ - GLuint texture; - - GST_DEBUG ("using rectangular texture"); - -#ifdef GL_TEXTURE_RECTANGLE_ARB - glEnable (GL_TEXTURE_RECTANGLE_ARB); - - texture = gst_gl_display_upload_texture_rectangle (display, type, - data, width, height); - - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - -#if 0 - switch (type) { - case GST_VIDEO_FORMAT_RGBx: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_BGRx: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_xRGB: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_xBGR: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_YUY2: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_YCBCR_MESA, width, height, - 0, GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, data); - break; - case GST_VIDEO_FORMAT_UYVY: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_YCBCR_MESA, width, height, - 0, GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_MESA, data); - break; - case GST_VIDEO_FORMAT_AYUV: - glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA, width, height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - default: - g_assert_not_reached (); - } - -#ifdef GL_POST_COLOR_MATRIX_RED_BIAS - if (type == GST_VIDEO_FORMAT_AYUV) { - const double matrix[16] = { - 1, 1, 1, 0, - 0, -0.344 * 1, 1.770 * 1, 0, - 1.403 * 1, -0.714 * 1, 0, 0, - 0, 0, 0, 1 - }; - glMatrixMode (GL_COLOR); - glLoadMatrixd (matrix); - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_BIAS, -1.403 / 2); - glPixelTransferf (GL_POST_COLOR_MATRIX_GREEN_BIAS, (0.344 + 0.714) / 2); - glPixelTransferf (GL_POST_COLOR_MATRIX_BLUE_BIAS, -1.770 / 2); - } -#endif -#endif - - glColor4f (1, 0, 1, 1); - glBegin (GL_QUADS); - - glNormal3f (0, 0, -1); - - glTexCoord2f (width, 0); - glVertex3f (1.0, 1.0, 0); - glTexCoord2f (0, 0); - glVertex3f (-1.0, 1.0, 0); - glTexCoord2f (0, height); - glVertex3f (-1.0, -1.0, 0); - glTexCoord2f (width, height); - glVertex3f (1.0, -1.0, 0); - glEnd (); - glDeleteTextures (1, &texture); -#else - g_assert_not_reached (); -#endif -} - -static void -draw_pow2_texture (GstGLDisplay * display, GstVideoFormat type, - void *data, int width, int height) -{ - int pow2_width; - int pow2_height; - double x, y; - GLuint texture; - - GST_DEBUG ("using power-of-2 texture"); - - for (pow2_height = 64; - pow2_height < height && pow2_height > 0; pow2_height <<= 1); - for (pow2_width = 64; pow2_width < width && pow2_width > 0; pow2_width <<= 1); - - glEnable (GL_TEXTURE_2D); - glGenTextures (1, &texture); - glBindTexture (GL_TEXTURE_2D, texture); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - - switch (type) { - case GST_VIDEO_FORMAT_RGBx: - glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, pow2_width, pow2_height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_BGRx: - glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, pow2_width, pow2_height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_BYTE, data); - break; - case GST_VIDEO_FORMAT_xRGB: - glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, pow2_width, pow2_height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_xBGR: - glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, pow2_width, pow2_height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, width, height, - GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - case GST_VIDEO_FORMAT_YUY2: - glTexImage2D (GL_TEXTURE_2D, 0, GL_YCBCR_MESA, pow2_width, pow2_height, - 0, GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, NULL); - glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, data); - break; - case GST_VIDEO_FORMAT_UYVY: - glTexImage2D (GL_TEXTURE_2D, 0, GL_YCBCR_MESA, pow2_width, pow2_height, - 0, GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_REV_MESA, NULL); - glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, width, height, - GL_YCBCR_MESA, GL_UNSIGNED_SHORT_8_8_MESA, data); - break; - case GST_VIDEO_FORMAT_AYUV: - glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, pow2_width, pow2_height, - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, width, height, - GL_BGRA, GL_UNSIGNED_INT_8_8_8_8, data); - break; - default: - g_assert_not_reached (); - } - -#ifdef GL_POST_COLOR_MATRIX_RED_BIAS - if (type == GST_VIDEO_FORMAT_AYUV) { - const double matrix[16] = { - 1, 1, 1, 0, - 0, -0.344 * 1, 1.770 * 1, 0, - 1.403 * 1, -0.714 * 1, 0, 0, - 0, 0, 0, 1 - }; - glMatrixMode (GL_COLOR); - glLoadMatrixd (matrix); - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_BIAS, -1.403 / 2); - glPixelTransferf (GL_POST_COLOR_MATRIX_GREEN_BIAS, (0.344 + 0.714) / 2); - glPixelTransferf (GL_POST_COLOR_MATRIX_BLUE_BIAS, -1.770 / 2); - } -#endif - - glColor4f (1, 0, 1, 1); - glBegin (GL_QUADS); - - glNormal3f (0, 0, -1); - - x = (double) width / pow2_width; - y = (double) height / pow2_height; - - glTexCoord2f (x, 0); - glVertex3f (1.0, 1.0, 0); - glTexCoord2f (0, 0); - glVertex3f (-1.0, 1.0, 0); - glTexCoord2f (0, y); - glVertex3f (-1.0, -1.0, 0); - glTexCoord2f (x, y); - glVertex3f (1.0, -1.0, 0); - glEnd (); - glDeleteTextures (1, &texture); -} -#endif - -#if 0 -void -gst_gl_display_draw_image (GstGLDisplay * display, GstVideoFormat type, - void *data, int width, int height) -{ - g_return_if_fail (data != NULL); - g_return_if_fail (width > 0); - g_return_if_fail (height > 0); - - gst_gl_display_lock (display); - -#if 0 - /* Doesn't work */ - { - int64_t ust = 1234; - int64_t mst = 1234; - int64_t sbc = 1234; - gboolean ret; - - ret = glXGetSyncValuesOML (display->display, display->window, - &ust, &mst, &sbc); - GST_ERROR ("sync values %d %" G_GINT64_FORMAT " %" G_GINT64_FORMAT - " %" G_GINT64_FORMAT, ret, ust, mst, sbc); - } -#endif - -#if 0 - /* Does work, but is not relevant */ - { - int32_t num = 1234; - int32_t den = 1234; - gboolean ret; - - ret = glXGetMscRateOML (display->display, display->window, &num, &den); - GST_DEBUG ("rate %d %d %d", ret, num, den); - } -#endif - - gst_gl_display_update_attributes (display); - - glXSwapIntervalSGI (1); - glViewport (0, 0, display->win_width, display->win_height); - - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - - glDisable (GL_CULL_FACE); - glEnableClientState (GL_TEXTURE_COORD_ARRAY); - - glColor4f (1, 1, 1, 1); - - if (display->have_texture_rectangle) { - draw_rect_texture (display, type, data, width, height); - } else { - draw_pow2_texture (display, type, data, width, height); - } - - glXSwapBuffers (display->display, display->window); -#if 0 - /* Doesn't work */ - { - ret = glXSwapBuffersMscOML (display->display, display->window, 0, 1, 0); - if (ret == 0) { - GST_DEBUG ("glXSwapBuffersMscOML failed"); - } - } -#endif - - gst_gl_display_unlock (display); -} -#endif - -void -gst_gl_display_draw_texture (GstGLDisplay * display, GLuint texture, - int width, int height, gboolean sync) -{ - g_return_if_fail (width > 0); - g_return_if_fail (height > 0); - g_return_if_fail (texture != None); - - gst_gl_display_lock (display); - - g_assert (display->window != None); - g_assert (display->context != NULL); - - //gst_gl_display_update_attributes (display); -#if 0 - /* Doesn't work */ - { - int64_t ust = 1234; - int64_t mst = 1234; - int64_t sbc = 1234; - gboolean ret; - - ret = glXGetSyncValuesOML (display->display, display->window, - &ust, &mst, &sbc); - GST_ERROR ("sync values %d %" G_GINT64_FORMAT " %" G_GINT64_FORMAT - " %" G_GINT64_FORMAT, ret, ust, mst, sbc); - } -#endif - - if (sync) { - glXSwapIntervalSGI (1); - } else { - glXSwapIntervalSGI (0); - } - - glViewport (0, 0, display->win_width, display->win_height); - - glClearColor (0.3, 0.3, 0.3, 1.0); - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - - glDisable (GL_CULL_FACE); - glEnableClientState (GL_TEXTURE_COORD_ARRAY); - - glColor4f (1, 1, 1, 1); - - glEnable (GL_TEXTURE_RECTANGLE_ARB); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, texture); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - - glColor4f (1, 0, 1, 1); - gst_gl_display_check_error (display, __LINE__); - glBegin (GL_QUADS); - - glNormal3f (0, 0, -1); - - glTexCoord2f (width, 0); - glVertex3f (1.0, 1.0, 0); - glTexCoord2f (0, 0); - glVertex3f (-1.0, 1.0, 0); - glTexCoord2f (0, height); - glVertex3f (-1.0, -1.0, 0); - glTexCoord2f (width, height); - glVertex3f (1.0, -1.0, 0); - glEnd (); - gst_gl_display_check_error (display, __LINE__); - - glXSwapBuffers (display->display, display->window); - - gst_gl_display_unlock (display); -} diff --git a/gst-libs/gst/gl/gstgldisplay.h b/gst-libs/gst/gl/gstgldisplay.h deleted file mode 100644 index 1b2c9df..0000000 --- a/gst-libs/gst/gl/gstgldisplay.h +++ /dev/null @@ -1,85 +0,0 @@ - -#ifndef __GST_GL_H__ -#define __GST_GL_H__ - -#include <GL/glx.h> -#include <GL/gl.h> -#include <gst/gst.h> -#include <gst/video/video.h> - -typedef struct _GstGLDisplay GstGLDisplay; -typedef struct _GstGLDisplayClass GstGLDisplayClass; - -#define GST_TYPE_GL_DISPLAY \ - (gst_gl_display_get_type()) -#define GST_GL_DISPLAY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_DISPLAY,GstGLDisplay)) -#define GST_GL_DISPLAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GL_DISPLAY,GstGLDisplayClass)) -#define GST_IS_GL_DISPLAY(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_DISPLAY)) -#define GST_IS_GL_DISPLAY_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GL_DISPLAY)) - - -struct _GstGLDisplay { - GObject object; - - Display *display; - GC gc; - XVisualInfo *visinfo; - GLXContext context; - GMutex *lock; - - Screen *screen; - int screen_num; - Visual *visual; - Window root; - guint32 white; - guint32 black; - int depth; - - int max_texture_size; - - gboolean have_ycbcr_texture; - gboolean have_texture_rectangle; - gboolean have_color_matrix; - - Window window; - gboolean visible; - Window parent_window; - - int win_width; - int win_height; - -}; - -struct _GstGLDisplayClass { - GObjectClass object_class; -}; - -GType gst_gl_display_get_type (void); - - -GstGLDisplay *gst_gl_display_new (void); -gboolean gst_gl_display_connect (GstGLDisplay *display, - const char *display_name); -gboolean gst_gl_display_can_handle_type (GstGLDisplay *display, - GstVideoFormat type); -void gst_gl_display_lock (GstGLDisplay *display); -void gst_gl_display_unlock (GstGLDisplay *display); -void gst_gl_display_set_window (GstGLDisplay *display, Window window); -void gst_gl_display_update_attributes (GstGLDisplay *display); -void gst_gl_display_clear (GstGLDisplay *display); -void gst_gl_display_draw_texture (GstGLDisplay * display, GLuint texture, - int width, int height, gboolean sync); -void gst_gl_display_check_error (GstGLDisplay *display, int line); -GLuint gst_gl_display_upload_texture_rectangle (GstGLDisplay *display, - GstVideoFormat type, void *data, int width, int height); -void gst_gl_display_set_visible (GstGLDisplay *display, gboolean visible); -void gst_gl_display_set_window_size (GstGLDisplay *display, int width, - int height); -void gst_gl_display_update_window (GstGLDisplay * display); - -#endif - diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c deleted file mode 100644 index a2175af..0000000 --- a/gst-libs/gst/gl/gstglfilter.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2007 David Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gst/gst.h> -#include <gst/video/video.h> -#include <gstglbuffer.h> -#include <gstglfilter.h> -#include "glextensions.h" - -#define GST_CAT_DEFAULT gst_gl_filter_debug -GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); - - -static GstStaticPadTemplate gst_gl_filter_src_pad_template = -GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_GL_VIDEO_CAPS) - ); - -static GstStaticPadTemplate gst_gl_filter_sink_pad_template = -GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_GL_VIDEO_CAPS) - ); - -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_gl_filter_debug, "glfilter", 0, "glfilter element"); - -GST_BOILERPLATE_FULL (GstGLFilter, gst_gl_filter, GstBaseTransform, - GST_TYPE_BASE_TRANSFORM, DEBUG_INIT); - -static void gst_gl_filter_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_gl_filter_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static void gst_gl_filter_reset (GstGLFilter * filter); -static gboolean gst_gl_filter_start (GstBaseTransform * bt); -static gboolean gst_gl_filter_stop (GstBaseTransform * bt); -static gboolean gst_gl_filter_get_unit_size (GstBaseTransform * trans, - GstCaps * caps, guint * size); -static GstFlowReturn gst_gl_filter_transform (GstBaseTransform * bt, - GstBuffer * inbuf, GstBuffer * outbuf); -static GstFlowReturn gst_gl_filter_prepare_output_buffer (GstBaseTransform * - trans, GstBuffer * input, gint size, GstCaps * caps, GstBuffer ** buf); -static gboolean gst_gl_filter_set_caps (GstBaseTransform * bt, GstCaps * incaps, - GstCaps * outcaps); -static gboolean gst_gl_filter_do_transform (GstGLFilter * filter, - GstGLBuffer * inbuf, GstGLBuffer * outbuf); - - -static void -gst_gl_filter_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_gl_filter_src_pad_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_gl_filter_sink_pad_template)); -} - -static void -gst_gl_filter_class_init (GstGLFilterClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - gobject_class->set_property = gst_gl_filter_set_property; - gobject_class->get_property = gst_gl_filter_get_property; - - GST_BASE_TRANSFORM_CLASS (klass)->transform = gst_gl_filter_transform; - GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_filter_start; - GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_filter_stop; - GST_BASE_TRANSFORM_CLASS (klass)->set_caps = gst_gl_filter_set_caps; - GST_BASE_TRANSFORM_CLASS (klass)->get_unit_size = gst_gl_filter_get_unit_size; - GST_BASE_TRANSFORM_CLASS (klass)->prepare_output_buffer = - gst_gl_filter_prepare_output_buffer; -} - -static void -gst_gl_filter_init (GstGLFilter * filter, GstGLFilterClass * klass) -{ - //gst_element_create_all_pads (GST_ELEMENT (filter)); - - filter->sinkpad = gst_element_get_static_pad (GST_ELEMENT (filter), "sink"); - filter->srcpad = gst_element_get_static_pad (GST_ELEMENT (filter), "src"); - - gst_gl_filter_reset (filter); -} - -static void -gst_gl_filter_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - //GstGLFilter *filter = GST_GL_FILTER (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_filter_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - //GstGLFilter *filter = GST_GL_FILTER (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_filter_reset (GstGLFilter * filter) -{ - if (filter->display) { - g_object_unref (filter->display); - filter->display = NULL; - } - filter->format = GST_GL_BUFFER_FORMAT_UNKNOWN; - filter->width = 0; - filter->height = 0; -} - -static gboolean -gst_gl_filter_start (GstBaseTransform * bt) -{ - - return TRUE; -} - -static gboolean -gst_gl_filter_stop (GstBaseTransform * bt) -{ - GstGLFilter *filter = GST_GL_FILTER (bt); - - gst_gl_filter_reset (filter); - - return TRUE; -} - -static gboolean -gst_gl_filter_get_unit_size (GstBaseTransform * trans, GstCaps * caps, - guint * size) -{ - gboolean ret; - GstGLBufferFormat format; - int width; - int height; - - ret = gst_gl_buffer_format_parse_caps (caps, &format, &width, &height); - if (ret) { - *size = gst_gl_buffer_format_get_size (format, width, height); - } - - return TRUE; -} - -static GstFlowReturn -gst_gl_filter_prepare_output_buffer (GstBaseTransform * trans, - GstBuffer * inbuf, gint size, GstCaps * caps, GstBuffer ** buf) -{ - GstGLFilter *filter; - GstGLBuffer *gl_inbuf = GST_GL_BUFFER (inbuf); - GstGLBuffer *gl_outbuf; - - filter = GST_GL_FILTER (trans); - - if (filter->display == NULL) { - filter->display = gl_inbuf->display; - } - - gl_outbuf = gst_gl_buffer_new_with_format (filter->display, - filter->format, filter->width, filter->height); - - *buf = GST_BUFFER (gl_outbuf); - gst_buffer_set_caps (*buf, caps); - - return GST_FLOW_OK; -} - -static gboolean -gst_gl_filter_set_caps (GstBaseTransform * bt, GstCaps * incaps, - GstCaps * outcaps) -{ - GstGLFilter *filter; - gboolean ret; - - filter = GST_GL_FILTER (bt); - - ret = gst_gl_buffer_format_parse_caps (incaps, &filter->format, - &filter->width, &filter->height); - - if (!ret) { - GST_DEBUG ("bad caps"); - return FALSE; - } - - GST_ERROR ("set_caps %d %d", filter->width, filter->height); - - return ret; -} - -static GstFlowReturn -gst_gl_filter_transform (GstBaseTransform * bt, GstBuffer * inbuf, - GstBuffer * outbuf) -{ - GstGLFilter *filter; - GstGLBuffer *gl_inbuf = GST_GL_BUFFER (inbuf); - GstGLBuffer *gl_outbuf = GST_GL_BUFFER (outbuf); - - filter = GST_GL_FILTER (bt); - - gst_gl_filter_do_transform (filter, gl_inbuf, gl_outbuf); - - return GST_FLOW_OK; -} - -static gboolean -gst_gl_filter_do_transform (GstGLFilter * filter, - GstGLBuffer * inbuf, GstGLBuffer * outbuf) -{ - GstGLDisplay *display = inbuf->display; - GstGLFilterClass *filter_class; - unsigned int fbo; - - filter_class = GST_GL_FILTER_GET_CLASS (filter); - - gst_gl_display_lock (display); - - glGenFramebuffersEXT (1, &fbo); - glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, fbo); - - glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, - GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, outbuf->texture, 0); - - glDrawBuffer (GL_COLOR_ATTACHMENT0_EXT); - glReadBuffer (GL_COLOR_ATTACHMENT0_EXT); - - g_assert (glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT) == - GL_FRAMEBUFFER_COMPLETE_EXT); - - glViewport (0, 0, outbuf->width, outbuf->height); - - glClearColor (0.3, 0.3, 0.3, 1.0); - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - - glDisable (GL_CULL_FACE); - glEnableClientState (GL_TEXTURE_COORD_ARRAY); - - glColor4f (1, 1, 1, 1); - - glEnable (GL_TEXTURE_RECTANGLE_ARB); - glActiveTexture (GL_TEXTURE0); - glBindTexture (GL_TEXTURE_RECTANGLE_ARB, inbuf->texture); - - filter_class->filter (filter, inbuf, outbuf); - -#if 0 - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - - glColor4f (1, 0, 1, 1); - glBegin (GL_QUADS); - - glNormal3f (0, 0, -1); - - glTexCoord2f (inbuf->width, 0); - glVertex3f (0.9, -0.9, 0); - glTexCoord2f (0, 0); - glVertex3f (-1.0, -1.0, 0); - glTexCoord2f (0, inbuf->height); - glVertex3f (-1.0, 1.0, 0); - glTexCoord2f (inbuf->width, inbuf->height); - glVertex3f (1.0, 1.0, 0); - glEnd (); -#endif - - glFlush (); - - glDeleteFramebuffersEXT (1, &fbo); - - gst_gl_display_unlock (display); - - return TRUE; -} diff --git a/gst-libs/gst/gl/gstglfilter.h b/gst-libs/gst/gl/gstglfilter.h deleted file mode 100644 index 513d6e9..0000000 --- a/gst-libs/gst/gl/gstglfilter.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2007 David Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_GL_FILTER_H_ -#define _GST_GL_FILTER_H_ - -#include <gst/gst.h> -#include <gst/video/video.h> -#include <gst/base/gstbasetransform.h> -#include <gstglbuffer.h> - -#define GST_TYPE_GL_FILTER (gst_gl_filter_get_type()) -#define GST_GL_FILTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_FILTER,GstGLFilter)) -#define GST_IS_GL_FILTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_FILTER)) -#define GST_GL_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_GL_FILTER,GstGLFilterClass)) -#define GST_IS_GL_FILTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_GL_FILTER)) -#define GST_GL_FILTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_GL_FILTER,GstGLFilterClass)) -typedef struct _GstGLFilter GstGLFilter; -typedef struct _GstGLFilterClass GstGLFilterClass; - -typedef gboolean (*GstGLFilterProcessFunc) (GstGLFilter *filter, - GstGLBuffer *inbuf, GstGLBuffer *outbuf); - -struct _GstGLFilter -{ - GstBaseTransform base_transform; - - GstPad *srcpad; - GstPad *sinkpad; - - /* < private > */ - - GstGLDisplay *display; - GstGLBufferFormat format; - int width; - int height; -}; - -struct _GstGLFilterClass -{ - GstBaseTransformClass base_transform_class; - GstGLFilterProcessFunc filter; -}; - -GType gst_gl_filter_get_type(void); - -#endif - diff --git a/gst-libs/gst/gst-i18n-plugin.h b/gst-libs/gst/gst-i18n-plugin.h index 2c37a61..e379709 100644 --- a/gst-libs/gst/gst-i18n-plugin.h +++ b/gst-libs/gst/gst-i18n-plugin.h @@ -1,37 +1,37 @@ -/* GStreamer - * Copyright (C) 2004 Thomas Vander Stichele <thomas@apestaart.org> - * - * gst-i18n-plugins.h: internationalization macros for the GStreamer plugins - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_I18N_PLUGIN_H__ -#define __GST_I18N_PLUGIN_H__ - -#include <locale.h> /* some people need it and some people don't */ -#include "gettext.h" /* included with gettext distribution and copied */ - -#ifndef GETTEXT_PACKAGE -#error You must define GETTEXT_PACKAGE before including this header. -#endif - -/* we want to use shorthand _() for translating and N_() for marking */ -#define _(String) dgettext (GETTEXT_PACKAGE, String) -#define N_(String) gettext_noop (String) -/* FIXME: if we need it, we can add Q_ as well, like in glib */ - -#endif /* __GST_I18N_PLUGIN_H__ */ +/* GStreamer
+ * Copyright (C) 2004 Thomas Vander Stichele <thomas@apestaart.org>
+ *
+ * gst-i18n-plugins.h: internationalization macros for the GStreamer plugins
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_I18N_PLUGIN_H__
+#define __GST_I18N_PLUGIN_H__
+
+#include <locale.h> /* some people need it and some people don't */
+#include "gettext.h" /* included with gettext distribution and copied */
+
+#ifndef GETTEXT_PACKAGE
+#error You must define GETTEXT_PACKAGE before including this header.
+#endif
+
+/* we want to use shorthand _() for translating and N_() for marking */
+#define _(String) dgettext (GETTEXT_PACKAGE, String)
+#define N_(String) gettext_noop (String)
+/* FIXME: if we need it, we can add Q_ as well, like in glib */
+
+#endif /* __GST_I18N_PLUGIN_H__ */
diff --git a/gst-plugins-gl.doap b/gst-plugins-gl.doap index f58961a..c962c7f 100644 --- a/gst-plugins-gl.doap +++ b/gst-plugins-gl.doap @@ -1,54 +1,54 @@ -<Project - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns="http://usefulinc.com/ns/doap#" - xmlns:foaf="http://xmlns.com/foaf/0.1/" - xmlns:admin="http://webns.net/mvcb/"> - - <name>GStreamer OpenGL Plug-ins</name> - <shortname>gst-plugins-gl</shortname> - <homepage rdf:resource="http://gstreamer.freedesktop.org/modules/gst-plugins-gl.html" /> - <created>2008-01-17</created> - <shortdesc xml:lang="en"> -a collection of elements based on OpenGL - </shortdesc> - <description xml:lang="en"> -GStreamer OpenGL Plug-ins is a collection of GStreamer plug-ins and -elements that use OpenGL for processing and display of video. It also -contains helper libraries and base classes useful for writing elements -that use OpenGL. -</description> - <category></category> - <bug-database rdf:resource="http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&component=gst-plugins-gl" /> - <screenshots></screenshots> - <mailing-list rdf:resource="http://lists.sourceforge.net/lists/listinfo/gstreamer-devel/" /> - <programming-language>C</programming-language> - <license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/> - <download-page rdf:resource="http://gstreamer.freedesktop.org/download/" /> - - <repository> - <CVSRepository> - <anon-root>:pserver:anonymous@cvs.freedesktop.org:/cvs/gstreamer</anon-root> - <module>gst-plugins-gl</module> - <browse rdf:resource="http://webcvs.freedesktop.org/gstreamer/gst-plugins-gl/" /> - </CVSRepository> - </repository> - - <release> - <Version> - <revision>0.10.0</revision> - <branch>0.10</branch> - <name>'Taint no sin</name> - <created>2008-01-17</created> - <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-gl/gst-plugins-gl-0.10.0.tar.bz2" /> - <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-gl/gst-plugins-gl-0.10.0.tar.gz" /> - </Version> - </release> - - <maintainer> - <foaf:Person> - <foaf:name>David Schleef</foaf:name> - </foaf:Person> - </maintainer> - -</Project> +<Project
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns="http://usefulinc.com/ns/doap#"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/"
+ xmlns:admin="http://webns.net/mvcb/">
+
+ <name>GStreamer OpenGL Plug-ins</name>
+ <shortname>gst-plugins-gl</shortname>
+ <homepage rdf:resource="http://gstreamer.freedesktop.org/modules/gst-plugins-gl.html" />
+ <created>2008-01-17</created>
+ <shortdesc xml:lang="en">
+a collection of elements based on OpenGL
+ </shortdesc>
+ <description xml:lang="en">
+GStreamer OpenGL Plug-ins is a collection of GStreamer plug-ins and
+elements that use OpenGL for processing and display of video. It also
+contains helper libraries and base classes useful for writing elements
+that use OpenGL.
+</description>
+ <category></category>
+ <bug-database rdf:resource="http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer&component=gst-plugins-gl" />
+ <screenshots></screenshots>
+ <mailing-list rdf:resource="http://lists.sourceforge.net/lists/listinfo/gstreamer-devel/" />
+ <programming-language>C</programming-language>
+ <license rdf:resource="http://usefulinc.com/doap/licenses/lgpl"/>
+ <download-page rdf:resource="http://gstreamer.freedesktop.org/download/" />
+
+ <repository>
+ <CVSRepository>
+ <anon-root>:pserver:anonymous@cvs.freedesktop.org:/cvs/gstreamer</anon-root>
+ <module>gst-plugins-gl</module>
+ <browse rdf:resource="http://webcvs.freedesktop.org/gstreamer/gst-plugins-gl/" />
+ </CVSRepository>
+ </repository>
+
+ <release>
+ <Version>
+ <revision>0.10.0</revision>
+ <branch>0.10</branch>
+ <name>'Taint no sin</name>
+ <created>2008-01-17</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-gl/gst-plugins-gl-0.10.0.tar.bz2" />
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-gl/gst-plugins-gl-0.10.0.tar.gz" />
+ </Version>
+ </release>
+
+ <maintainer>
+ <foaf:Person>
+ <foaf:name>David Schleef</foaf:name>
+ </foaf:Person>
+ </maintainer>
+
+</Project>
diff --git a/gst-plugins-gl.spec.in b/gst-plugins-gl.spec.in index 7455b2f..703c984 100644 --- a/gst-plugins-gl.spec.in +++ b/gst-plugins-gl.spec.in @@ -1,228 +1,228 @@ -%define majorminor @GST_MAJORMINOR@ -%define gstreamer gstreamer - -%define gst_minver 0.10.0 - -Name: %{gstreamer}-plugins-base -Version: @VERSION@ -Release: @PACKAGE_VERSION_RELEASE@.gst -Summary: GStreamer streaming media framework plug-ins - -Group: Applications/Multimedia -License: LGPL -URL: http://gstreamer.freedesktop.org/ -Vendor: GStreamer Backpackers Team <package@gstreamer.freedesktop.org> -Source: http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.gz -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) - -Requires: %{gstreamer} >= %{gst_minver} -BuildRequires: %{gstreamer}-devel >= %{gst_minver} - -BuildRequires: gcc-c++ -BuildRequires: gtk-doc >= 1.3 - -@USE_GNOME_VFS_TRUE@Requires: gnome-vfs2 > 1.9.4.00 -@USE_GNOME_VFS_TRUE@BuildRequires: gnome-vfs2-devel > 1.9.4.00 -@USE_VORBIS_TRUE@Requires: libogg >= 1.0 -@USE_VORBIS_TRUE@Requires: libvorbis >= 1.0 -@USE_VORBIS_TRUE@BuildRequires: libogg-devel >= 1.0 -@USE_VORBIS_TRUE@BuildRequires: libvorbis-devel >= 1.0 - -%description -GStreamer is a streaming media framework, based on graphs of filters which -operate on media data. Applications using this library can do anything -from real-time sound processing to playing videos, and just about anything -else media-related. Its plugin-based architecture means that new data -types or processing capabilities can be added simply by installing new -plug-ins. - -%prep -%setup -q -n gst-plugins-base-%{version} -export DOCS_ARE_INCOMPLETE_PLEASE_FIXME=0 -%build -%configure \ - --enable-gtk-doc - -make %{?_smp_mflags} - -%install -rm -rf $RPM_BUILD_ROOT - -%makeinstall - -# Clean out files that should not be part of the rpm. -rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.la -rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.a -rm -f $RPM_BUILD_ROOT%{_libdir}/*.a -rm -f $RPM_BUILD_ROOT%{_libdir}/*.la - -%find_lang gst-plugins-base-%{majorminor} - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -f gst-plugins-base-%{majorminor}.lang -%defattr(-, root, root) -%doc AUTHORS COPYING README REQUIREMENTS gst-plugins-base.doap - -# helper programs -%{_bindir}/gst-visualise-%{majorminor} -%{_mandir}/man1/gst-visualise-%{majorminor}* - -# libraries -%{_libdir}/libgstaudio-%{majorminor}.so.* -%{_libdir}/libgstcdda-%{majorminor}.so* -%{_libdir}/libgstinterfaces-%{majorminor}.so.* -%{_libdir}/libgstnetbuffer-%{majorminor}.so* -%{_libdir}/libgstpbutils-%{majorminor}.so* -%{_libdir}/libgstriff-%{majorminor}.so.* -%{_libdir}/libgstrtp-%{majorminor}.so* -%{_libdir}/libgsttag-%{majorminor}.so.* -%{_libdir}/libgstvideo-%{majorminor}.so.* -%{_libdir}/libgstfft-%{majorminor}.so.* -%{_libdir}/libgstrtsp-%{majorminor}.so.* -%{_libdir}/libgstsdp-%{majorminor}.so.* - -# base plugins without external dependencies -%{_libdir}/gstreamer-%{majorminor}/libgstadder.so -%{_libdir}/gstreamer-%{majorminor}/libgstaudioconvert.so -%{_libdir}/gstreamer-%{majorminor}/libgstffmpegcolorspace.so -%{_libdir}/gstreamer-%{majorminor}/libgstdecodebin.so -%{_libdir}/gstreamer-%{majorminor}/libgstdecodebin2.so -%{_libdir}/gstreamer-%{majorminor}/libgstplaybin.so -%{_libdir}/gstreamer-%{majorminor}/libgsttypefindfunctions.so -%{_libdir}/gstreamer-%{majorminor}/libgstvideotestsrc.so -%{_libdir}/gstreamer-%{majorminor}/libgstaudiorate.so -%{_libdir}/gstreamer-%{majorminor}/libgstsubparse.so -%{_libdir}/gstreamer-%{majorminor}/libgstvolume.so -%{_libdir}/gstreamer-%{majorminor}/libgstvideorate.so -%{_libdir}/gstreamer-%{majorminor}/libgstvideoscale.so -%{_libdir}/gstreamer-%{majorminor}/libgsttcp.so -%{_libdir}/gstreamer-%{majorminor}/libgstvideo4linux.so -%{_libdir}/gstreamer-%{majorminor}/libgstaudioresample.so -%{_libdir}/gstreamer-%{majorminor}/libgstaudiotestsrc.so -%{_libdir}/gstreamer-%{majorminor}/libgstgdp.so -%{_libdir}/gstreamer-%{majorminor}/libgstqueue2.so -%{_libdir}/gstreamer-%{majorminor}/libgsturidecodebin.so - -# Here are packages not in the base plugins package but not dependant -# on an external lib - -# @USE_GST_V4L2_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstvideo4linux2.so - -# base plugins with dependencies -@USE_ALSA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstalsa.so -@USE_THEORA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgsttheora.so -@USE_GNOME_VFS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstgnomevfs.so -@USE_VORBIS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstvorbis.so -@USE_VORBIS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstogg.so -@USE_XVIDEO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstximage*.so -@USE_XVIDEO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstxvimagesink.so -@USE_LIBVISUAL_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstlibvisual.so -@USE_PANGO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstpango.so -@USE_CDPARANOIA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstcdparanoia.so -%package devel -Summary: GStreamer Plugin Library Headers -Group: Development/Libraries -Requires: %{gstreamer}-plugins-base = %{version} - -%description devel -GStreamer Plugins Base library development and header files. - -%files devel -%defattr(-, root, root) -# plugin helper library headers -%{_includedir}/gstreamer-%{majorminor}/gst/audio/audio.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiofilter.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/multichannel.h -%{_includedir}/gstreamer-%{majorminor}/gst/floatcast/floatcast.h -%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-ids.h -%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-media.h -%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-read.h -%{_includedir}/gstreamer-%{majorminor}/gst/video/video.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalance.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalancechannel.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/interfaces-enumtypes.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixer.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixeroptions.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixertrack.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/navigation.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/propertyprobe.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tuner.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunerchannel.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunernorm.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/xoverlay.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosrc.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosrc.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/multichannel-enumtypes.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpaudiopayload.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpdepayload.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtpbuffer.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioclock.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosink.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosink.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstringbuffer.h -%{_includedir}/gstreamer-%{majorminor}/gst/tag/tag.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertppayload.h -%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideofilter.h -%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideosink.h -%{_includedir}/gstreamer-%{majorminor}/gst/netbuffer/gstnetbuffer.h -%{_includedir}/gstreamer-%{majorminor}/gst/cdda/gstcddabasesrc.h -%{_includedir}/gstreamer-%{majorminor}/gst/audio/mixerutils.h -%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/videoorientation.h -%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/descriptions.h -%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/install-plugins.h -%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/missing-plugins.h -%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/pbutils.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtcpbuffer.h -%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfft.h -%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf32.h -%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf64.h -%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts16.h -%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts32.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsp-enumtypes.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspbase64.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspconnection.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspdefs.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspextension.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspmessage.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsprange.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsptransport.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspurl.h -%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdp.h -%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdpmessage.h -%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtppayloads.h -%{_includedir}/gstreamer-%{majorminor}/gst/tag/gsttagdemux.h -%{_libdir}/libgstfft-%{majorminor}.so -%{_libdir}/libgstrtsp-%{majorminor}.so -%{_libdir}/libgstsdp-%{majorminor}.so -%{_libdir}/libgstaudio-%{majorminor}.so -%{_libdir}/libgstriff-%{majorminor}.so -%{_libdir}/libgsttag-%{majorminor}.so -%{_libdir}/libgstvideo-%{majorminor}.so -%{_libdir}/libgstrtp-%{majorminor}.so -%{_libdir}/libgstinterfaces-%{majorminor}.so -%{_libdir}/libgstnetbuffer-%{majorminor}.so -%{_libdir}/libgstpbutils-%{majorminor}.so -%{_libdir}/libgstcdda-%{majorminor}.so - -# pkg-config files -%{_libdir}/pkgconfig/gstreamer-plugins-base-%{majorminor}.pc - -# gtk-doc documentation -%doc %{_datadir}/gtk-doc/html/gst-plugins-base-libs-%{majorminor} -%doc %{_datadir}/gtk-doc/html/gst-plugins-base-plugins-%{majorminor} - -%changelog -* Fri Dec 15 2006 Thomas Vander Stichele <thomas at apestaart dot org> -- add doap file -- cleanups - -* Fri Sep 02 2005 Thomas Vander Stichele <thomas at apestaart dot org> -- clean up a little - -* Fri May 6 2005 Christian Schaller <christian at fluendo dot com> -- Added libgstaudiorate and libgstsubparse to spec file - -* Thu May 5 2005 Christian Schaller <christian at fluendo dot com> -- first attempt at spec file for gst-plugins-base +%define majorminor @GST_MAJORMINOR@
+%define gstreamer gstreamer
+
+%define gst_minver 0.10.0
+
+Name: %{gstreamer}-plugins-base
+Version: @VERSION@
+Release: @PACKAGE_VERSION_RELEASE@.gst
+Summary: GStreamer streaming media framework plug-ins
+
+Group: Applications/Multimedia
+License: LGPL
+URL: http://gstreamer.freedesktop.org/
+Vendor: GStreamer Backpackers Team <package@gstreamer.freedesktop.org>
+Source: http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+Requires: %{gstreamer} >= %{gst_minver}
+BuildRequires: %{gstreamer}-devel >= %{gst_minver}
+
+BuildRequires: gcc-c++
+BuildRequires: gtk-doc >= 1.3
+
+@USE_GNOME_VFS_TRUE@Requires: gnome-vfs2 > 1.9.4.00
+@USE_GNOME_VFS_TRUE@BuildRequires: gnome-vfs2-devel > 1.9.4.00
+@USE_VORBIS_TRUE@Requires: libogg >= 1.0
+@USE_VORBIS_TRUE@Requires: libvorbis >= 1.0
+@USE_VORBIS_TRUE@BuildRequires: libogg-devel >= 1.0
+@USE_VORBIS_TRUE@BuildRequires: libvorbis-devel >= 1.0
+
+%description
+GStreamer is a streaming media framework, based on graphs of filters which
+operate on media data. Applications using this library can do anything
+from real-time sound processing to playing videos, and just about anything
+else media-related. Its plugin-based architecture means that new data
+types or processing capabilities can be added simply by installing new
+plug-ins.
+
+%prep
+%setup -q -n gst-plugins-base-%{version}
+export DOCS_ARE_INCOMPLETE_PLEASE_FIXME=0
+%build
+%configure \
+ --enable-gtk-doc
+
+make %{?_smp_mflags}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%makeinstall
+
+# Clean out files that should not be part of the rpm.
+rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/gstreamer-%{majorminor}/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+
+%find_lang gst-plugins-base-%{majorminor}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f gst-plugins-base-%{majorminor}.lang
+%defattr(-, root, root)
+%doc AUTHORS COPYING README REQUIREMENTS gst-plugins-base.doap
+
+# helper programs
+%{_bindir}/gst-visualise-%{majorminor}
+%{_mandir}/man1/gst-visualise-%{majorminor}*
+
+# libraries
+%{_libdir}/libgstaudio-%{majorminor}.so.*
+%{_libdir}/libgstcdda-%{majorminor}.so*
+%{_libdir}/libgstinterfaces-%{majorminor}.so.*
+%{_libdir}/libgstnetbuffer-%{majorminor}.so*
+%{_libdir}/libgstpbutils-%{majorminor}.so*
+%{_libdir}/libgstriff-%{majorminor}.so.*
+%{_libdir}/libgstrtp-%{majorminor}.so*
+%{_libdir}/libgsttag-%{majorminor}.so.*
+%{_libdir}/libgstvideo-%{majorminor}.so.*
+%{_libdir}/libgstfft-%{majorminor}.so.*
+%{_libdir}/libgstrtsp-%{majorminor}.so.*
+%{_libdir}/libgstsdp-%{majorminor}.so.*
+
+# base plugins without external dependencies
+%{_libdir}/gstreamer-%{majorminor}/libgstadder.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudioconvert.so
+%{_libdir}/gstreamer-%{majorminor}/libgstffmpegcolorspace.so
+%{_libdir}/gstreamer-%{majorminor}/libgstdecodebin.so
+%{_libdir}/gstreamer-%{majorminor}/libgstdecodebin2.so
+%{_libdir}/gstreamer-%{majorminor}/libgstplaybin.so
+%{_libdir}/gstreamer-%{majorminor}/libgsttypefindfunctions.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideotestsrc.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudiorate.so
+%{_libdir}/gstreamer-%{majorminor}/libgstsubparse.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvolume.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideorate.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideoscale.so
+%{_libdir}/gstreamer-%{majorminor}/libgsttcp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstvideo4linux.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudioresample.so
+%{_libdir}/gstreamer-%{majorminor}/libgstaudiotestsrc.so
+%{_libdir}/gstreamer-%{majorminor}/libgstgdp.so
+%{_libdir}/gstreamer-%{majorminor}/libgstqueue2.so
+%{_libdir}/gstreamer-%{majorminor}/libgsturidecodebin.so
+
+# Here are packages not in the base plugins package but not dependant
+# on an external lib
+
+# @USE_GST_V4L2_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstvideo4linux2.so
+
+# base plugins with dependencies
+@USE_ALSA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstalsa.so
+@USE_THEORA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgsttheora.so
+@USE_GNOME_VFS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstgnomevfs.so
+@USE_VORBIS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstvorbis.so
+@USE_VORBIS_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstogg.so
+@USE_XVIDEO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstximage*.so
+@USE_XVIDEO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstxvimagesink.so
+@USE_LIBVISUAL_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstlibvisual.so
+@USE_PANGO_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstpango.so
+@USE_CDPARANOIA_TRUE@%{_libdir}/gstreamer-%{majorminor}/libgstcdparanoia.so
+%package devel
+Summary: GStreamer Plugin Library Headers
+Group: Development/Libraries
+Requires: %{gstreamer}-plugins-base = %{version}
+
+%description devel
+GStreamer Plugins Base library development and header files.
+
+%files devel
+%defattr(-, root, root)
+# plugin helper library headers
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/audio.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiofilter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/multichannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/floatcast/floatcast.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-ids.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-media.h
+%{_includedir}/gstreamer-%{majorminor}/gst/riff/riff-read.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/video.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalance.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/colorbalancechannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/interfaces-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixeroptions.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/mixertrack.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/navigation.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/propertyprobe.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tuner.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunerchannel.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/tunernorm.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/xoverlay.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/multichannel-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpaudiopayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertpdepayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtpbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudioclock.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstaudiosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstbaseaudiosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/gstringbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/tag.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstbasertppayload.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideofilter.h
+%{_includedir}/gstreamer-%{majorminor}/gst/video/gstvideosink.h
+%{_includedir}/gstreamer-%{majorminor}/gst/netbuffer/gstnetbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/cdda/gstcddabasesrc.h
+%{_includedir}/gstreamer-%{majorminor}/gst/audio/mixerutils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/interfaces/videoorientation.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/descriptions.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/install-plugins.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/missing-plugins.h
+%{_includedir}/gstreamer-%{majorminor}/gst/pbutils/pbutils.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtcpbuffer.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfft.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf32.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstfftf64.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts16.h
+%{_includedir}/gstreamer-%{majorminor}/gst/fft/gstffts32.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsp-enumtypes.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspbase64.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspconnection.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspdefs.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspextension.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspmessage.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsprange.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtsptransport.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtsp/gstrtspurl.h
+%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdp.h
+%{_includedir}/gstreamer-%{majorminor}/gst/sdp/gstsdpmessage.h
+%{_includedir}/gstreamer-%{majorminor}/gst/rtp/gstrtppayloads.h
+%{_includedir}/gstreamer-%{majorminor}/gst/tag/gsttagdemux.h
+%{_libdir}/libgstfft-%{majorminor}.so
+%{_libdir}/libgstrtsp-%{majorminor}.so
+%{_libdir}/libgstsdp-%{majorminor}.so
+%{_libdir}/libgstaudio-%{majorminor}.so
+%{_libdir}/libgstriff-%{majorminor}.so
+%{_libdir}/libgsttag-%{majorminor}.so
+%{_libdir}/libgstvideo-%{majorminor}.so
+%{_libdir}/libgstrtp-%{majorminor}.so
+%{_libdir}/libgstinterfaces-%{majorminor}.so
+%{_libdir}/libgstnetbuffer-%{majorminor}.so
+%{_libdir}/libgstpbutils-%{majorminor}.so
+%{_libdir}/libgstcdda-%{majorminor}.so
+
+# pkg-config files
+%{_libdir}/pkgconfig/gstreamer-plugins-base-%{majorminor}.pc
+
+# gtk-doc documentation
+%doc %{_datadir}/gtk-doc/html/gst-plugins-base-libs-%{majorminor}
+%doc %{_datadir}/gtk-doc/html/gst-plugins-base-plugins-%{majorminor}
+
+%changelog
+* Fri Dec 15 2006 Thomas Vander Stichele <thomas at apestaart dot org>
+- add doap file
+- cleanups
+
+* Fri Sep 02 2005 Thomas Vander Stichele <thomas at apestaart dot org>
+- clean up a little
+
+* Fri May 6 2005 Christian Schaller <christian at fluendo dot com>
+- Added libgstaudiorate and libgstsubparse to spec file
+
+* Thu May 5 2005 Christian Schaller <christian at fluendo dot com>
+- first attempt at spec file for gst-plugins-base
diff --git a/gst/Makefile.am b/gst/Makefile.am index f5a0011..8103711 100644 --- a/gst/Makefile.am +++ b/gst/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = $(GST_PLUGINS_SELECTED) -DIST_SUBDIRS = $(GST_PLUGINS_ALL) - +SUBDIRS = $(GST_PLUGINS_SELECTED)
+DIST_SUBDIRS = $(GST_PLUGINS_ALL)
+
diff --git a/gst/gl/.cvsignore b/gst/gl/.cvsignore deleted file mode 100644 index ff7ee2d..0000000 --- a/gst/gl/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -color_matrix diff --git a/gst/gl/BUGS b/gst/gl/BUGS index 795d352..d219708 100644 --- a/gst/gl/BUGS +++ b/gst/gl/BUGS @@ -1,19 +1,5 @@ - -known issues: - - - negotiation is shite. I don't want to know about any failed - negotiations or failed prerolls. - - - teardown sometimes fails. - - - sharing a GL context among a bunch of elements that stomp all - over it is potential fail. - - -intel driver: - - - rendering to texture ignores the color matrix. This causes any - YUV->RGB conversion to fail. - - - YUY2 and UYVY conversions in the driver use the wrong matrix. - +
+known issues:
+
+ -
+
diff --git a/gst/gl/Makefile.am b/gst/gl/Makefile.am index 66bb6f0..f916d08 100644 --- a/gst/gl/Makefile.am +++ b/gst/gl/Makefile.am @@ -1,32 +1,27 @@ - -plugin_LTLIBRARIES = libgstopengl.la - -noinst_PROGRAMS = color_matrix - -AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) -AM_LIBS = $(GST_BASE_LIBS) - -libgstopengl_la_SOURCES = \ - glimagesink.c \ - glimagesink.h \ - gstopengl.c \ - gstglupload.c \ - gstgldownload.c \ - gstgltestsrc.c \ - gstgltestsrc.h \ - gltestsrc.c \ - gltestsrc.h \ - gstglfilterexample.c \ - gstglconvert.c -# check order of CFLAGS and LIBS, shouldn't the order be the other way around -# (like in AM_CFLAGS)? -libgstopengl_la_CFLAGS = $(GST_CFLAGS) $(X_CFLAGS) $(GST_BASE_CFLAGS) \ - $(GST_PLUGINS_BASE_CFLAGS) $(GL_CFLAGS) \ - -I$(top_srcdir)/gst-libs \ - -I$(top_srcdir)/gst-libs/gst/gl -libgstopengl_la_LIBADD = \ - $(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_MAJORMINOR).la \ - $(GST_BASE_LIBS) \ - $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-$(GST_MAJORMINOR) -libgstopengl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) - +
+plugin_LTLIBRARIES = libgstopengl.la
+
+AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+AM_LIBS = $(GST_BASE_LIBS)
+
+libgstopengl_la_SOURCES = \
+ gstopengl.c \
+ glimagesink.c \
+ glimagesink.h \
+ gstglgraphicmaker.c \
+ gstglgraphicmaker.h \
+ gstglvideomaker.c \
+ gstglvideomaker.h
+
+# check order of CFLAGS and LIBS, shouldn't the order be the other way around
+# (like in AM_CFLAGS)?
+libgstopengl_la_CFLAGS = $(GST_CFLAGS) $(X_CFLAGS) $(GST_BASE_CFLAGS) \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GL_CFLAGS) \
+ -I$(top_srcdir)/gst-libs \
+ -I$(top_srcdir)/gst-libs/gst/gl
+libgstopengl_la_LIBADD = \
+ $(top_builddir)/gst-libs/gst/gl/libgstgl-$(GST_MAJORMINOR).la \
+ $(GST_BASE_LIBS) \
+ $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-$(GST_MAJORMINOR)
+libgstopengl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+
diff --git a/gst/gl/color_matrix.c b/gst/gl/color_matrix.c deleted file mode 100644 index 255184f..0000000 --- a/gst/gl/color_matrix.c +++ /dev/null @@ -1,243 +0,0 @@ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include <stdio.h> -#include <string.h> - -typedef struct -{ - double comp[3]; -} Color; - -typedef struct -{ - Color pre_offset; - double matrix[3][3]; - Color post_offset; -} ColorMatrix; - - -/* convert uint8 RGB values to float */ -ColorMatrix rgb255_to_rgb = { - {{0, 0, 0}}, - {{(1 / 255.0), 0, 0}, - {0, (1 / 255.0), 0}, - {0, 0, (1 / 255.0)}}, - {{0, 0, 0}} -}; -ColorMatrix rgb_to_rgb255; - -/* convert uint8 YUV values to float as per ITU-R.601 - * technically, Y, Cr, Cb to E_Y, E_C_B, E_C_R */ -ColorMatrix ycbcr601_to_yuv = { - {{-16, -128, -128}}, - {{(1 / 219.0), 0, 0}, - {0, (1 / 224.0), 0}, - {0, 0, (1 / 224.0)}}, - {{0, 0, 0}} -}; -ColorMatrix yuv_to_ycbcr601; - -/* convert RGB to YUV as per ITU-R.601 - * technically, E_R, E_G, E_B to E_Y, E_C_B, E_C_R */ -ColorMatrix rgb_to_yuv = { - {{0, 0, 0}}, - {{0.299, 0.587, 0.114}, - {0.500, -0.419, -0.081}, - {-0.169, -0.331, 0.500}}, - {{0, 0, 0}} -}; -ColorMatrix yuv_to_rgb; - -ColorMatrix compress = { - {{0, 0, 0}}, - {{0.50, 0, 0}, - {0, 0.5, 0}, - {0, 0, 0.500}}, - {{0.25, 0.25, 0.25}} -}; - -/* red mask */ -ColorMatrix red_mask = { - {{0, 0, 0}}, - {{1, 1, 1}, - {0, 0, 0}, - {0, 0, 0}}, - {{0, 0, 0}} -}; - -double colors[][3] = { - {0, 0, 0}, - {255, 0, 0}, - {0, 255, 0}, - {0, 0, 255} -}; - - -void -color_dump (const double *a) -{ - printf (" %g, %g, %g\n", a[0], a[1], a[2]); -} - -void -color_matrix_dump (ColorMatrix * m) -{ - printf ("pre: %g, %g, %g\n", - m->pre_offset.comp[0], m->pre_offset.comp[1], m->pre_offset.comp[2]); - printf (" %g, %g, %g\n", m->matrix[0][0], m->matrix[0][1], m->matrix[0][2]); - printf (" %g, %g, %g\n", m->matrix[1][0], m->matrix[1][1], m->matrix[1][2]); - printf (" %g, %g, %g\n", m->matrix[2][0], m->matrix[2][1], m->matrix[2][2]); - printf ("post: %g, %g, %g\n", - m->post_offset.comp[0], m->post_offset.comp[1], m->post_offset.comp[2]); -} - -void -color_matrix_apply_color (Color * a, const ColorMatrix * b) -{ - Color d; - int i; - - a->comp[0] += b->pre_offset.comp[0]; - a->comp[1] += b->pre_offset.comp[1]; - a->comp[2] += b->pre_offset.comp[2]; - - for (i = 0; i < 3; i++) { - d.comp[i] = a->comp[0] * b->matrix[i][0]; - d.comp[i] += a->comp[1] * b->matrix[i][1]; - d.comp[i] += a->comp[2] * b->matrix[i][2]; - } - - d.comp[0] += b->post_offset.comp[0]; - d.comp[1] += b->post_offset.comp[1]; - d.comp[2] += b->post_offset.comp[2]; - - *a = d; -} - -void -color_matrix_init (ColorMatrix * a) -{ - memset (a, 0, sizeof (*a)); - a->matrix[0][0] = 1.0; - a->matrix[1][1] = 1.0; - a->matrix[2][2] = 1.0; -} - -void -color_matrix_apply (ColorMatrix * a, ColorMatrix * b) -{ - ColorMatrix d; - int i, j; - - d.pre_offset = a->pre_offset; - - d.post_offset = a->post_offset; - color_matrix_apply_color (&d.post_offset, b); - - for (j = 0; j < 3; j++) { - for (i = 0; i < 3; i++) { - d.matrix[i][j] = - a->matrix[i][0] * b->matrix[0][j] + - a->matrix[i][1] * b->matrix[1][j] + a->matrix[i][2] * b->matrix[2][j]; - } - } - - *a = d; -} - -void -color_matrix_invert (ColorMatrix * a, ColorMatrix * b) -{ - int i, j; - double det; - - a->post_offset.comp[0] = -b->pre_offset.comp[0]; - a->post_offset.comp[1] = -b->pre_offset.comp[1]; - a->post_offset.comp[2] = -b->pre_offset.comp[2]; - - for (j = 0; j < 3; j++) { - for (i = 0; i < 3; i++) { - a->matrix[j][i] = - b->matrix[(i + 1) % 3][(j + 1) % 3] * b->matrix[(i + 2) % 3][(j + - 2) % 3] - b->matrix[(i + 1) % 3][(j + 2) % 3] * b->matrix[(i + - 2) % 3][(j + 1) % 3]; - } - } - - det = a->matrix[0][0] * b->matrix[0][0]; - det += a->matrix[0][1] * b->matrix[1][0]; - det += a->matrix[0][2] * b->matrix[2][0]; - - for (j = 0; j < 3; j++) { - for (i = 0; i < 3; i++) { - a->matrix[j][i] /= det; - } - } - - a->pre_offset.comp[0] = -b->post_offset.comp[0]; - a->pre_offset.comp[1] = -b->post_offset.comp[1]; - a->pre_offset.comp[2] = -b->post_offset.comp[2]; -} - -void -init (void) -{ - color_matrix_invert (&yuv_to_rgb, &rgb_to_yuv); - color_matrix_invert (&yuv_to_ycbcr601, &ycbcr601_to_yuv); - color_matrix_invert (&rgb_to_rgb255, &rgb255_to_rgb); -#if 0 - color_matrix_dump (&yuv_to_rgb); - color_matrix_dump (&yuv_to_ycbcr601); - color_matrix_dump (&rgb_to_rgb255); -#endif -} - -int -main (int argc, char *argv[]) -{ - ColorMatrix want; - ColorMatrix actual; - ColorMatrix actual_inv; - ColorMatrix a; - - init (); - -#if 0 - int i; - - for (i = 0; i < 4; i++) { - double color[3]; - - printf ("%d:\n", i); - - color_copy (color, colors[i]); - color_matrix_apply_color (color, &rgb255_to_rgb); - color_matrix_apply_color (color, &rgb_to_yuv); - color_dump (color); - } -#endif - - color_matrix_init (&want); - color_matrix_apply (&want, &ycbcr601_to_yuv); - color_matrix_apply (&want, &yuv_to_rgb); - color_matrix_apply (&want, &compress); - color_matrix_apply (&want, &compress); - //color_matrix_apply (&want, &compress); - - color_matrix_init (&actual); - color_matrix_apply (&actual, &rgb255_to_rgb); - - /* calc X such that actual * X = want */ - - color_matrix_invert (&actual_inv, &actual); - - a = actual_inv; - color_matrix_apply (&a, &want); - - color_matrix_dump (&a); - - - return 0; -} diff --git a/gst/gl/glimagesink.c b/gst/gl/glimagesink.c deleted file mode 100644 index 9f0912a..0000000 --- a/gst/gl/glimagesink.c +++ /dev/null @@ -1,561 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Julien Moutte <julien@moutte.net> - * Copyright (C) 2005,2006,2007 David A. Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include <gst/gst.h> -#include <gst/interfaces/xoverlay.h> -#include <gst/video/gstvideosink.h> -#include <gst/video/video.h> -#include "gstglbuffer.h" - -#include <string.h> - -#include <glimagesink.h> - -GST_DEBUG_CATEGORY (gst_debug_glimage_sink); -#define GST_CAT_DEFAULT gst_debug_glimage_sink - -static void gst_glimage_sink_init_interfaces (GType type); - -static void gst_glimage_sink_finalize (GObject * object); -static void gst_glimage_sink_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * param_spec); -static void gst_glimage_sink_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * param_spec); - -static GstStateChangeReturn -gst_glimage_sink_change_state (GstElement * element, GstStateChange transition); - -static void gst_glimage_sink_get_times (GstBaseSink * bsink, GstBuffer * buf, - GstClockTime * start, GstClockTime * end); -static GstCaps *gst_glimage_sink_get_caps (GstBaseSink * bsink); -static gboolean gst_glimage_sink_set_caps (GstBaseSink * bsink, GstCaps * caps); -static GstFlowReturn gst_glimage_sink_render (GstBaseSink * bsink, - GstBuffer * buf); -static gboolean gst_glimage_sink_start (GstBaseSink * bsink); -static gboolean gst_glimage_sink_stop (GstBaseSink * bsink); -static gboolean gst_glimage_sink_unlock (GstBaseSink * bsink); - -static void gst_glimage_sink_xoverlay_init (GstXOverlayClass * iface); -static void gst_glimage_sink_set_xwindow_id (GstXOverlay * overlay, - XID window_id); -static void gst_glimage_sink_expose (GstXOverlay * overlay); -static void gst_glimage_sink_set_event_handling (GstXOverlay * overlay, - gboolean handle_events); - -static gboolean gst_glimage_sink_interface_supported (GstImplementsInterface * - iface, GType type); -static void gst_glimage_sink_implements_init (GstImplementsInterfaceClass * - klass); - -//static void gst_glimage_sink_update_caps (GstGLImageSink * glimage_sink); - -static const GstElementDetails gst_glimage_sink_details = -GST_ELEMENT_DETAILS ("OpenGL video sink", - "Sink/Video", - "A videosink based on OpenGL", - "David Schleef <ds@schleef.org>"); - -#ifdef GL_YCBCR_MESA -#define YUV_CAPS ";" GST_VIDEO_CAPS_YUV ("{ AYUV, UYVY, YUY2 }") -#else -#define YUV_CAPS -#endif -static GstStaticPadTemplate gst_glimage_sink_template = - GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_GL_VIDEO_CAPS ";" - GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";" - GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR ";" - GST_VIDEO_CAPS_YUV ("{ AYUV, UYVY, YUY2 }")) - ); - -enum -{ - ARG_0, - ARG_DISPLAY -}; - -#define DEBUG_INIT(bla) do { \ - GST_DEBUG_CATEGORY_INIT (gst_debug_glimage_sink, "glimagesink", 0, "glimagesink element"); \ - gst_glimage_sink_init_interfaces(bla); \ -}while(0); - - -GST_BOILERPLATE_FULL (GstGLImageSink, gst_glimage_sink, GstVideoSink, - GST_TYPE_VIDEO_SINK, DEBUG_INIT); - -static void -gst_glimage_sink_init_interfaces (GType type) -{ - static const GInterfaceInfo overlay_info = { - (GInterfaceInitFunc) gst_glimage_sink_xoverlay_init, - NULL, - NULL - }; - static const GInterfaceInfo implements_info = { - (GInterfaceInitFunc) gst_glimage_sink_implements_init, - NULL, - NULL - }; - - g_type_add_interface_static (type, GST_TYPE_IMPLEMENTS_INTERFACE, - &implements_info); - g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &overlay_info); -} - -static void -gst_glimage_sink_base_init (gpointer g_class) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - - gst_element_class_set_details (element_class, &gst_glimage_sink_details); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_glimage_sink_template)); - -} - -static void -gst_glimage_sink_class_init (GstGLImageSinkClass * klass) -{ - GObjectClass *gobject_class; - GstElementClass *gstelement_class; - GstBaseSinkClass *gstbasesink_class; - - gobject_class = (GObjectClass *) klass; - gstelement_class = (GstElementClass *) klass; - gstbasesink_class = (GstBaseSinkClass *) klass; - - gobject_class->set_property = gst_glimage_sink_set_property; - gobject_class->get_property = gst_glimage_sink_get_property; - - g_object_class_install_property (gobject_class, ARG_DISPLAY, - g_param_spec_string ("display", "Display", "X Display name", - NULL, G_PARAM_READWRITE)); - - gobject_class->finalize = gst_glimage_sink_finalize; - - gstelement_class->change_state = gst_glimage_sink_change_state; - - if (0) - gstbasesink_class->get_caps = gst_glimage_sink_get_caps; - gstbasesink_class->set_caps = gst_glimage_sink_set_caps; - gstbasesink_class->get_times = gst_glimage_sink_get_times; - gstbasesink_class->preroll = gst_glimage_sink_render; - gstbasesink_class->render = gst_glimage_sink_render; - gstbasesink_class->start = gst_glimage_sink_start; - gstbasesink_class->stop = gst_glimage_sink_stop; - gstbasesink_class->unlock = gst_glimage_sink_unlock; -} - -static void -gst_glimage_sink_init (GstGLImageSink * glimage_sink, - GstGLImageSinkClass * glimage_sink_class) -{ - - glimage_sink->display_name = NULL; - //gst_glimage_sink_update_caps (glimage_sink); -} - -static void -gst_glimage_sink_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - GstGLImageSink *glimage_sink; - - g_return_if_fail (GST_IS_GLIMAGE_SINK (object)); - - glimage_sink = GST_GLIMAGE_SINK (object); - - switch (prop_id) { - case ARG_DISPLAY: - g_free (glimage_sink->display_name); - glimage_sink->display_name = g_strdup (g_value_get_string (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_glimage_sink_finalize (GObject * object) -{ - GstGLImageSink *glimage_sink; - - g_return_if_fail (GST_IS_GLIMAGE_SINK (object)); - - glimage_sink = GST_GLIMAGE_SINK (object); - - if (glimage_sink->caps) { - gst_caps_unref (glimage_sink->caps); - } - g_free (glimage_sink->display_name); -} - -static void -gst_glimage_sink_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - GstGLImageSink *glimage_sink; - - g_return_if_fail (GST_IS_GLIMAGE_SINK (object)); - - glimage_sink = GST_GLIMAGE_SINK (object); - - switch (prop_id) { - case ARG_DISPLAY: - g_value_set_string (value, glimage_sink->display_name); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -/* - * GstElement methods - */ - -static GstStateChangeReturn -gst_glimage_sink_change_state (GstElement * element, GstStateChange transition) -{ - GstGLImageSink *glimage_sink; - GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; - - GST_DEBUG ("change state"); - - glimage_sink = GST_GLIMAGE_SINK (element); - - switch (transition) { - case GST_STATE_CHANGE_NULL_TO_READY: - break; - case GST_STATE_CHANGE_READY_TO_PAUSED: - break; - case GST_STATE_CHANGE_PAUSED_TO_PLAYING: - break; - default: - break; - } - - ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - if (ret == GST_STATE_CHANGE_FAILURE) - return ret; - - switch (transition) { - case GST_STATE_CHANGE_PLAYING_TO_PAUSED: - break; - case GST_STATE_CHANGE_PAUSED_TO_READY: - /* FIXME clear window */ - glimage_sink->fps_n = 0; - glimage_sink->fps_d = 1; - GST_VIDEO_SINK_WIDTH (glimage_sink) = 0; - GST_VIDEO_SINK_HEIGHT (glimage_sink) = 0; - break; - case GST_STATE_CHANGE_READY_TO_NULL: - /* FIXME dispose of window */ - break; - default: - break; - } - - return ret; -} - -/* - * GstBaseSink methods - */ - -static gboolean -gst_glimage_sink_start (GstBaseSink * bsink) -{ - GstGLImageSink *glimage_sink; - - GST_DEBUG ("start"); - - glimage_sink = GST_GLIMAGE_SINK (bsink); - - if (glimage_sink->display && glimage_sink->window_id) { - gst_gl_display_set_window (glimage_sink->display, glimage_sink->window_id); - gst_gl_display_set_visible (glimage_sink->display, TRUE); - } - - GST_DEBUG ("start done"); - - return TRUE; -} - -static gboolean -gst_glimage_sink_stop (GstBaseSink * bsink) -{ - GstGLImageSink *glimage_sink; - - GST_DEBUG ("stop"); - - glimage_sink = GST_GLIMAGE_SINK (bsink); - - if (glimage_sink->stored_buffer) { - gst_buffer_unref (glimage_sink->stored_buffer); - glimage_sink->stored_buffer = NULL; - } - if (glimage_sink->display) { - gst_gl_display_set_visible (glimage_sink->display, FALSE); - g_object_unref (glimage_sink->display); - glimage_sink->display = NULL; - } - - return TRUE; -} - -static gboolean -gst_glimage_sink_unlock (GstBaseSink * bsink) -{ - //GstGLImageSink *glimage_sink; - - GST_DEBUG ("unlock"); - - //glimage_sink = GST_GLIMAGE_SINK (bsink); - - /* FIXME */ - - return TRUE; -} - -static void -gst_glimage_sink_get_times (GstBaseSink * bsink, GstBuffer * buf, - GstClockTime * start, GstClockTime * end) -{ - GstGLImageSink *glimagesink; - - glimagesink = GST_GLIMAGE_SINK (bsink); - - if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) { - *start = GST_BUFFER_TIMESTAMP (buf); - if (GST_BUFFER_DURATION_IS_VALID (buf)) { - *end = *start + GST_BUFFER_DURATION (buf); - } else { - if (glimagesink->fps_n > 0) { - *end = *start + - gst_util_uint64_scale_int (GST_SECOND, glimagesink->fps_d, - glimagesink->fps_n); - } - } - } - - -} - -static GstCaps * -gst_glimage_sink_get_caps (GstBaseSink * bsink) -{ - GstGLImageSink *glimage_sink; - - glimage_sink = GST_GLIMAGE_SINK (bsink); - - GST_DEBUG ("get caps returning %" GST_PTR_FORMAT, glimage_sink->caps); - - return gst_caps_ref (glimage_sink->caps); -} - -static gboolean -gst_glimage_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) -{ - GstGLImageSink *glimage_sink; - int width; - int height; - gboolean ok; - int fps_n, fps_d; - int par_n, par_d; - GstVideoFormat format; - GstStructure *structure; - gboolean is_gl; - - GST_DEBUG ("set caps with %" GST_PTR_FORMAT, caps); - - glimage_sink = GST_GLIMAGE_SINK (bsink); - - structure = gst_caps_get_structure (caps, 0); - if (gst_structure_has_name (structure, "video/x-raw-gl")) { - is_gl = TRUE; - format = GST_VIDEO_FORMAT_UNKNOWN; - ok = gst_structure_get_int (structure, "width", &width); - ok &= gst_structure_get_int (structure, "height", &height); - } else { - is_gl = FALSE; - ok = gst_video_format_parse_caps (caps, &format, &width, &height); - } - ok &= gst_video_parse_caps_framerate (caps, &fps_n, &fps_d); - ok &= gst_video_parse_caps_pixel_aspect_ratio (caps, &par_n, &par_d); - - if (!ok) - return FALSE; - - GST_VIDEO_SINK_WIDTH (glimage_sink) = width; - GST_VIDEO_SINK_HEIGHT (glimage_sink) = height; - glimage_sink->is_gl = is_gl; - glimage_sink->format = format; - glimage_sink->width = width; - glimage_sink->height = height; - glimage_sink->fps_n = fps_n; - glimage_sink->fps_d = fps_d; - glimage_sink->par_n = par_n; - glimage_sink->par_d = par_d; - - return TRUE; -} - -static GstFlowReturn -gst_glimage_sink_render (GstBaseSink * bsink, GstBuffer * buf) -{ - GstGLImageSink *glimage_sink; - GstGLBuffer *gl_buffer; - GstGLDisplay *display; - - glimage_sink = GST_GLIMAGE_SINK (bsink); - - if (glimage_sink->stored_buffer) { - gst_buffer_unref (glimage_sink->stored_buffer); - glimage_sink->stored_buffer = NULL; - } - if (glimage_sink->is_gl) { - gl_buffer = GST_GL_BUFFER (gst_buffer_ref (buf)); - - if (glimage_sink->display == NULL) { - glimage_sink->display = g_object_ref (gl_buffer->display); - if (glimage_sink->window_id) { - gst_gl_display_set_window (glimage_sink->display, - glimage_sink->window_id); - } - } else { - g_assert (gl_buffer->display == glimage_sink->display); - } - display = gl_buffer->display; - - } else { - if (glimage_sink->display == NULL) { - gboolean ret; - - glimage_sink->display = gst_gl_display_new (); - ret = gst_gl_display_connect (glimage_sink->display, NULL); - if (!ret) { - g_object_unref (glimage_sink->display); - return GST_FLOW_ERROR; - } - if (glimage_sink->window_id) { - gst_gl_display_set_window (glimage_sink->display, - glimage_sink->window_id); - } - gst_gl_display_set_visible (glimage_sink->display, TRUE); - } - display = glimage_sink->display; - - gl_buffer = gst_gl_buffer_new_from_video_format (display, - glimage_sink->format, glimage_sink->width, glimage_sink->height); - gst_gl_buffer_upload (gl_buffer, glimage_sink->format, - GST_BUFFER_DATA (buf)); - } - - glimage_sink->stored_buffer = gst_gl_buffer_ref (gl_buffer); - gst_gl_display_draw_texture (display, gl_buffer->texture, - gl_buffer->width, gl_buffer->height, TRUE); - - gst_buffer_unref (GST_BUFFER (gl_buffer)); - - return GST_FLOW_OK; -} - -/* - * XOverlay - */ -static void -gst_glimage_sink_xoverlay_init (GstXOverlayClass * iface) -{ - iface->set_xwindow_id = gst_glimage_sink_set_xwindow_id; - iface->expose = gst_glimage_sink_expose; - iface->handle_events = gst_glimage_sink_set_event_handling; -} - -static void -gst_glimage_sink_set_xwindow_id (GstXOverlay * overlay, XID window_id) -{ - GstGLImageSink *glimage_sink; - - g_return_if_fail (GST_IS_GLIMAGE_SINK (overlay)); - - GST_DEBUG ("set_xwindow_id %ld", window_id); - - glimage_sink = GST_GLIMAGE_SINK (overlay); - - if (glimage_sink->window_id == window_id) { - return; - } - glimage_sink->window_id = window_id; - if (glimage_sink->display) { - gst_gl_display_set_window (glimage_sink->display, glimage_sink->window_id); - } -} - -static void -gst_glimage_sink_expose (GstXOverlay * overlay) -{ - GstGLImageSink *glimagesink = GST_GLIMAGE_SINK (overlay); - - GST_DEBUG ("expose"); - - if (glimagesink->display) { - gst_gl_display_update_window (glimagesink->display); - } - - if (glimagesink->stored_buffer) { - GstGLBuffer *gl_buffer = glimagesink->stored_buffer; - - gst_gl_display_draw_texture (gl_buffer->display, gl_buffer->texture, - gl_buffer->width, gl_buffer->height, FALSE); - } -} - -static void -gst_glimage_sink_set_event_handling (GstXOverlay * overlay, - gboolean handle_events) -{ - /* FIXME */ - GST_DEBUG ("handle_events %d", handle_events); -} - -/* - * GstImplementsInterface - */ -static gboolean -gst_glimage_sink_interface_supported (GstImplementsInterface * iface, - GType type) -{ - return TRUE; -} - -static void -gst_glimage_sink_implements_init (GstImplementsInterfaceClass * klass) -{ - klass->supported = gst_glimage_sink_interface_supported; -} diff --git a/gst/gl/glimagesink.h b/gst/gl/glimagesink.h deleted file mode 100644 index 093bc1c..0000000 --- a/gst/gl/glimagesink.h +++ /dev/null @@ -1,79 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Julien Moutte <julien@moutte.net> - * Copyright (C) 2005,2006,2007 David A. Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GLIMAGESINK_H_ -#define _GLIMAGESINK_H_ - -#include <gst/gst.h> -#include <gst/interfaces/xoverlay.h> -#include <gst/video/gstvideosink.h> -#include <gst/video/video.h> - -#include "gstgldisplay.h" -#include "gstglbuffer.h" - -GST_DEBUG_CATEGORY_EXTERN (gst_debug_glimage_sink); - -#define GST_TYPE_GLIMAGE_SINK \ - (gst_glimage_sink_get_type()) -#define GST_GLIMAGE_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GLIMAGE_SINK,GstGLImageSink)) -#define GST_GLIMAGE_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GLIMAGE_SINK,GstGLImageSinkClass)) -#define GST_IS_GLIMAGE_SINK(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GLIMAGE_SINK)) -#define GST_IS_GLIMAGE_SINK_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GLIMAGE_SINK)) - -typedef struct _GstGLImageSink GstGLImageSink; -typedef struct _GstGLImageSinkClass GstGLImageSinkClass; - -struct _GstGLImageSink -{ - GstVideoSink video_sink; - - /* properties */ - char *display_name; - - /* caps */ - GstCaps *caps; - GstVideoFormat format; - int width; - int height; - gboolean is_gl; - int fps_n, fps_d; - int par_n, par_d; - - GstGLDisplay *display; - GstGLBuffer *stored_buffer; - - XID window_id; -}; - -struct _GstGLImageSinkClass -{ - GstVideoSinkClass video_sink_class; - -}; - -GType gst_glimage_sink_get_type(void); - -#endif - diff --git a/gst/gl/gltestsrc.c b/gst/gl/gltestsrc.c deleted file mode 100644 index 05750f7..0000000 --- a/gst/gl/gltestsrc.c +++ /dev/null @@ -1,495 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -/* non-GST-specific stuff */ - -#include "gstgltestsrc.h" -#include "gltestsrc.h" -#include "gstglbuffer.h" - - -#include <string.h> -#include <stdlib.h> -#include <math.h> - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -enum -{ - COLOR_WHITE = 0, - COLOR_YELLOW, - COLOR_CYAN, - COLOR_GREEN, - COLOR_MAGENTA, - COLOR_RED, - COLOR_BLUE, - COLOR_BLACK, - COLOR_NEG_I, - COLOR_POS_Q, - COLOR_SUPER_BLACK, - COLOR_DARK_GREY -}; - -static const struct vts_color_struct vts_colors[] = { - /* 100% white */ - {255, 128, 128, 255, 255, 255, 255}, - /* yellow */ - {226, 0, 155, 255, 255, 0, 255}, - /* cyan */ - {179, 170, 0, 0, 255, 255, 255}, - /* green */ - {150, 46, 21, 0, 255, 0, 255}, - /* magenta */ - {105, 212, 235, 255, 0, 255, 255}, - /* red */ - {76, 85, 255, 255, 0, 0, 255}, - /* blue */ - {29, 255, 107, 0, 0, 255, 255}, - /* black */ - {16, 128, 128, 0, 0, 0, 255}, - /* -I */ - {16, 198, 21, 0, 0, 128, 255}, - /* +Q */ - {16, 235, 198, 0, 128, 255, 255}, - /* superblack */ - {0, 128, 128, 0, 0, 0, 255}, - /* 5% grey */ - {32, 128, 128, 32, 32, 32, 255}, -}; - -static void -gst_gl_test_src_unicolor (GstGLTestSrc * v, GstGLBuffer * buffer, int w, - int h, const struct vts_color_struct *color); - -void -gst_gl_test_src_smpte (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ - int i; - - glClearColor (0.0, 0.0, 0.0, 1.0); - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glDisable (GL_CULL_FACE); - glDisable (GL_TEXTURE_RECTANGLE_ARB); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - - for (i = 0; i < 7; i++) { - glColor4f (vts_colors[i].R * (1 / 255.0), vts_colors[i].G * (1 / 255.0), - vts_colors[i].B * (1 / 255.0), 1.0); - glBegin (GL_QUADS); - glVertex3f (-1.0 + i * (2.0 / 7.0), -1.0 + 2.0 * (2.0 / 3.0), 0); - glVertex3f (-1.0 + (i + 1) * (2.0 / 7.0), -1.0 + 2.0 * (2.0 / 3.0), 0); - glVertex3f (-1.0 + (i + 1) * (2.0 / 7.0), -1.0, 0); - glVertex3f (-1.0 + i * (2.0 / 7.0), -1.0, 0); - glEnd (); - } - - for (i = 0; i < 7; i++) { - int k; - - if (i & 1) { - k = 7; - } else { - k = 6 - i; - } - - glColor4f (vts_colors[k].R * (1 / 255.0), vts_colors[k].G * (1 / 255.0), - vts_colors[k].B * (1 / 255.0), 1.0); - glBegin (GL_QUADS); - glVertex3f (-1.0 + i * (2.0 / 7.0), -1.0 + 2.0 * (3.0 / 4.0), 0); - glVertex3f (-1.0 + (i + 1) * (2.0 / 7.0), -1.0 + 2.0 * (3.0 / 4.0), 0); - glVertex3f (-1.0 + (i + 1) * (2.0 / 7.0), -1.0 + 2.0 * (2.0 / 3.0), 0); - glVertex3f (-1.0 + i * (2.0 / 7.0), -1.0 + 2.0 * (2.0 / 3.0), 0); - glEnd (); - } - - for (i = 0; i < 3; i++) { - int k; - - if (i == 0) { - k = 8; - } else if (i == 1) { - k = 0; - } else { - k = 9; - } - - glColor4f (vts_colors[k].R * (1 / 255.0), vts_colors[k].G * (1 / 255.0), - vts_colors[k].B * (1 / 255.0), 1.0); - glBegin (GL_QUADS); - glVertex3f (-1.0 + i * (2.0 / 6.0), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + (i + 1) * (2.0 / 6.0), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + (i + 1) * (2.0 / 6.0), -1.0 + 2.0 * (3.0 / 4.0), 0); - glVertex3f (-1.0 + i * (2.0 / 6.0), -1.0 + 2.0 * (3.0 / 4.0), 0); - glEnd (); - } - - for (i = 0; i < 3; i++) { - int k; - - if (i == 0) { - k = COLOR_SUPER_BLACK; - } else if (i == 1) { - k = COLOR_BLACK; - } else { - k = COLOR_DARK_GREY; - } - - glColor4f (vts_colors[k].R * (1 / 255.0), vts_colors[k].G * (1 / 255.0), - vts_colors[k].B * (1 / 255.0), 1.0); - glBegin (GL_QUADS); - glVertex3f (-1.0 + 2.0 * (0.5 + i * (1.0 / 12.0)), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + 2.0 * (0.5 + (i + 1) * (1.0 / 12.0)), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + 2.0 * (0.5 + (i + 1) * (1.0 / 12.0)), - -1.0 + 2.0 * (3.0 / 4.0), 0); - glVertex3f (-1.0 + 2.0 * (0.5 + i * (1.0 / 12.0)), -1.0 + 2.0 * (3.0 / 4.0), - 0); - glEnd (); - } - - glColor4f (0.5, 0.5, 0.5, 1.0); - glBegin (GL_QUADS); - glVertex3f (-1.0 + 2.0 * (0.75), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + 2.0 * (1.0), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + 2.0 * (1.0), -1.0 + 2.0 * (3.0 / 4.0), 0); - glVertex3f (-1.0 + 2.0 * (0.75), -1.0 + 2.0 * (3.0 / 4.0), 0); - glEnd (); - -} - -void -gst_gl_test_src_snow (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ - glClearColor (0.0, 0.0, 0.0, 1.0); - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glMatrixMode (GL_PROJECTION); - glLoadIdentity (); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - - /* FIXME snow requires a fragment shader. Please write. */ - glColor4f (0.5, 0.5, 0.5, 1.0); - glBegin (GL_QUADS); - glVertex3f (-1.0 + 2.0 * (0.0), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + 2.0 * (1.0), -1.0 + 2.0 * 1, 0); - glVertex3f (-1.0 + 2.0 * (1.0), -1.0 + 2.0 * (0.0), 0); - glVertex3f (-1.0 + 2.0 * (0.0), -1.0 + 2.0 * (0.0), 0); - glEnd (); -} - -static void -gst_gl_test_src_unicolor (GstGLTestSrc * v, GstGLBuffer * buffer, int w, - int h, const struct vts_color_struct *color) -{ - glClearColor (color->R * (1 / 255.0), color->G * (1 / 255.0), - color->B * (1 / 255.0), 1.0); - glClear (GL_COLOR_BUFFER_BIT); -} - -void -gst_gl_test_src_black (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ - gst_gl_test_src_unicolor (v, buffer, w, h, vts_colors + COLOR_BLACK); -} - -void -gst_gl_test_src_white (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ - gst_gl_test_src_unicolor (v, buffer, w, h, vts_colors + COLOR_WHITE); -} - -void -gst_gl_test_src_red (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ - gst_gl_test_src_unicolor (v, buffer, w, h, vts_colors + COLOR_RED); -} - -void -gst_gl_test_src_green (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ - gst_gl_test_src_unicolor (v, buffer, w, h, vts_colors + COLOR_GREEN); -} - -void -gst_gl_test_src_blue (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ - gst_gl_test_src_unicolor (v, buffer, w, h, vts_colors + COLOR_BLUE); -} - -void -gst_gl_test_src_checkers1 (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ -#if 0 - int x, y; - paintinfo pi = { NULL, }; - paintinfo *p = π - struct fourcc_list_struct *fourcc; - - p->width = w; - p->height = h; - fourcc = v->fourcc; - if (fourcc == NULL) - return; - - fourcc->paint_setup (p, dest); - p->paint_hline = fourcc->paint_hline; - - for (y = 0; y < h; y++) { - p->color = vts_colors + COLOR_GREEN; - p->paint_hline (p, 0, y, w); - for (x = (y % 2); x < w; x += 2) { - p->color = vts_colors + COLOR_RED; - p->paint_hline (p, x, y, 1); - } - } -#endif -} - -void -gst_gl_test_src_checkers2 (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ -#if 0 - int x, y; - paintinfo pi = { NULL, }; - paintinfo *p = π - struct fourcc_list_struct *fourcc; - - p->width = w; - p->height = h; - fourcc = v->fourcc; - if (fourcc == NULL) - return; - - fourcc->paint_setup (p, dest); - p->paint_hline = fourcc->paint_hline; - - p->color = vts_colors + COLOR_GREEN; - for (y = 0; y < h; y++) { - p->paint_hline (p, 0, y, w); - } - - for (y = 0; y < h; y += 2) { - for (x = ((y % 4) == 0) ? 0 : 2; x < w; x += 4) { - guint len = (x < (w - 1)) ? 2 : (w - x); - - p->color = vts_colors + COLOR_RED; - p->paint_hline (p, x, y + 0, len); - if (G_LIKELY ((y + 1) < h)) { - p->paint_hline (p, x, y + 1, len); - } - } - } -#endif -} - -void -gst_gl_test_src_checkers4 (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ -#if 0 - int x, y; - paintinfo pi = { NULL, }; - paintinfo *p = π - struct fourcc_list_struct *fourcc; - - p->width = w; - p->height = h; - fourcc = v->fourcc; - if (fourcc == NULL) - return; - - fourcc->paint_setup (p, dest); - p->paint_hline = fourcc->paint_hline; - - p->color = vts_colors + COLOR_GREEN; - for (y = 0; y < h; y++) { - p->paint_hline (p, 0, y, w); - } - - for (y = 0; y < h; y += 4) { - for (x = ((y % 8) == 0) ? 0 : 4; x < w; x += 8) { - guint len = (x < (w - 3)) ? 4 : (w - x); - - p->color = vts_colors + COLOR_RED; - p->paint_hline (p, x, y + 0, len); - if (G_LIKELY ((y + 1) < h)) { - p->paint_hline (p, x, y + 1, len); - if (G_LIKELY ((y + 2) < h)) { - p->paint_hline (p, x, y + 2, len); - if (G_LIKELY ((y + 3) < h)) { - p->paint_hline (p, x, y + 3, len); - } - } - } - } - } -#endif -} - -void -gst_gl_test_src_checkers8 (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ -#if 0 - int x, y; - paintinfo pi = { NULL, }; - paintinfo *p = π - struct fourcc_list_struct *fourcc; - - p->width = w; - p->height = h; - fourcc = v->fourcc; - if (fourcc == NULL) - return; - - fourcc->paint_setup (p, dest); - p->paint_hline = fourcc->paint_hline; - - p->color = vts_colors + COLOR_GREEN; - for (y = 0; y < h; y++) { - p->paint_hline (p, 0, y, w); - } - - for (y = 0; y < h; y += 8) { - for (x = ((GST_ROUND_UP_8 (y) % 16) == 0) ? 0 : 8; x < w; x += 16) { - guint len = (x < (w - 7)) ? 8 : (w - x); - - p->color = vts_colors + COLOR_RED; - p->paint_hline (p, x, y + 0, len); - if (G_LIKELY ((y + 1) < h)) { - p->paint_hline (p, x, y + 1, len); - if (G_LIKELY ((y + 2) < h)) { - p->paint_hline (p, x, y + 2, len); - if (G_LIKELY ((y + 3) < h)) { - p->paint_hline (p, x, y + 3, len); - if (G_LIKELY ((y + 4) < h)) { - p->paint_hline (p, x, y + 4, len); - if (G_LIKELY ((y + 5) < h)) { - p->paint_hline (p, x, y + 5, len); - if (G_LIKELY ((y + 6) < h)) { - p->paint_hline (p, x, y + 6, len); - if (G_LIKELY ((y + 7) < h)) { - p->paint_hline (p, x, y + 7, len); - } - } - } - } - } - } - } - } - } -#endif -} - -void -gst_gl_test_src_circular (GstGLTestSrc * v, GstGLBuffer * buffer, int w, int h) -{ -#if 0 - int i; - int j; - paintinfo pi = { NULL, }; - paintinfo *p = π - struct fourcc_list_struct *fourcc; - struct vts_color_struct color; - static uint8_t sine_array[256]; - static int sine_array_inited = FALSE; - double freq[8]; - -#ifdef SCALE_AMPLITUDE - double ampl[8]; -#endif - int d; - - if (!sine_array_inited) { - for (i = 0; i < 256; i++) { - sine_array[i] = - floor (255 * (0.5 + 0.5 * sin (i * 2 * M_PI / 256)) + 0.5); - } - sine_array_inited = TRUE; - } - - p->width = w; - p->height = h; - fourcc = v->fourcc; - if (fourcc == NULL) - return; - - fourcc->paint_setup (p, dest); - p->paint_hline = fourcc->paint_hline; - - color = vts_colors[COLOR_BLACK]; - p->color = &color; - - for (i = 1; i < 8; i++) { - freq[i] = 200 * pow (2.0, -(i - 1) / 4.0); -#ifdef SCALE_AMPLITUDE - { - double x; - - x = 2 * M_PI * freq[i] / w; - ampl[i] = sin (x) / x; - } -#endif - } - - for (i = 0; i < w; i++) { - for (j = 0; j < h; j++) { - double dist; - int seg; - - dist = - sqrt ((2 * i - w) * (2 * i - w) + (2 * j - h) * (2 * j - - h)) / (2 * w); - seg = floor (dist * 16); - if (seg == 0 || seg >= 8) { - color.Y = 255; - } else { -#ifdef SCALE_AMPLITUDE - double a; -#endif - d = floor (256 * dist * freq[seg] + 0.5); -#ifdef SCALE_AMPLITUDE - a = ampl[seg]; - if (a < 0) - a = 0; - color.Y = 128 + a * (sine_array[d & 0xff] - 128); -#else - color.Y = sine_array[d & 0xff]; -#endif - } - color.R = color.Y; - color.G = color.Y; - color.B = color.Y; - p->paint_hline (p, i, j, 1); - } - } -#endif -} diff --git a/gst/gl/gltestsrc.h b/gst/gl/gltestsrc.h deleted file mode 100644 index 345b9b1..0000000 --- a/gst/gl/gltestsrc.h +++ /dev/null @@ -1,57 +0,0 @@ -/* GStreamer - * Copyright (C) <2003> David A. Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GL_TEST_SRC_H__ -#define __GL_TEST_SRC_H__ - -#include <glib.h> -#include "gstglbuffer.h" - -struct vts_color_struct { - guint8 Y, U, V; - guint8 R, G, B; - guint8 A; -}; - -void gst_gl_test_src_smpte (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_snow (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_black (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_white (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_red (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_green (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_blue (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_checkers1 (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_checkers2 (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_checkers4 (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_checkers8 (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); -void gst_gl_test_src_circular (GstGLTestSrc * v, - GstGLBuffer *buffer, int w, int h); - -#endif diff --git a/gst/gl/gstglconvert.c b/gst/gl/gstglconvert.c deleted file mode 100644 index f4f525e..0000000 --- a/gst/gl/gstglconvert.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2007 David Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gst/gst.h> -#include <gst/video/video.h> -#include <gstglbuffer.h> -#include <gstglfilter.h> -#include "glextensions.h" - -#define GST_CAT_DEFAULT gst_gl_convert_debug -GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); - -#define GST_TYPE_GL_CONVERT (gst_gl_convert_get_type()) -#define GST_GL_CONVERT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_CONVERT,GstGLConvert)) -#define GST_IS_GL_CONVERT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_CONVERT)) -#define GST_GL_CONVERT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_GL_CONVERT,GstGLConvertClass)) -#define GST_IS_GL_CONVERT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_GL_CONVERT)) -#define GST_GL_CONVERT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_GL_CONVERT,GstGLConvertClass)) -typedef struct _GstGLConvert GstGLConvert; -typedef struct _GstGLConvertClass GstGLConvertClass; - -struct _GstGLConvert -{ - GstGLFilter filter; - - /* < private > */ - -}; - -struct _GstGLConvertClass -{ - GstGLFilterClass filter_class; -}; - -static const GstElementDetails element_details = GST_ELEMENT_DETAILS ("FIXME", - "Filter/Effect", - "FIXME GL conversion filter", - "FIXME <fixme@fixme.com>"); - -enum -{ - PROP_0 -}; - -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_gl_convert_debug, "glconvert", 0, "glconvert element"); - -GST_BOILERPLATE_FULL (GstGLConvert, gst_gl_convert, GstGLFilter, - GST_TYPE_GL_FILTER, DEBUG_INIT); - -static void gst_gl_convert_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_gl_convert_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static gboolean gst_gl_convert_filter (GstGLFilter * filter, - GstGLBuffer * inbuf, GstGLBuffer * outbuf); - - -static void -gst_gl_convert_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_set_details (element_class, &element_details); -} - -static void -gst_gl_convert_class_init (GstGLConvertClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - gobject_class->set_property = gst_gl_convert_set_property; - gobject_class->get_property = gst_gl_convert_get_property; - - GST_GL_FILTER_CLASS (klass)->filter = gst_gl_convert_filter; -} - -static void -gst_gl_convert_init (GstGLConvert * filter, GstGLConvertClass * klass) -{ -} - -static void -gst_gl_convert_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - //GstGLConvert *filter = GST_GL_CONVERT (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_convert_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - //GstGLConvert *filter = GST_GL_CONVERT (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static gboolean -gst_gl_convert_filter (GstGLFilter * filter, GstGLBuffer * inbuf, - GstGLBuffer * outbuf) -{ - //GstGLConvert *convert = GST_GL_CONVERT(filter); - - glDisable (GL_CULL_FACE); - glEnableClientState (GL_TEXTURE_COORD_ARRAY); - - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - - if (inbuf->is_yuv) { -#ifdef GL_POST_COLOR_MATRIX_RED_BIAS - const double matrix[16] = { - 1.16438, 1.6321, -0.00107909, 0, - 1.13839, -0.813005, -0.39126, 0, - 1.13839, 0.00112726, 2.01741, 0, - 0, 0, 0, 1 - }; - - GST_DEBUG ("applying YUV->RGB conversion"); - - glMatrixMode (GL_COLOR); - glLoadMatrixd (matrix); - - /* same */ - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_BIAS, -0.873494); - glPixelTransferf (GL_POST_COLOR_MATRIX_GREEN_BIAS, 0.531435); - glPixelTransferf (GL_POST_COLOR_MATRIX_BLUE_BIAS, -1.08629); -#else - g_assert_not_reached (); -#endif - } - - glColor4f (1, 0, 1, 1); - - glBegin (GL_QUADS); - glNormal3f (0, 0, -1); - glTexCoord2f (inbuf->width, 0); - glVertex3f (1.0, -1.0, 0); - glTexCoord2f (0, 0); - glVertex3f (-1.0, -1.0, 0); - glTexCoord2f (0, inbuf->height); - glVertex3f (-1.0, 1.0, 0); - glTexCoord2f (inbuf->width, inbuf->height); - glVertex3f (1.0, 1.0, 0); - glEnd (); - - if (inbuf->is_yuv) { -#ifdef GL_POST_COLOR_MATRIX_RED_BIAS - glMatrixMode (GL_COLOR); - glLoadIdentity (); - - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_BIAS, 0); - glPixelTransferf (GL_POST_COLOR_MATRIX_GREEN_BIAS, 0); - glPixelTransferf (GL_POST_COLOR_MATRIX_BLUE_BIAS, 0); -#else - g_assert_not_reached (); -#endif - } - - return TRUE; -} diff --git a/gst/gl/gstgldownload.c b/gst/gl/gstgldownload.c deleted file mode 100644 index 4c460b9..0000000 --- a/gst/gl/gstgldownload.c +++ /dev/null @@ -1,323 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2007 David Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gst/gst.h> -#include <gst/base/gstbasetransform.h> -#include <gst/video/video.h> -#include <gstglbuffer.h> - -#define GST_CAT_DEFAULT gst_gl_download_debug -GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); - -#define GST_TYPE_GL_DOWNLOAD (gst_gl_download_get_type()) -#define GST_GL_DOWNLOAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_DOWNLOAD,GstGLDownload)) -#define GST_IS_GL_DOWNLOAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_DOWNLOAD)) -#define GST_GL_DOWNLOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_GL_DOWNLOAD,GstGLDownloadClass)) -#define GST_IS_GL_DOWNLOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_GL_DOWNLOAD)) -#define GST_GL_DOWNLOAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_GL_DOWNLOAD,GstGLDownloadClass)) -typedef struct _GstGLDownload GstGLDownload; -typedef struct _GstGLDownloadClass GstGLDownloadClass; - -typedef void (*GstGLDownloadProcessFunc) (GstGLDownload *, guint8 *, guint); - -struct _GstGLDownload -{ - GstBaseTransform base_transform; - - /* < private > */ - - GstGLDisplay *display; - GstVideoFormat format; - int width; - int height; -}; - -struct _GstGLDownloadClass -{ - GstBaseTransformClass base_transform_class; -}; - -static const GstElementDetails element_details = GST_ELEMENT_DETAILS ("FIXME", - "Filter/Effect", - "FIXME example filter", - "FIXME <fixme@fixme.com>"); - -static GstStaticPadTemplate gst_gl_download_src_pad_template = - GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_xRGB ";" - GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";" GST_VIDEO_CAPS_xBGR) - ); - -static GstStaticPadTemplate gst_gl_download_sink_pad_template = -GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_GL_VIDEO_CAPS) - ); - -enum -{ - PROP_0 -}; - -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_gl_download_debug, "gldownload", 0, "gldownload element"); - -GST_BOILERPLATE_FULL (GstGLDownload, gst_gl_download, GstBaseTransform, - GST_TYPE_BASE_TRANSFORM, DEBUG_INIT); - -static void gst_gl_download_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_gl_download_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static void gst_gl_download_reset (GstGLDownload * download); -static gboolean gst_gl_download_set_caps (GstBaseTransform * bt, - GstCaps * incaps, GstCaps * outcaps); -static GstCaps *gst_gl_download_transform_caps (GstBaseTransform * bt, - GstPadDirection direction, GstCaps * caps); -static gboolean gst_gl_download_start (GstBaseTransform * bt); -static gboolean gst_gl_download_stop (GstBaseTransform * bt); -static GstFlowReturn gst_gl_download_transform (GstBaseTransform * trans, - GstBuffer * inbuf, GstBuffer * outbuf); -static gboolean -gst_gl_download_get_unit_size (GstBaseTransform * trans, GstCaps * caps, - guint * size); - - -static void -gst_gl_download_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_set_details (element_class, &element_details); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_gl_download_src_pad_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_gl_download_sink_pad_template)); -} - -static void -gst_gl_download_class_init (GstGLDownloadClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - gobject_class->set_property = gst_gl_download_set_property; - gobject_class->get_property = gst_gl_download_get_property; - - GST_BASE_TRANSFORM_CLASS (klass)->transform_caps = - gst_gl_download_transform_caps; - GST_BASE_TRANSFORM_CLASS (klass)->transform = gst_gl_download_transform; - GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_download_start; - GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_download_stop; - GST_BASE_TRANSFORM_CLASS (klass)->set_caps = gst_gl_download_set_caps; - GST_BASE_TRANSFORM_CLASS (klass)->get_unit_size = - gst_gl_download_get_unit_size; -} - -static void -gst_gl_download_init (GstGLDownload * download, GstGLDownloadClass * klass) -{ - gst_gl_download_reset (download); -} - -static void -gst_gl_download_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - //GstGLDownload *download = GST_GL_DOWNLOAD (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_download_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - //GstGLDownload *download = GST_GL_DOWNLOAD (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_download_reset (GstGLDownload * download) -{ - if (download->display) { - g_object_unref (download->display); - download->display = NULL; - } - download->format = GST_VIDEO_FORMAT_RGBx; -} - -static gboolean -gst_gl_download_start (GstBaseTransform * bt) -{ - GstGLDownload *download = GST_GL_DOWNLOAD (bt); - - download->format = GST_VIDEO_FORMAT_RGBx; - - return TRUE; -} - -static gboolean -gst_gl_download_stop (GstBaseTransform * bt) -{ - GstGLDownload *download = GST_GL_DOWNLOAD (bt); - - gst_gl_download_reset (download); - - return TRUE; -} - -static GstCaps * -gst_gl_download_transform_caps (GstBaseTransform * bt, - GstPadDirection direction, GstCaps * caps) -{ - GstGLDownload *download; - GstStructure *structure; - GstCaps *newcaps; - GstStructure *newstruct; - const GValue *width_value; - const GValue *height_value; - const GValue *framerate_value; - const GValue *par_value; - - download = GST_GL_DOWNLOAD (bt); - - GST_ERROR ("transform caps %" GST_PTR_FORMAT, caps); - - structure = gst_caps_get_structure (caps, 0); - - width_value = gst_structure_get_value (structure, "width"); - height_value = gst_structure_get_value (structure, "height"); - framerate_value = gst_structure_get_value (structure, "framerate"); - par_value = gst_structure_get_value (structure, "pixel-aspect-ratio"); - - if (direction == GST_PAD_SINK) { - newcaps = gst_caps_new_simple ("video/x-raw-rgb", NULL); - } else { - newcaps = gst_caps_new_simple ("video/x-raw-gl", - "format", G_TYPE_INT, GST_GL_BUFFER_FORMAT_RGBA, - "is_yuv", G_TYPE_BOOLEAN, FALSE, NULL); - } - newstruct = gst_caps_get_structure (newcaps, 0); - gst_structure_set_value (newstruct, "width", width_value); - gst_structure_set_value (newstruct, "height", height_value); - gst_structure_set_value (newstruct, "framerate", framerate_value); - if (par_value) { - gst_structure_set_value (newstruct, "pixel-aspect-ratio", par_value); - } else { - gst_structure_set (newstruct, "pixel-aspect-ratio", GST_TYPE_FRACTION, - 1, 1, NULL); - } - - GST_ERROR ("new caps %" GST_PTR_FORMAT, newcaps); - - return newcaps; -} - -static gboolean -gst_gl_download_set_caps (GstBaseTransform * bt, GstCaps * incaps, - GstCaps * outcaps) -{ - GstGLDownload *download; - gboolean ret; - - download = GST_GL_DOWNLOAD (bt); - - GST_DEBUG ("called with %" GST_PTR_FORMAT, incaps); - - ret = gst_video_format_parse_caps (outcaps, &download->format, - &download->width, &download->height); - - if (!ret) { - GST_ERROR ("bad caps"); - return FALSE; - } - - return ret; -} - -static gboolean -gst_gl_download_get_unit_size (GstBaseTransform * trans, GstCaps * caps, - guint * size) -{ - gboolean ret; - GstStructure *structure; - int width; - int height; - - structure = gst_caps_get_structure (caps, 0); - if (gst_structure_has_name (structure, "video/x-raw-gl")) { - GstGLBufferFormat format; - - ret = gst_gl_buffer_format_parse_caps (caps, &format, &width, &height); - if (ret) { - *size = gst_gl_buffer_format_get_size (format, width, height); - } - } else { - GstVideoFormat format; - - ret = gst_video_format_parse_caps (caps, &format, &width, &height); - if (ret) { - *size = gst_video_format_get_size (format, width, height); - } - } - - return ret; -} - -static GstFlowReturn -gst_gl_download_transform (GstBaseTransform * trans, GstBuffer * inbuf, - GstBuffer * outbuf) -{ - GstGLDownload *download; - GstGLBuffer *gl_inbuf = GST_GL_BUFFER (inbuf); - - download = GST_GL_DOWNLOAD (trans); - - if (download->display == NULL) { - download->display = g_object_ref (gl_inbuf->display); - } else { - g_assert (download->display == gl_inbuf->display); - } - - GST_DEBUG ("downloading %p size %d", - GST_BUFFER_DATA (outbuf), GST_BUFFER_SIZE (outbuf)); - gst_gl_buffer_download (gl_inbuf, download->format, GST_BUFFER_DATA (outbuf)); - - return GST_FLOW_OK; -} diff --git a/gst/gl/gstglfilterexample.c b/gst/gl/gstglfilterexample.c deleted file mode 100644 index 8f7de08..0000000 --- a/gst/gl/gstglfilterexample.c +++ /dev/null @@ -1,243 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2007 David Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gst/gst.h> -#include <gst/video/video.h> -#include <gstglbuffer.h> -#include <gstglfilter.h> -#include "glextensions.h" -#include <string.h> - -#define GST_CAT_DEFAULT gst_gl_filter_example_debug -GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); - -#define GST_TYPE_GL_FILTER_EXAMPLE (gst_gl_filter_example_get_type()) -#define GST_GL_FILTER_EXAMPLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_FILTER_EXAMPLE,GstGLFilterExample)) -#define GST_IS_GL_FILTER_EXAMPLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_FILTER_EXAMPLE)) -#define GST_GL_FILTER_EXAMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_GL_FILTER_EXAMPLE,GstGLFilterExampleClass)) -#define GST_IS_GL_FILTER_EXAMPLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_GL_FILTER_EXAMPLE)) -#define GST_GL_FILTER_EXAMPLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_GL_FILTER_EXAMPLE,GstGLFilterExampleClass)) -typedef struct _GstGLFilterExample GstGLFilterExample; -typedef struct _GstGLFilterExampleClass GstGLFilterExampleClass; - -struct _GstGLFilterExample -{ - GstGLFilter filter; - - /* < private > */ - -}; - -struct _GstGLFilterExampleClass -{ - GstGLFilterClass filter_class; -}; - -static const GstElementDetails element_details = GST_ELEMENT_DETAILS ("FIXME", - "Filter/Effect", - "FIXME example filter", - "FIXME <fixme@fixme.com>"); - -enum -{ - PROP_0 -}; - -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_gl_filter_example_debug, "glfilterexample", 0, "glfilterexample element"); - -GST_BOILERPLATE_FULL (GstGLFilterExample, gst_gl_filter_example, GstGLFilter, - GST_TYPE_GL_FILTER, DEBUG_INIT); - -static void gst_gl_filter_example_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_gl_filter_example_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static gboolean gst_gl_filter_example_filter (GstGLFilter * filter, - GstGLBuffer * inbuf, GstGLBuffer * outbuf); - - -static void -gst_gl_filter_example_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_set_details (element_class, &element_details); -} - -static void -gst_gl_filter_example_class_init (GstGLFilterExampleClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - gobject_class->set_property = gst_gl_filter_example_set_property; - gobject_class->get_property = gst_gl_filter_example_get_property; - - GST_GL_FILTER_CLASS (klass)->filter = gst_gl_filter_example_filter; -} - -static void -gst_gl_filter_example_init (GstGLFilterExample * filter, - GstGLFilterExampleClass * klass) -{ -} - -static void -gst_gl_filter_example_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - //GstGLFilterExample *filter = GST_GL_FILTER_EXAMPLE (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_filter_example_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - //GstGLFilterExample *filter = GST_GL_FILTER_EXAMPLE (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static gboolean -gst_gl_filter_example_filter (GstGLFilter * filter, GstGLBuffer * inbuf, - GstGLBuffer * outbuf) -{ - //GstGLFilterExample *example = GST_GL_FILTER_EXAMPLE(filter); - int i, j; - double *vertex_x, *vertex_y; - - glDisable (GL_CULL_FACE); - glEnableClientState (GL_TEXTURE_COORD_ARRAY); - - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); - - glColor4f (1, 0, 1, 1); - -#define GAIN 0.5 - /* just for fun. swap red and blue components. Doesn't work on my - * driver. */ - { - const double matrix[16] = { - 0, 0, 1.0, 0, - 0, 1.0, 0, 0, - 1.0, 0, 0, 0, - 0, 0, 0, 1 - }; - - glMatrixMode (GL_COLOR); - glLoadMatrixd (matrix); - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_BIAS, (1 - GAIN) / 2); - glPixelTransferf (GL_POST_COLOR_MATRIX_GREEN_BIAS, (1 - GAIN) / 2); - glPixelTransferf (GL_POST_COLOR_MATRIX_BLUE_BIAS, (1 - GAIN) / 2); - } - - /* load raster-scanning matrix */ - { - const double matrix[16] = { - 2.0, 0, 0, 0, - 0, 2.0, 0, 0, - 0, 0, 1, 0, - -1, -1, 0, 1 - }; - glMatrixMode (GL_MODELVIEW); - glLoadMatrixd (matrix); - } - /* load texture raster-scanning matrix */ - { - double matrix[16] = { - 1.0, 0, 0, 0, - 0, 1.0, 0, 0, - 0, 0, 1, 0, - -1, -1, 0, 1 - }; - matrix[0] = inbuf->width; - matrix[5] = inbuf->height; - glMatrixMode (GL_TEXTURE); - glLoadMatrixd (matrix); - } - -#define N 10 -#define SCALE (1.0/N) -#define NOISE() (0.1*SCALE*g_random_double_range(-1,1)) - vertex_x = malloc (sizeof (double) * (N + 1) * (N + 1)); - vertex_y = malloc (sizeof (double) * (N + 1) * (N + 1)); - for (j = 0; j < N + 1; j++) { - for (i = 0; i < N + 1; i++) { - vertex_x[j * (N + 1) + i] = i * SCALE + NOISE (); - vertex_y[j * (N + 1) + i] = j * SCALE + NOISE (); - } - } - for (j = 0; j < N; j++) { - for (i = 0; i < N; i++) { - glBegin (GL_QUADS); - glNormal3f (0, 0, -1); - glTexCoord2f (i * SCALE, j * SCALE); - glVertex3f (vertex_x[j * (N + 1) + i], vertex_y[j * (N + 1) + i], 0); - glTexCoord2f ((i + 1) * SCALE, j * SCALE); - glVertex3f (vertex_x[j * (N + 1) + (i + 1)], - vertex_y[j * (N + 1) + (i + 1)], 0); - glTexCoord2f ((i + 1) * SCALE, (j + 1) * SCALE); - glVertex3f (vertex_x[(j + 1) * (N + 1) + (i + 1)], - vertex_y[(j + 1) * (N + 1) + (i + 1)], 0); - glTexCoord2f (i * SCALE, (j + 1) * SCALE); - glVertex3f (vertex_x[(j + 1) * (N + 1) + i], - vertex_y[(j + 1) * (N + 1) + i], 0); - glEnd (); - } - } - free (vertex_x); - free (vertex_y); - - - glFlush (); - - glMatrixMode (GL_MODELVIEW); - glLoadIdentity (); - glMatrixMode (GL_TEXTURE); - glLoadIdentity (); - glMatrixMode (GL_COLOR); - glLoadIdentity (); - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_SCALE, 1.0); - glPixelTransferf (GL_POST_COLOR_MATRIX_RED_BIAS, 0); - glPixelTransferf (GL_POST_COLOR_MATRIX_GREEN_BIAS, 0); - glPixelTransferf (GL_POST_COLOR_MATRIX_BLUE_BIAS, 0); - - return TRUE; -} diff --git a/gst/gl/gstgltestsrc.c b/gst/gl/gstgltestsrc.c deleted file mode 100644 index 83fa422..0000000 --- a/gst/gl/gstgltestsrc.c +++ /dev/null @@ -1,632 +0,0 @@ -/* GStreamer - * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> - * Copyright (C) 2002,2007 David A. Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -/** - * SECTION:element-gltestsrc - * - * <refsect2> - * <para> - * The gltestsrc element is used to produce test video data in a wide variaty - * of formats. The video test data produced can be controlled with the "pattern" - * property. - * </para> - * <title>Example launch line</title> - * <para> - * <programlisting> - * gst-launch -v gltestsrc pattern=snow ! ximagesink - * </programlisting> - * Shows random noise in an X window. - * </para> - * </refsect2> - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include "gstgltestsrc.h" -#include "gltestsrc.h" -#include "gstglbuffer.h" -#include "glextensions.h" -#include <gst/gst-i18n-plugin.h> - -#include <string.h> -#include <stdlib.h> - -#define USE_PEER_BUFFERALLOC - -GST_DEBUG_CATEGORY_STATIC (gl_test_src_debug); -#define GST_CAT_DEFAULT gl_test_src_debug - -static const GstElementDetails gl_test_src_details = -GST_ELEMENT_DETAILS ("Video test source", - "Source/Video", - "Creates a test video stream", - "David A. Schleef <ds@schleef.org>"); - - -enum -{ - PROP_0, - PROP_PATTERN, - PROP_TIMESTAMP_OFFSET, - PROP_IS_LIVE - /* FILL ME */ -}; - - -GST_BOILERPLATE (GstGLTestSrc, gst_gl_test_src, GstPushSrc, GST_TYPE_PUSH_SRC); - - -static void gst_gl_test_src_set_pattern (GstGLTestSrc * gltestsrc, - int pattern_type); -static void gst_gl_test_src_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_gl_test_src_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static gboolean gst_gl_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps); -static void gst_gl_test_src_src_fixate (GstPad * pad, GstCaps * caps); - -static gboolean gst_gl_test_src_is_seekable (GstBaseSrc * psrc); -static gboolean gst_gl_test_src_do_seek (GstBaseSrc * bsrc, - GstSegment * segment); -static gboolean gst_gl_test_src_query (GstBaseSrc * bsrc, GstQuery * query); - -static void gst_gl_test_src_get_times (GstBaseSrc * basesrc, - GstBuffer * buffer, GstClockTime * start, GstClockTime * end); -static GstFlowReturn gst_gl_test_src_create (GstPushSrc * psrc, - GstBuffer ** buffer); -static gboolean gst_gl_test_src_start (GstBaseSrc * basesrc); -static gboolean gst_gl_test_src_stop (GstBaseSrc * basesrc); - -#define GST_TYPE_GL_TEST_SRC_PATTERN (gst_gl_test_src_pattern_get_type ()) -static GType -gst_gl_test_src_pattern_get_type (void) -{ - static GType gl_test_src_pattern_type = 0; - static const GEnumValue pattern_types[] = { - {GST_GL_TEST_SRC_SMPTE, "SMPTE 100% color bars", "smpte"}, - {GST_GL_TEST_SRC_SNOW, "Random (television snow)", "snow"}, - {GST_GL_TEST_SRC_BLACK, "100% Black", "black"}, - {GST_GL_TEST_SRC_WHITE, "100% White", "white"}, - {GST_GL_TEST_SRC_RED, "Red", "red"}, - {GST_GL_TEST_SRC_GREEN, "Green", "green"}, - {GST_GL_TEST_SRC_BLUE, "Blue", "blue"}, - {GST_GL_TEST_SRC_CHECKERS1, "Checkers 1px", "checkers-1"}, - {GST_GL_TEST_SRC_CHECKERS2, "Checkers 2px", "checkers-2"}, - {GST_GL_TEST_SRC_CHECKERS4, "Checkers 4px", "checkers-4"}, - {GST_GL_TEST_SRC_CHECKERS8, "Checkers 8px", "checkers-8"}, - {GST_GL_TEST_SRC_CIRCULAR, "Circular", "circular"}, - {GST_GL_TEST_SRC_BLINK, "Blink", "blink"}, - {0, NULL, NULL} - }; - - if (!gl_test_src_pattern_type) { - gl_test_src_pattern_type = - g_enum_register_static ("GstGLTestSrcPattern", pattern_types); - } - return gl_test_src_pattern_type; -} - -static void -gst_gl_test_src_base_init (gpointer g_class) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); - - gst_element_class_set_details (element_class, &gl_test_src_details); - - gst_element_class_add_pad_template (element_class, - gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - gst_caps_from_string (GST_GL_VIDEO_CAPS))); -} - -static void -gst_gl_test_src_class_init (GstGLTestSrcClass * klass) -{ - GObjectClass *gobject_class; - GstBaseSrcClass *gstbasesrc_class; - GstPushSrcClass *gstpushsrc_class; - - GST_DEBUG_CATEGORY_INIT (gl_test_src_debug, "gltestsrc", 0, - "Video Test Source"); - - gobject_class = (GObjectClass *) klass; - gstbasesrc_class = (GstBaseSrcClass *) klass; - gstpushsrc_class = (GstPushSrcClass *) klass; - - gobject_class->set_property = gst_gl_test_src_set_property; - gobject_class->get_property = gst_gl_test_src_get_property; - - g_object_class_install_property (gobject_class, PROP_PATTERN, - g_param_spec_enum ("pattern", "Pattern", - "Type of test pattern to generate", GST_TYPE_GL_TEST_SRC_PATTERN, - GST_GL_TEST_SRC_SMPTE, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_class, - PROP_TIMESTAMP_OFFSET, g_param_spec_int64 ("timestamp-offset", - "Timestamp offset", - "An offset added to timestamps set on buffers (in ns)", G_MININT64, - G_MAXINT64, 0, G_PARAM_READWRITE)); - g_object_class_install_property (gobject_class, PROP_IS_LIVE, - g_param_spec_boolean ("is-live", "Is Live", - "Whether to act as a live source", FALSE, G_PARAM_READWRITE)); - - gstbasesrc_class->set_caps = gst_gl_test_src_setcaps; - gstbasesrc_class->is_seekable = gst_gl_test_src_is_seekable; - gstbasesrc_class->do_seek = gst_gl_test_src_do_seek; - gstbasesrc_class->query = gst_gl_test_src_query; - gstbasesrc_class->get_times = gst_gl_test_src_get_times; - gstbasesrc_class->start = gst_gl_test_src_start; - gstbasesrc_class->stop = gst_gl_test_src_stop; - - gstpushsrc_class->create = gst_gl_test_src_create; -} - -static void -gst_gl_test_src_init (GstGLTestSrc * src, GstGLTestSrcClass * g_class) -{ - GstPad *pad = GST_BASE_SRC_PAD (src); - - gst_pad_set_fixatecaps_function (pad, gst_gl_test_src_src_fixate); - - gst_gl_test_src_set_pattern (src, GST_GL_TEST_SRC_SMPTE); - - src->timestamp_offset = 0; - - /* we operate in time */ - gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME); - gst_base_src_set_live (GST_BASE_SRC (src), FALSE); -} - -static void -gst_gl_test_src_src_fixate (GstPad * pad, GstCaps * caps) -{ - GstStructure *structure; - - GST_DEBUG ("fixate"); - - structure = gst_caps_get_structure (caps, 0); - - gst_structure_fixate_field_nearest_int (structure, "width", 320); - gst_structure_fixate_field_nearest_int (structure, "height", 240); - gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1); -} - -static void -gst_gl_test_src_set_pattern (GstGLTestSrc * gltestsrc, int pattern_type) -{ - gltestsrc->pattern_type = pattern_type; - - GST_DEBUG_OBJECT (gltestsrc, "setting pattern to %d", pattern_type); - - switch (pattern_type) { - case GST_GL_TEST_SRC_SMPTE: - gltestsrc->make_image = gst_gl_test_src_smpte; - break; - case GST_GL_TEST_SRC_SNOW: - gltestsrc->make_image = gst_gl_test_src_snow; - break; - case GST_GL_TEST_SRC_BLACK: - gltestsrc->make_image = gst_gl_test_src_black; - break; - case GST_GL_TEST_SRC_WHITE: - gltestsrc->make_image = gst_gl_test_src_white; - break; - case GST_GL_TEST_SRC_RED: - gltestsrc->make_image = gst_gl_test_src_red; - break; - case GST_GL_TEST_SRC_GREEN: - gltestsrc->make_image = gst_gl_test_src_green; - break; - case GST_GL_TEST_SRC_BLUE: - gltestsrc->make_image = gst_gl_test_src_blue; - break; - case GST_GL_TEST_SRC_CHECKERS1: - gltestsrc->make_image = gst_gl_test_src_checkers1; - break; - case GST_GL_TEST_SRC_CHECKERS2: - gltestsrc->make_image = gst_gl_test_src_checkers2; - break; - case GST_GL_TEST_SRC_CHECKERS4: - gltestsrc->make_image = gst_gl_test_src_checkers4; - break; - case GST_GL_TEST_SRC_CHECKERS8: - gltestsrc->make_image = gst_gl_test_src_checkers8; - break; - case GST_GL_TEST_SRC_CIRCULAR: - gltestsrc->make_image = gst_gl_test_src_circular; - break; - case GST_GL_TEST_SRC_BLINK: - gltestsrc->make_image = gst_gl_test_src_black; - break; - default: - g_assert_not_reached (); - } -} - -static void -gst_gl_test_src_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - GstGLTestSrc *src = GST_GL_TEST_SRC (object); - - switch (prop_id) { - case PROP_PATTERN: - gst_gl_test_src_set_pattern (src, g_value_get_enum (value)); - break; - case PROP_TIMESTAMP_OFFSET: - src->timestamp_offset = g_value_get_int64 (value); - break; - case PROP_IS_LIVE: - gst_base_src_set_live (GST_BASE_SRC (src), g_value_get_boolean (value)); - break; - default: - break; - } -} - -static void -gst_gl_test_src_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - GstGLTestSrc *src = GST_GL_TEST_SRC (object); - - switch (prop_id) { - case PROP_PATTERN: - g_value_set_enum (value, src->pattern_type); - break; - case PROP_TIMESTAMP_OFFSET: - g_value_set_int64 (value, src->timestamp_offset); - break; - case PROP_IS_LIVE: - g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src))); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static gboolean -gst_gl_test_src_parse_caps (const GstCaps * caps, - gint * width, gint * height, gint * rate_numerator, gint * rate_denominator) -{ - const GstStructure *structure; - GstPadLinkReturn ret; - const GValue *framerate; - - GST_DEBUG ("parsing caps"); - - if (gst_caps_get_size (caps) < 1) - return FALSE; - - structure = gst_caps_get_structure (caps, 0); - - ret = gst_structure_get_int (structure, "width", width); - ret &= gst_structure_get_int (structure, "height", height); - framerate = gst_structure_get_value (structure, "framerate"); - - if (framerate) { - *rate_numerator = gst_value_get_fraction_numerator (framerate); - *rate_denominator = gst_value_get_fraction_denominator (framerate); - } else - goto no_framerate; - - return ret; - - /* ERRORS */ -no_framerate: - { - GST_DEBUG ("gltestsrc no framerate given"); - return FALSE; - } -} - -static gboolean -gst_gl_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps) -{ - gboolean res; - gint width, height, rate_denominator, rate_numerator; - GstGLTestSrc *gltestsrc; - - gltestsrc = GST_GL_TEST_SRC (bsrc); - - GST_DEBUG ("setcaps"); - - res = gst_gl_test_src_parse_caps (caps, &width, &height, - &rate_numerator, &rate_denominator); - if (res) { - /* looks ok here */ - gltestsrc->width = width; - gltestsrc->height = height; - gltestsrc->rate_numerator = rate_numerator; - gltestsrc->rate_denominator = rate_denominator; - gltestsrc->negotiated = TRUE; - - GST_DEBUG_OBJECT (gltestsrc, "size %dx%d, %d/%d fps", - gltestsrc->width, gltestsrc->height, - gltestsrc->rate_numerator, gltestsrc->rate_denominator); - } - return res; -} - -static gboolean -gst_gl_test_src_query (GstBaseSrc * bsrc, GstQuery * query) -{ - gboolean res; - GstGLTestSrc *src; - - src = GST_GL_TEST_SRC (bsrc); - - switch (GST_QUERY_TYPE (query)) { - case GST_QUERY_CONVERT: - { - GstFormat src_fmt, dest_fmt; - gint64 src_val, dest_val; - - gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val); - if (src_fmt == dest_fmt) { - dest_val = src_val; - goto done; - } - - switch (src_fmt) { - case GST_FORMAT_DEFAULT: - switch (dest_fmt) { - case GST_FORMAT_TIME: - /* frames to time */ - if (src->rate_numerator) { - dest_val = gst_util_uint64_scale (src_val, - src->rate_denominator * GST_SECOND, src->rate_numerator); - } else { - dest_val = 0; - } - break; - default: - goto error; - } - break; - case GST_FORMAT_TIME: - switch (dest_fmt) { - case GST_FORMAT_DEFAULT: - /* time to frames */ - if (src->rate_numerator) { - dest_val = gst_util_uint64_scale (src_val, - src->rate_numerator, src->rate_denominator * GST_SECOND); - } else { - dest_val = 0; - } - break; - default: - goto error; - } - break; - default: - goto error; - } - done: - gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val); - res = TRUE; - break; - } - default: - res = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query); - } - return res; - - /* ERROR */ -error: - { - GST_DEBUG_OBJECT (src, "query failed"); - return FALSE; - } -} - -static void -gst_gl_test_src_get_times (GstBaseSrc * basesrc, GstBuffer * buffer, - GstClockTime * start, GstClockTime * end) -{ - /* for live sources, sync on the timestamp of the buffer */ - if (gst_base_src_is_live (basesrc)) { - GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer); - - if (GST_CLOCK_TIME_IS_VALID (timestamp)) { - /* get duration to calculate end time */ - GstClockTime duration = GST_BUFFER_DURATION (buffer); - - if (GST_CLOCK_TIME_IS_VALID (duration)) { - *end = timestamp + duration; - } - *start = timestamp; - } - } else { - *start = -1; - *end = -1; - } -} - -static gboolean -gst_gl_test_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment) -{ - GstClockTime time; - GstGLTestSrc *src; - - src = GST_GL_TEST_SRC (bsrc); - - segment->time = segment->start; - time = segment->last_stop; - - /* now move to the time indicated */ - if (src->rate_numerator) { - src->n_frames = gst_util_uint64_scale (time, - src->rate_numerator, src->rate_denominator * GST_SECOND); - } else { - src->n_frames = 0; - } - if (src->rate_numerator) { - src->running_time = gst_util_uint64_scale (src->n_frames, - src->rate_denominator * GST_SECOND, src->rate_numerator); - } else { - /* FIXME : Not sure what to set here */ - src->running_time = 0; - } - - g_assert (src->running_time <= time); - - return TRUE; -} - -static gboolean -gst_gl_test_src_is_seekable (GstBaseSrc * psrc) -{ - /* we're seekable... */ - return TRUE; -} - -static GstFlowReturn -gst_gl_test_src_create (GstPushSrc * psrc, GstBuffer ** buffer) -{ - GstGLTestSrc *src; - GstGLBuffer *outbuf; - - //GstFlowReturn res; - GstClockTime next_time; - GLuint fbo; - - src = GST_GL_TEST_SRC (psrc); - - if (G_UNLIKELY (!src->negotiated)) - goto not_negotiated; - - /* 0 framerate and we are at the second frame, eos */ - if (G_UNLIKELY (src->rate_numerator == 0 && src->n_frames == 1)) - goto eos; - - GST_LOG_OBJECT (src, "creating buffer %dx%d image for frame %d", - src->width, src->height, (gint) src->n_frames); - - outbuf = gst_gl_buffer_new (src->display, src->width, src->height); - gst_buffer_set_caps (GST_BUFFER (outbuf), - GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc))); - - gst_gl_display_lock (outbuf->display); - - glGenFramebuffersEXT (1, &fbo); - glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, fbo); - - glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, - GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_ARB, outbuf->texture, 0); - - glDrawBuffer (GL_COLOR_ATTACHMENT0_EXT); - glReadBuffer (GL_COLOR_ATTACHMENT0_EXT); - - g_assert (glCheckFramebufferStatusEXT (GL_FRAMEBUFFER_EXT) == - GL_FRAMEBUFFER_COMPLETE_EXT); - - glViewport (0, 0, outbuf->width, outbuf->height); - gst_gl_display_check_error (outbuf->display, __LINE__); - -#if 0 - glClearColor (0.3, 0.3, 0.3, 1.0); - glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -#endif - if (src->pattern_type == GST_GL_TEST_SRC_BLINK) { - if (src->n_frames & 0x1) { - gst_gl_test_src_white (src, outbuf, src->width, src->height); - } else { - gst_gl_test_src_black (src, outbuf, src->width, src->height); - } - } else { - src->make_image (src, outbuf, src->width, src->height); - } - - glFlush (); - gst_gl_display_check_error (outbuf->display, __LINE__); - - glDeleteFramebuffersEXT (1, &fbo); - gst_gl_display_check_error (outbuf->display, __LINE__); - - gst_gl_display_unlock (outbuf->display); - - GST_BUFFER_TIMESTAMP (GST_BUFFER (outbuf)) = - src->timestamp_offset + src->running_time; - GST_BUFFER_OFFSET (GST_BUFFER (outbuf)) = src->n_frames; - src->n_frames++; - GST_BUFFER_OFFSET_END (GST_BUFFER (outbuf)) = src->n_frames; - if (src->rate_numerator) { - next_time = gst_util_uint64_scale_int (src->n_frames * GST_SECOND, - src->rate_denominator, src->rate_numerator); - GST_BUFFER_DURATION (GST_BUFFER (outbuf)) = next_time - src->running_time; - } else { - next_time = src->timestamp_offset; - /* NONE means forever */ - GST_BUFFER_DURATION (GST_BUFFER (outbuf)) = GST_CLOCK_TIME_NONE; - } - - src->running_time = next_time; - - *buffer = GST_BUFFER (outbuf); - - return GST_FLOW_OK; - -not_negotiated: - { - GST_ELEMENT_ERROR (src, CORE, NEGOTIATION, (NULL), - (_("format wasn't negotiated before get function"))); - return GST_FLOW_NOT_NEGOTIATED; - } -eos: - { - GST_DEBUG_OBJECT (src, "eos: 0 framerate, frame %d", (gint) src->n_frames); - return GST_FLOW_UNEXPECTED; - } -#if 0 -no_buffer: - { - GST_DEBUG_OBJECT (src, "could not allocate buffer, reason %s", - gst_flow_get_name (res)); - return res; - } -#endif -} - -static gboolean -gst_gl_test_src_start (GstBaseSrc * basesrc) -{ - GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc); - gboolean ret; - - src->running_time = 0; - src->n_frames = 0; - src->negotiated = FALSE; - src->display = gst_gl_display_new (); - ret = gst_gl_display_connect (src->display, NULL); - - return ret; -} - -static gboolean -gst_gl_test_src_stop (GstBaseSrc * basesrc) -{ - GstGLTestSrc *src = GST_GL_TEST_SRC (basesrc); - - g_object_unref (src->display); - - return TRUE; -} diff --git a/gst/gl/gstgltestsrc.h b/gst/gl/gstgltestsrc.h deleted file mode 100644 index 5d1f51b..0000000 --- a/gst/gl/gstgltestsrc.h +++ /dev/null @@ -1,116 +0,0 @@ -/* GStreamer - * Copyright (C) 2002,2007 David A. Schleef <ds@schleef.org> - * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_GL_TEST_SRC_H__ -#define __GST_GL_TEST_SRC_H__ - -#include <gst/gst.h> -#include <gst/base/gstpushsrc.h> -#include "gstglbuffer.h" - -G_BEGIN_DECLS - -#define GST_TYPE_GL_TEST_SRC \ - (gst_gl_test_src_get_type()) -#define GST_GL_TEST_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_TEST_SRC,GstGLTestSrc)) -#define GST_GL_TEST_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GL_TEST_SRC,GstGLTestSrcClass)) -#define GST_IS_GL_TEST_SRC(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_TEST_SRC)) -#define GST_IS_GL_TEST_SRC_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GL_TEST_SRC)) - -/** - * GstGLTestSrcPattern: - * @GST_GL_TEST_SRC_SMPTE: A standard SMPTE test pattern - * @GST_GL_TEST_SRC_SNOW: Random noise - * @GST_GL_TEST_SRC_BLACK: A black image - * @GST_GL_TEST_SRC_WHITE: A white image - * @GST_GL_TEST_SRC_RED: A red image - * @GST_GL_TEST_SRC_GREEN: A green image - * @GST_GL_TEST_SRC_BLUE: A blue image - * @GST_GL_TEST_SRC_CHECKERS1: Checkers pattern (1px) - * @GST_GL_TEST_SRC_CHECKERS2: Checkers pattern (2px) - * @GST_GL_TEST_SRC_CHECKERS4: Checkers pattern (4px) - * @GST_GL_TEST_SRC_CHECKERS8: Checkers pattern (8px) - * @GST_GL_TEST_SRC_CIRCULAR: Circular pattern - * @GST_GL_TEST_SRC_BLINK: Alternate between black and white - * - * The test pattern to produce. - */ -typedef enum { - GST_GL_TEST_SRC_SMPTE, - GST_GL_TEST_SRC_SNOW, - GST_GL_TEST_SRC_BLACK, - GST_GL_TEST_SRC_WHITE, - GST_GL_TEST_SRC_RED, - GST_GL_TEST_SRC_GREEN, - GST_GL_TEST_SRC_BLUE, - GST_GL_TEST_SRC_CHECKERS1, - GST_GL_TEST_SRC_CHECKERS2, - GST_GL_TEST_SRC_CHECKERS4, - GST_GL_TEST_SRC_CHECKERS8, - GST_GL_TEST_SRC_CIRCULAR, - GST_GL_TEST_SRC_BLINK -} GstGLTestSrcPattern; - -typedef struct _GstGLTestSrc GstGLTestSrc; -typedef struct _GstGLTestSrcClass GstGLTestSrcClass; - -/** - * GstGLTestSrc: - * - * Opaque data structure. - */ -struct _GstGLTestSrc { - GstPushSrc element; - - /*< private >*/ - - /* type of output */ - GstGLTestSrcPattern pattern_type; - - /* video state */ - char *format_name; - gint width; - gint height; - gint rate_numerator; - gint rate_denominator; - - /* private */ - GstGLDisplay *display; - gint64 timestamp_offset; /* base offset */ - GstClockTime running_time; /* total running time */ - gint64 n_frames; /* total frames sent */ - gboolean negotiated; - - void (*make_image) (GstGLTestSrc *v, GstGLBuffer *buffer, int w, int h); -}; - -struct _GstGLTestSrcClass { - GstPushSrcClass parent_class; -}; - -GType gst_gl_test_src_get_type (void); - -G_END_DECLS - -#endif /* __GST_GL_TEST_SRC_H__ */ diff --git a/gst/gl/gstglupload.c b/gst/gl/gstglupload.c deleted file mode 100644 index ff2b220..0000000 --- a/gst/gl/gstglupload.c +++ /dev/null @@ -1,437 +0,0 @@ -/* - * GStreamer - * Copyright (C) 2007 David Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <gst/gst.h> -#include <gst/base/gstbasetransform.h> -#include <gst/video/video.h> -#include <gstglbuffer.h> - -#define GST_CAT_DEFAULT gst_gl_upload_debug -GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); - -#define GST_TYPE_GL_UPLOAD (gst_gl_upload_get_type()) -#define GST_GL_UPLOAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GL_UPLOAD,GstGLUpload)) -#define GST_IS_GL_UPLOAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GL_UPLOAD)) -#define GST_GL_UPLOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_GL_UPLOAD,GstGLUploadClass)) -#define GST_IS_GL_UPLOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_GL_UPLOAD)) -#define GST_GL_UPLOAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_GL_UPLOAD,GstGLUploadClass)) -typedef struct _GstGLUpload GstGLUpload; -typedef struct _GstGLUploadClass GstGLUploadClass; - -typedef void (*GstGLUploadProcessFunc) (GstGLUpload *, guint8 *, guint); - -struct _GstGLUpload -{ - GstBaseTransform base_transform; - - GstPad *srcpad; - GstPad *sinkpad; - - /* < private > */ - - GstGLDisplay *display; - GstVideoFormat video_format; - GstGLBufferFormat format; - int width; - int height; - - gboolean peek; -}; - -struct _GstGLUploadClass -{ - GstBaseTransformClass base_transform_class; -}; - -static const GstElementDetails element_details = GST_ELEMENT_DETAILS ("FIXME", - "Filter/Effect", - "FIXME example filter", - "FIXME <fixme@fixme.com>"); - -static GstStaticPadTemplate gst_gl_upload_src_pad_template = -GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_GL_VIDEO_CAPS) - ); - -static GstStaticPadTemplate gst_gl_upload_sink_pad_template = - GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBx ";" - GST_VIDEO_CAPS_BGRx ";" - GST_VIDEO_CAPS_xRGB ";" - GST_VIDEO_CAPS_xBGR ";" - GST_VIDEO_CAPS_YUV ("{ YUY2, UYVY, AYUV, YV12, I420 }")) - ); - -enum -{ - PROP_0 -}; - -#define DEBUG_INIT(bla) \ - GST_DEBUG_CATEGORY_INIT (gst_gl_upload_debug, "glupload", 0, "glupload element"); - -GST_BOILERPLATE_FULL (GstGLUpload, gst_gl_upload, GstBaseTransform, - GST_TYPE_BASE_TRANSFORM, DEBUG_INIT); - -static void gst_gl_upload_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_gl_upload_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static void gst_gl_upload_reset (GstGLUpload * upload); - -static void gst_gl_upload_reset (GstGLUpload * upload); -static gboolean gst_gl_upload_set_caps (GstBaseTransform * bt, - GstCaps * incaps, GstCaps * outcaps); -static GstCaps *gst_gl_upload_transform_caps (GstBaseTransform * bt, - GstPadDirection direction, GstCaps * caps); -static gboolean gst_gl_upload_start (GstBaseTransform * bt); -static gboolean gst_gl_upload_stop (GstBaseTransform * bt); -static GstFlowReturn gst_gl_upload_prepare_output_buffer (GstBaseTransform * - trans, GstBuffer * input, gint size, GstCaps * caps, GstBuffer ** buf); -static GstFlowReturn gst_gl_upload_transform (GstBaseTransform * trans, - GstBuffer * inbuf, GstBuffer * outbuf); -static gboolean gst_gl_upload_get_unit_size (GstBaseTransform * trans, - GstCaps * caps, guint * size); - - -static void -gst_gl_upload_base_init (gpointer klass) -{ - GstElementClass *element_class = GST_ELEMENT_CLASS (klass); - - gst_element_class_set_details (element_class, &element_details); - - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_gl_upload_src_pad_template)); - gst_element_class_add_pad_template (element_class, - gst_static_pad_template_get (&gst_gl_upload_sink_pad_template)); -} - -static void -gst_gl_upload_class_init (GstGLUploadClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = (GObjectClass *) klass; - gobject_class->set_property = gst_gl_upload_set_property; - gobject_class->get_property = gst_gl_upload_get_property; - - GST_BASE_TRANSFORM_CLASS (klass)->transform_caps = - gst_gl_upload_transform_caps; - GST_BASE_TRANSFORM_CLASS (klass)->transform = gst_gl_upload_transform; - GST_BASE_TRANSFORM_CLASS (klass)->start = gst_gl_upload_start; - GST_BASE_TRANSFORM_CLASS (klass)->stop = gst_gl_upload_stop; - GST_BASE_TRANSFORM_CLASS (klass)->set_caps = gst_gl_upload_set_caps; - GST_BASE_TRANSFORM_CLASS (klass)->get_unit_size = gst_gl_upload_get_unit_size; - GST_BASE_TRANSFORM_CLASS (klass)->prepare_output_buffer = - gst_gl_upload_prepare_output_buffer; -} - -static void -gst_gl_upload_init (GstGLUpload * upload, GstGLUploadClass * klass) -{ - - gst_gl_upload_reset (upload); -} - -static void -gst_gl_upload_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - //GstGLUpload *upload = GST_GL_UPLOAD (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_upload_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - //GstGLUpload *upload = GST_GL_UPLOAD (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gst_gl_upload_reset (GstGLUpload * upload) -{ - if (upload->display) { - g_object_unref (upload->display); - upload->display = NULL; - } - upload->format = GST_GL_BUFFER_FORMAT_RGB; - upload->peek = FALSE; -} - -static gboolean -gst_gl_upload_start (GstBaseTransform * bt) -{ - GstGLUpload *upload = GST_GL_UPLOAD (bt); - gboolean ret; - - upload->format = GST_GL_BUFFER_FORMAT_RGB; - upload->display = gst_gl_display_new (); - ret = gst_gl_display_connect (upload->display, NULL); - //upload->format = GST_VIDEO_FORMAT_RGBx; - - return TRUE; -} - -static gboolean -gst_gl_upload_stop (GstBaseTransform * bt) -{ - GstGLUpload *upload = GST_GL_UPLOAD (bt); - - gst_gl_upload_reset (upload); - - return TRUE; -} - -#if 0 -static gboolean -gst_gl_upload_sink_setcaps (GstPad * pad, GstCaps * caps) -{ - GstGLUpload *upload; - GstVideoFormat video_format; - int height; - int width; - gboolean ret; - GstCaps *srccaps; - int fps_n, fps_d; - int par_n, par_d; - - upload = GST_GL_UPLOAD (gst_pad_get_parent (pad)); - - ret = gst_video_format_parse_caps (caps, &video_format, &width, &height); - ret &= gst_video_parse_caps_framerate (caps, &fps_n, &fps_d); - - if (!ret) - return FALSE; - - upload->video_format = video_format; - upload->width = width; - upload->height = height; - - GST_DEBUG ("setcaps %d %d %d", video_format, width, height); - - par_n = 1; - par_d = 1; - gst_video_parse_caps_pixel_aspect_ratio (caps, &par_n, &par_d); - - srccaps = gst_caps_new_simple ("video/x-raw-gl", - "format", G_TYPE_INT, 0, - "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, - "framerate", GST_TYPE_FRACTION, fps_n, fps_d, - "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, NULL); - - ret = gst_pad_set_caps (upload->srcpad, srccaps); - gst_caps_unref (srccaps); - - return ret; -} -#endif - -#if 0 -static GstFlowReturn -gst_gl_upload_chain (GstPad * pad, GstBuffer * buf) -{ - GstGLUpload *upload; - GstGLBuffer *outbuf; - - upload = GST_GL_UPLOAD (gst_pad_get_parent (pad)); - - outbuf = gst_gl_buffer_new_from_data (upload->display, - upload->video_format, upload->width, upload->height, - GST_BUFFER_DATA (buf)); - - gst_buffer_copy_metadata (GST_BUFFER (outbuf), buf, - GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS); - gst_buffer_set_caps (GST_BUFFER (outbuf), GST_PAD_CAPS (upload->srcpad)); - - GST_DEBUG ("uploading %p size %d", GST_BUFFER_DATA (buf), - GST_BUFFER_SIZE (buf)); - gst_buffer_unref (buf); - - if (upload->peek) { - gst_gl_display_draw_texture (outbuf->display, outbuf->texture, - outbuf->width, outbuf->height); - } - - gst_pad_push (upload->srcpad, GST_BUFFER (outbuf)); - - gst_object_unref (upload); - return GST_FLOW_OK; -} -#endif - -static GstCaps * -gst_gl_upload_transform_caps (GstBaseTransform * bt, - GstPadDirection direction, GstCaps * caps) -{ - GstGLUpload *upload; - GstStructure *structure; - GstCaps *newcaps; - GstStructure *newstruct; - const GValue *width_value; - const GValue *height_value; - const GValue *framerate_value; - const GValue *par_value; - - upload = GST_GL_UPLOAD (bt); - - GST_ERROR ("transform caps %" GST_PTR_FORMAT, caps); - - structure = gst_caps_get_structure (caps, 0); - - width_value = gst_structure_get_value (structure, "width"); - height_value = gst_structure_get_value (structure, "height"); - framerate_value = gst_structure_get_value (structure, "framerate"); - par_value = gst_structure_get_value (structure, "pixel-aspect-ratio"); - - if (direction == GST_PAD_SRC) { - newcaps = gst_caps_new_simple ("video/x-raw-rgb", NULL); - } else { - newcaps = gst_caps_new_simple ("video/x-raw-gl", - "format", G_TYPE_INT, GST_GL_BUFFER_FORMAT_RGBA, - "is_yuv", G_TYPE_BOOLEAN, FALSE, NULL); - } - newstruct = gst_caps_get_structure (newcaps, 0); - gst_structure_set_value (newstruct, "width", width_value); - gst_structure_set_value (newstruct, "height", height_value); - gst_structure_set_value (newstruct, "framerate", framerate_value); - if (par_value) { - gst_structure_set_value (newstruct, "pixel-aspect-ratio", par_value); - } else { - gst_structure_set (newstruct, "pixel-aspect-ratio", GST_TYPE_FRACTION, - 1, 1, NULL); - } - - GST_ERROR ("new caps %" GST_PTR_FORMAT, newcaps); - - return newcaps; -} - -static gboolean -gst_gl_upload_set_caps (GstBaseTransform * bt, GstCaps * incaps, - GstCaps * outcaps) -{ - GstGLUpload *upload; - gboolean ret; - - upload = GST_GL_UPLOAD (bt); - - GST_DEBUG ("called with %" GST_PTR_FORMAT, incaps); - - ret = gst_video_format_parse_caps (incaps, &upload->video_format, - &upload->width, &upload->height); - - if (!ret) { - GST_DEBUG ("bad caps"); - return FALSE; - } - - return ret; -} - -static gboolean -gst_gl_upload_get_unit_size (GstBaseTransform * trans, GstCaps * caps, - guint * size) -{ - gboolean ret; - GstStructure *structure; - int width; - int height; - - structure = gst_caps_get_structure (caps, 0); - if (gst_structure_has_name (structure, "video/x-raw-gl")) { - GstGLBufferFormat format; - - ret = gst_gl_buffer_format_parse_caps (caps, &format, &width, &height); - if (ret) { - *size = gst_gl_buffer_format_get_size (format, width, height); - } - } else { - GstVideoFormat format; - - ret = gst_video_format_parse_caps (caps, &format, &width, &height); - if (ret) { - *size = gst_video_format_get_size (format, width, height); - } - } - - return TRUE; -} - -static GstFlowReturn -gst_gl_upload_prepare_output_buffer (GstBaseTransform * trans, - GstBuffer * input, gint size, GstCaps * caps, GstBuffer ** buf) -{ - GstGLUpload *upload; - GstGLBuffer *gl_outbuf; - - upload = GST_GL_UPLOAD (trans); - - gl_outbuf = gst_gl_buffer_new_from_video_format (upload->display, - upload->video_format, upload->width, upload->height); - - *buf = GST_BUFFER (gl_outbuf); - gst_buffer_set_caps (*buf, caps); - - return GST_FLOW_OK; -} - -static GstFlowReturn -gst_gl_upload_transform (GstBaseTransform * trans, GstBuffer * inbuf, - GstBuffer * outbuf) -{ - GstGLUpload *upload; - GstGLBuffer *gl_outbuf = GST_GL_BUFFER (outbuf); - - upload = GST_GL_UPLOAD (trans); - - GST_DEBUG ("uploading %p size %d", - GST_BUFFER_DATA (inbuf), GST_BUFFER_SIZE (inbuf)); - gst_gl_buffer_upload (gl_outbuf, upload->video_format, - GST_BUFFER_DATA (inbuf)); - - if (upload->peek) { - gst_gl_display_draw_texture (gl_outbuf->display, gl_outbuf->texture, - gl_outbuf->width, gl_outbuf->height, FALSE); - } - - return GST_FLOW_OK; -} diff --git a/gst/gl/gstopengl.c b/gst/gl/gstopengl.c deleted file mode 100644 index 97d0e7c..0000000 --- a/gst/gl/gstopengl.c +++ /dev/null @@ -1,77 +0,0 @@ -/* GStreamer - * Copyright (C) 2003 Julien Moutte <julien@moutte.net> - * Copyright (C) 2005,2006,2007 David A. Schleef <ds@schleef.org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - - -#include <gst/gst.h> -#include <gst/interfaces/xoverlay.h> -#include <gst/video/gstvideosink.h> -#include <gst/video/video.h> - -#include <string.h> - -#include <glimagesink.h> - -GType gst_gl_upload_get_type (void); -GType gst_gl_download_get_type (void); -GType gst_gl_filter_example_get_type (void); -GType gst_gl_convert_get_type (void); -GType gst_gl_test_src_get_type (void); - - -static gboolean -plugin_init (GstPlugin * plugin) -{ - if (!gst_element_register (plugin, "glimagesink", - GST_RANK_SECONDARY, GST_TYPE_GLIMAGE_SINK)) { - return FALSE; - } - if (!gst_element_register (plugin, "glupload", - GST_RANK_NONE, gst_gl_upload_get_type ())) { - return FALSE; - } - if (!gst_element_register (plugin, "gldownload", - GST_RANK_NONE, gst_gl_download_get_type ())) { - return FALSE; - } - if (!gst_element_register (plugin, "glfilterexample", - GST_RANK_NONE, gst_gl_filter_example_get_type ())) { - return FALSE; - } - if (!gst_element_register (plugin, "glconvert", - GST_RANK_NONE, gst_gl_convert_get_type ())) { - return FALSE; - } - if (!gst_element_register (plugin, "gltestsrc", - GST_RANK_NONE, gst_gl_test_src_get_type ())) { - return FALSE; - } - - return TRUE; -} - -GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, - GST_VERSION_MINOR, - "opengl", - "plugin for elements using OpenGL", - plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN) diff --git a/m4/.cvsignore b/m4/.cvsignore deleted file mode 100644 index ae2f6d8..0000000 --- a/m4/.cvsignore +++ /dev/null @@ -1,17 +0,0 @@ -codeset.m4 -gettext.m4 -glibc21.m4 -iconv.m4 -intdiv0.m4 -inttypes-pri.m4 -inttypes.m4 -inttypes_h.m4 -isc-posix.m4 -lcmessage.m4 -lib-ld.m4 -lib-link.m4 -lib-prefix.m4 -progtest.m4 -stdint_h.m4 -uintmax_t.m4 -ulonglong.m4 diff --git a/m4/Makefile.am b/m4/Makefile.am index 7442467..4e8db27 100644 --- a/m4/Makefile.am +++ b/m4/Makefile.am @@ -1,18 +1,18 @@ -EXTRA_DIST = \ - codeset.m4 \ - gettext.m4 \ - glibc21.m4 \ - iconv.m4 \ - intdiv0.m4 \ - inttypes-pri.m4 \ - inttypes.m4 \ - inttypes_h.m4 \ - isc-posix.m4 \ - lcmessage.m4 \ - lib-ld.m4 \ - lib-link.m4 \ - lib-prefix.m4 \ - progtest.m4 \ - stdint_h.m4 \ - uintmax_t.m4 \ - ulonglong.m4 +EXTRA_DIST = \
+ codeset.m4 \
+ gettext.m4 \
+ glibc21.m4 \
+ iconv.m4 \
+ intdiv0.m4 \
+ inttypes-pri.m4 \
+ inttypes.m4 \
+ inttypes_h.m4 \
+ isc-posix.m4 \
+ lcmessage.m4 \
+ lib-ld.m4 \
+ lib-link.m4 \
+ lib-prefix.m4 \
+ progtest.m4 \
+ stdint_h.m4 \
+ uintmax_t.m4 \
+ ulonglong.m4
diff --git a/pkgconfig/.cvsignore b/pkgconfig/.cvsignore deleted file mode 100644 index 6fd0ef0..0000000 --- a/pkgconfig/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.pc diff --git a/pkgconfig/Makefile.am b/pkgconfig/Makefile.am index 8dd51ac..20df9ec 100644 --- a/pkgconfig/Makefile.am +++ b/pkgconfig/Makefile.am @@ -1,23 +1,23 @@ - -pcverfiles = gstreamer-gl-@GST_MAJORMINOR@.pc - -pcverfiles_uninstalled = gstreamer-gl-@GST_MAJORMINOR@-uninstalled.pc - -all-local: $(pcverfiles) $(pcverfiles_uninstalled) - -### how to generate versioned .pc files from .pc files in this dir -%-@GST_MAJORMINOR@.pc: %.pc - cp $< $@ -%-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc - cp $< $@ - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = $(pcverfiles) - -CLEANFILES = $(pcverfiles) $(pcverfiles_uninstalled) -pcinfiles = \ - gstreamer-gl.pc.in gstreamer-gl-uninstalled.pc.in - -DISTCLEANFILES = $(pcinfiles:.in=) -EXTRA_DIST = $(pcinfiles) - +
+pcverfiles = gstreamer-gl-@GST_MAJORMINOR@.pc
+
+pcverfiles_uninstalled = gstreamer-gl-@GST_MAJORMINOR@-uninstalled.pc
+
+all-local: $(pcverfiles) $(pcverfiles_uninstalled)
+
+### how to generate versioned .pc files from .pc files in this dir
+%-@GST_MAJORMINOR@.pc: %.pc
+ cp $< $@
+%-@GST_MAJORMINOR@-uninstalled.pc: %-uninstalled.pc
+ cp $< $@
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = $(pcverfiles)
+
+CLEANFILES = $(pcverfiles) $(pcverfiles_uninstalled)
+pcinfiles = \
+ gstreamer-gl.pc.in gstreamer-gl-uninstalled.pc.in
+
+DISTCLEANFILES = $(pcinfiles:.in=)
+EXTRA_DIST = $(pcinfiles)
+
diff --git a/pkgconfig/gstreamer-gl-uninstalled.pc.in b/pkgconfig/gstreamer-gl-uninstalled.pc.in index 14c06a7..ff9b2a3 100644 --- a/pkgconfig/gstreamer-gl-uninstalled.pc.in +++ b/pkgconfig/gstreamer-gl-uninstalled.pc.in @@ -1,15 +1,15 @@ -prefix= -exec_prefix= -libdir=${pcfiledir}/../gst-libs/gst -includedir=${pcfiledir}/../gst-libs -pluginsdir=${pcfiledir}/.. - -Name: GStreamer OpenGL Plugins Libraries, Uninstalled -Description: Streaming media framework, OpenGL plugins libraries, uninstalled -Version: @VERSION@ -Requires: gstreamer-@GST_MAJORMINOR@ - -Libs: -L${libdir}/gl -Cflags: -I${includedir} - -libraries=gl +prefix=
+exec_prefix=
+libdir=${pcfiledir}/../gst-libs/gst
+includedir=${pcfiledir}/../gst-libs
+pluginsdir=${pcfiledir}/..
+
+Name: GStreamer OpenGL Plugins Libraries, Uninstalled
+Description: Streaming media framework, OpenGL plugins libraries, uninstalled
+Version: @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@
+
+Libs: -L${libdir}/gl
+Cflags: -I${includedir}
+
+libraries=gl
diff --git a/pkgconfig/gstreamer-gl.pc.in b/pkgconfig/gstreamer-gl.pc.in index 432b73e..8e219ff 100644 --- a/pkgconfig/gstreamer-gl.pc.in +++ b/pkgconfig/gstreamer-gl.pc.in @@ -1,13 +1,13 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@/gstreamer-@GST_MAJORMINOR@ -pluginsdir=@libdir@/gstreamer-@GST_MAJORMINOR@ - -Name: GStreamer OpenGL Plugins Libraries -Description: Streaming media framework, OpenGL plugins libraries -Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@ -Version: @VERSION@ -Libs: -L${libdir} -lgstgl-@GST_MAJORMINOR@ -Cflags: -I${includedir} - +prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/gstreamer-@GST_MAJORMINOR@
+pluginsdir=@libdir@/gstreamer-@GST_MAJORMINOR@
+
+Name: GStreamer OpenGL Plugins Libraries
+Description: Streaming media framework, OpenGL plugins libraries
+Requires: gstreamer-@GST_MAJORMINOR@ gstreamer-base-@GST_MAJORMINOR@
+Version: @VERSION@
+Libs: -L${libdir} -lgstgl-@GST_MAJORMINOR@
+Cflags: -I${includedir}
+
diff --git a/po/.cvsignore b/po/.cvsignore deleted file mode 100644 index fbf1f1c..0000000 --- a/po/.cvsignore +++ /dev/null @@ -1,16 +0,0 @@ -*.gmo -remove-potcdate.sed -remove-potcdate.sin -stamp-po -POTFILES -cat-id-tbl.c -*.pot -Makefile.in.in -Makevars.template -Rules-quot -boldquot.sed -en@boldquot.header -en@quot.header -insert-header.sin -quot.sed -.pot @@ -1 +1 @@ -en +en
diff --git a/po/Makevars b/po/Makevars index 6155923..70e62b9 100644 --- a/po/Makevars +++ b/po/Makevars @@ -1,41 +1,41 @@ -# Makefile variables for PO directory in any package using GNU gettext. - -# Usually the message domain is the same as the package name. -DOMAIN = $(GETTEXT_PACKAGE) - -# These two variables depend on the location of this directory. -subdir = po -top_builddir = .. - -# These options get passed to xgettext. -XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ - -# This is the copyright holder that gets inserted into the header of the -# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding -# package. (Note that the msgstr strings, extracted from the package's -# sources, belong to the copyright holder of the package.) Translators are -# expected to transfer the copyright for their translations to this person -# or entity, or to disclaim their copyright. The empty string stands for -# the public domain; in this case the translators are expected to disclaim -# their copyright. -COPYRIGHT_HOLDER = - -# This is the email address or URL to which the translators shall report -# bugs in the untranslated strings: -# - Strings which are not entire sentences, see the maintainer guidelines -# in the GNU gettext documentation, section 'Preparing Strings'. -# - Strings which use unclear terms or require additional context to be -# understood. -# - Strings which make invalid assumptions about notation of date, time or -# money. -# - Pluralisation problems. -# - Incorrect English spelling. -# - Incorrect formatting. -# It can be your email address, or a mailing list address where translators -# can write to without being subscribed, or the URL of a web page through -# which the translators can contact you. -MSGID_BUGS_ADDRESS = http://bugzilla.gnome.org/ - -# This is the list of locale categories, beyond LC_MESSAGES, for which the -# message catalogs shall be used. It is usually empty. -EXTRA_LOCALE_CATEGORIES = +# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(GETTEXT_PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
+# package. (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.) Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright. The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER =
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+# in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+# understood.
+# - Strings which make invalid assumptions about notation of date, time or
+# money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS = http://bugzilla.gnome.org/
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used. It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in index 472cbf7..23e0b3a 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -1 +1 @@ -gst/gl/gstgltestsrc.c +gst/gl/gstgltestsrc.c
@@ -1,17 +1,17 @@ -# English translation. -# -msgid "" -msgstr "" -"Project-Id-Version: gst-plugins-gl 0.10.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-01-17 15:29-0800\n" -"PO-Revision-Date: 2004-04-26 10:41-0400\n" -"Last-Translator: none <none@none.com>\n" -"Language-Team: English <en@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: gst/gl/gstgltestsrc.c:591 -msgid "format wasn't negotiated before get function" -msgstr "" +# English translation.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-gl 0.10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-17 15:29-0800\n"
+"PO-Revision-Date: 2004-04-26 10:41-0400\n"
+"Last-Translator: none <none@none.com>\n"
+"Language-Team: English <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gst/gl/gstgltestsrc.c:591
+msgid "format wasn't negotiated before get function"
+msgstr ""
diff --git a/tests/Makefile.am b/tests/Makefile.am index 913a53f..606ac5c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1 +1 @@ -SUBDIRS = check icles examples +SUBDIRS = check icles examples
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am index 1da9c81..f41c2ff 100644 --- a/tests/check/Makefile.am +++ b/tests/check/Makefile.am @@ -1,44 +1,44 @@ -include $(top_srcdir)/common/check.mak - -CHECK_REGISTRY = $(top_builddir)/tests/check/test-registry.reg -TEST_FILES_DIRECTORY = $(top_srcdir)/tests/files - -REGISTRY_ENVIRONMENT = \ - GST_REGISTRY=$(CHECK_REGISTRY) - -TESTS_ENVIRONMENT = \ - $(REGISTRY_ENVIRONMENT) \ - GST_PLUGIN_SYSTEM_PATH= \ - GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/ext:$(top_builddir)/sys:$(GSTPB_PLUGINS_DIR):$(GST_PLUGINS_DIR) \ - GST_TEST_FILES_PATH=$(TEST_FILES_DIRECTORY) \ - STATE_IGNORE_ELEMENTS="aasink autovideosink cacasink cairotextoverlay" - -# ths core dumps of some machines have PIDs appended -CLEANFILES = core.* test-registry.* - -clean-local: clean-local-check - -check_PROGRAMS = \ - generic/states \ - pipelines/simple-launch-lines - -VALGRIND_TO_FIX = - -TESTS = $(check_PROGRAMS) - -# these tests don't even pass -# autodetect: temporarily disabled because of broken videosinks in -bad -#noinst_PROGRAMS = \ -# elements/autodetect - -AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) $(GST_OPTION_CFLAGS) -LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS) - -# valgrind testing -# videocrop disabled since it takes way too long in valgrind -VALGRIND_TESTS_DISABLE = \ - elements/videocrop \ - $(VALGRIND_TO_FIX) - -SUPPRESSIONS = $(top_srcdir)/common/gst.supp - +include $(top_srcdir)/common/check.mak
+
+CHECK_REGISTRY = $(top_builddir)/tests/check/test-registry.reg
+TEST_FILES_DIRECTORY = $(top_srcdir)/tests/files
+
+REGISTRY_ENVIRONMENT = \
+ GST_REGISTRY=$(CHECK_REGISTRY)
+
+TESTS_ENVIRONMENT = \
+ $(REGISTRY_ENVIRONMENT) \
+ GST_PLUGIN_SYSTEM_PATH= \
+ GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/ext:$(top_builddir)/sys:$(GSTPB_PLUGINS_DIR):$(GST_PLUGINS_DIR) \
+ GST_TEST_FILES_PATH=$(TEST_FILES_DIRECTORY) \
+ STATE_IGNORE_ELEMENTS="aasink autovideosink cacasink cairotextoverlay"
+
+# ths core dumps of some machines have PIDs appended
+CLEANFILES = core.* test-registry.*
+
+clean-local: clean-local-check
+
+check_PROGRAMS = \
+ generic/states \
+ pipelines/simple-launch-lines
+
+VALGRIND_TO_FIX =
+
+TESTS = $(check_PROGRAMS)
+
+# these tests don't even pass
+# autodetect: temporarily disabled because of broken videosinks in -bad
+#noinst_PROGRAMS = \
+# elements/autodetect
+
+AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) $(GST_OPTION_CFLAGS)
+LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS)
+
+# valgrind testing
+# videocrop disabled since it takes way too long in valgrind
+VALGRIND_TESTS_DISABLE = \
+ elements/videocrop \
+ $(VALGRIND_TO_FIX)
+
+SUPPRESSIONS = $(top_srcdir)/common/gst.supp
+
diff --git a/tests/check/generic/states.c b/tests/check/generic/states.c index a4a226f..5ce75c2 100644 --- a/tests/check/generic/states.c +++ b/tests/check/generic/states.c @@ -1,222 +1,222 @@ -/* GStreamer - * - * unit test for state changes on all elements - * - * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <unistd.h> - -#include <gst/check/gstcheck.h> - -static GList *elements = NULL; - -static void -setup () -{ - GList *features, *f; - GList *plugins, *p; - gchar **ignorelist = NULL; - const gchar *STATE_IGNORE_ELEMENTS = NULL; - - GST_DEBUG ("getting elements for package %s", PACKAGE); - STATE_IGNORE_ELEMENTS = g_getenv ("STATE_IGNORE_ELEMENTS"); - if (STATE_IGNORE_ELEMENTS) { - GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS); - ignorelist = g_strsplit (STATE_IGNORE_ELEMENTS, " ", 0); - } - - plugins = gst_registry_get_plugin_list (gst_registry_get_default ()); - - for (p = plugins; p; p = p->next) { - GstPlugin *plugin = p->data; - - if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0) - continue; - - features = - gst_registry_get_feature_list_by_plugin (gst_registry_get_default (), - gst_plugin_get_name (plugin)); - - for (f = features; f; f = f->next) { - GstPluginFeature *feature = f->data; - const gchar *name = gst_plugin_feature_get_name (feature); - gboolean ignore = FALSE; - - if (!GST_IS_ELEMENT_FACTORY (feature)) - continue; - - if (ignorelist) { - gchar **s; - - for (s = ignorelist; s && *s; ++s) { - if (g_str_has_prefix (name, *s)) { - GST_DEBUG ("ignoring element %s", name); - ignore = TRUE; - } - } - if (ignore) - continue; - } - - GST_DEBUG ("adding element %s", name); - elements = g_list_prepend (elements, (gpointer) g_strdup (name)); - } - gst_plugin_feature_list_free (features); - } - gst_plugin_list_free (plugins); - g_strfreev (ignorelist); -} - -static void -teardown () -{ - GList *e; - - for (e = elements; e; e = e->next) { - g_free (e->data); - } - g_list_free (elements); - elements = NULL; -} - - -GST_START_TEST (test_state_changes_up_and_down_seq) -{ - GstElement *element; - GList *e; - - for (e = elements; e; e = e->next) { - const gchar *name = e->data; - - GST_INFO ("testing element %s", name); - element = gst_element_factory_make (name, name); - fail_if (element == NULL, "Could not make element from factory %s", name); - - if (GST_IS_PIPELINE (element)) { - GST_DEBUG ("element %s is a pipeline", name); - } - - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_PLAYING); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_NULL); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_PLAYING); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_NULL); - gst_object_unref (GST_OBJECT (element)); - } -} - -GST_END_TEST; - -GST_START_TEST (test_state_changes_up_seq) -{ - GstElement *element; - GList *e; - - for (e = elements; e; e = e->next) { - const gchar *name = e->data; - - GST_INFO ("testing element %s", name); - element = gst_element_factory_make (name, name); - fail_if (element == NULL, "Could not make element from factory %s", name); - - if (GST_IS_PIPELINE (element)) { - GST_DEBUG ("element %s is a pipeline", name); - } - - gst_element_set_state (element, GST_STATE_READY); - - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_PLAYING); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - - gst_element_set_state (element, GST_STATE_NULL); - gst_object_unref (GST_OBJECT (element)); - } -} - -GST_END_TEST; - -GST_START_TEST (test_state_changes_down_seq) -{ - GstElement *element; - GList *e; - - for (e = elements; e; e = e->next) { - const gchar *name = e->data; - - GST_INFO ("testing element %s", name); - element = gst_element_factory_make (name, name); - fail_if (element == NULL, "Could not make element from factory %s", name); - - if (GST_IS_PIPELINE (element)) { - GST_DEBUG ("element %s is a pipeline", name); - } - - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_PLAYING); - - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_PLAYING); - - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_PLAYING); - - gst_element_set_state (element, GST_STATE_PAUSED); - gst_element_set_state (element, GST_STATE_READY); - gst_element_set_state (element, GST_STATE_NULL); - gst_object_unref (GST_OBJECT (element)); - } -} - -GST_END_TEST; - - -Suite * -states_suite (void) -{ - Suite *s = suite_create ("states"); - TCase *tc_chain = tcase_create ("general"); - - suite_add_tcase (s, tc_chain); - tcase_add_checked_fixture (tc_chain, setup, teardown); - tcase_add_test (tc_chain, test_state_changes_up_and_down_seq); - tcase_add_test (tc_chain, test_state_changes_up_seq); - tcase_add_test (tc_chain, test_state_changes_down_seq); - - return s; -} - -GST_CHECK_MAIN (states); +/* GStreamer
+ *
+ * unit test for state changes on all elements
+ *
+ * Copyright (C) <2005> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+
+static GList *elements = NULL;
+
+static void
+setup ()
+{
+ GList *features, *f;
+ GList *plugins, *p;
+ gchar **ignorelist = NULL;
+ const gchar *STATE_IGNORE_ELEMENTS = NULL;
+
+ GST_DEBUG ("getting elements for package %s", PACKAGE);
+ STATE_IGNORE_ELEMENTS = g_getenv ("STATE_IGNORE_ELEMENTS");
+ if (STATE_IGNORE_ELEMENTS) {
+ GST_DEBUG ("Will ignore element factories: '%s'", STATE_IGNORE_ELEMENTS);
+ ignorelist = g_strsplit (STATE_IGNORE_ELEMENTS, " ", 0);
+ }
+
+ plugins = gst_registry_get_plugin_list (gst_registry_get_default ());
+
+ for (p = plugins; p; p = p->next) {
+ GstPlugin *plugin = p->data;
+
+ if (strcmp (gst_plugin_get_source (plugin), PACKAGE) != 0)
+ continue;
+
+ features =
+ gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
+ gst_plugin_get_name (plugin));
+
+ for (f = features; f; f = f->next) {
+ GstPluginFeature *feature = f->data;
+ const gchar *name = gst_plugin_feature_get_name (feature);
+ gboolean ignore = FALSE;
+
+ if (!GST_IS_ELEMENT_FACTORY (feature))
+ continue;
+
+ if (ignorelist) {
+ gchar **s;
+
+ for (s = ignorelist; s && *s; ++s) {
+ if (g_str_has_prefix (name, *s)) {
+ GST_DEBUG ("ignoring element %s", name);
+ ignore = TRUE;
+ }
+ }
+ if (ignore)
+ continue;
+ }
+
+ GST_DEBUG ("adding element %s", name);
+ elements = g_list_prepend (elements, (gpointer) g_strdup (name));
+ }
+ gst_plugin_feature_list_free (features);
+ }
+ gst_plugin_list_free (plugins);
+ g_strfreev (ignorelist);
+}
+
+static void
+teardown ()
+{
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ g_free (e->data);
+ }
+ g_list_free (elements);
+ elements = NULL;
+}
+
+
+GST_START_TEST (test_state_changes_up_and_down_seq)
+{
+ GstElement *element;
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ const gchar *name = e->data;
+
+ GST_INFO ("testing element %s", name);
+ element = gst_element_factory_make (name, name);
+ fail_if (element == NULL, "Could not make element from factory %s", name);
+
+ if (GST_IS_PIPELINE (element)) {
+ GST_DEBUG ("element %s is a pipeline", name);
+ }
+
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_object_unref (GST_OBJECT (element));
+ }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_up_seq)
+{
+ GstElement *element;
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ const gchar *name = e->data;
+
+ GST_INFO ("testing element %s", name);
+ element = gst_element_factory_make (name, name);
+ fail_if (element == NULL, "Could not make element from factory %s", name);
+
+ if (GST_IS_PIPELINE (element)) {
+ GST_DEBUG ("element %s is a pipeline", name);
+ }
+
+ gst_element_set_state (element, GST_STATE_READY);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_object_unref (GST_OBJECT (element));
+ }
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_state_changes_down_seq)
+{
+ GstElement *element;
+ GList *e;
+
+ for (e = elements; e; e = e->next) {
+ const gchar *name = e->data;
+
+ GST_INFO ("testing element %s", name);
+ element = gst_element_factory_make (name, name);
+ fail_if (element == NULL, "Could not make element from factory %s", name);
+
+ if (GST_IS_PIPELINE (element)) {
+ GST_DEBUG ("element %s is a pipeline", name);
+ }
+
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_PLAYING);
+
+ gst_element_set_state (element, GST_STATE_PAUSED);
+ gst_element_set_state (element, GST_STATE_READY);
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_object_unref (GST_OBJECT (element));
+ }
+}
+
+GST_END_TEST;
+
+
+Suite *
+states_suite (void)
+{
+ Suite *s = suite_create ("states");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_checked_fixture (tc_chain, setup, teardown);
+ tcase_add_test (tc_chain, test_state_changes_up_and_down_seq);
+ tcase_add_test (tc_chain, test_state_changes_up_seq);
+ tcase_add_test (tc_chain, test_state_changes_down_seq);
+
+ return s;
+}
+
+GST_CHECK_MAIN (states);
diff --git a/tests/check/pipelines/simple-launch-lines.c b/tests/check/pipelines/simple-launch-lines.c index 88d271a..5ef9adf 100644 --- a/tests/check/pipelines/simple-launch-lines.c +++ b/tests/check/pipelines/simple-launch-lines.c @@ -1,149 +1,149 @@ -/* GStreamer - * Copyright (C) 2005 Andy Wingo <wingo@pobox.com> - * - * simple_launch_lines.c: Unit test for simple pipelines - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library 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 - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#include <gst/check/gstcheck.h> - -#ifndef GST_DISABLE_PARSE - -static GstElement * -setup_pipeline (const gchar * pipe_descr) -{ - GstElement *pipeline; - - pipeline = gst_parse_launch (pipe_descr, NULL); - g_return_val_if_fail (GST_IS_PIPELINE (pipeline), NULL); - return pipeline; -} - -/* - * run_pipeline: - * @pipe: the pipeline to run - * @desc: the description for use in messages - * @events: is a mask of expected events - * @tevent: is the expected terminal event. - * - * the poll call will time out after half a second. - */ -static void -run_pipeline (GstElement * pipe, const gchar * descr, - GstMessageType events, GstMessageType tevent, GstState target_state) -{ - GstBus *bus; - GstMessage *message; - GstMessageType revent; - GstStateChangeReturn ret; - - g_assert (pipe); - bus = gst_element_get_bus (pipe); - g_assert (bus); - - fail_if (gst_element_set_state (pipe, target_state) == - GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to playing", descr); - ret = gst_element_get_state (pipe, NULL, NULL, 10 * GST_SECOND); - if (ret == GST_STATE_CHANGE_ASYNC) { - g_critical ("Pipeline '%s' failed to go to PAUSED fast enough", descr); - goto done; - } else if ((ret != GST_STATE_CHANGE_SUCCESS) - && (ret != GST_STATE_CHANGE_NO_PREROLL)) { - g_critical ("Pipeline '%s' failed to go into PAUSED state (%s)", descr, - gst_element_state_change_return_get_name (ret)); - goto done; - } - - while (1) { - message = gst_bus_poll (bus, GST_MESSAGE_ANY, GST_SECOND / 2); - - /* always have to pop the message before getting back into poll */ - if (message) { - revent = GST_MESSAGE_TYPE (message); - gst_message_unref (message); - } else { - revent = GST_MESSAGE_UNKNOWN; - } - - if (revent == tevent) { - break; - } else if (revent == GST_MESSAGE_UNKNOWN) { - g_critical ("Unexpected timeout in gst_bus_poll, looking for %d: %s", - tevent, descr); - break; - } else if (revent & events) { - continue; - } - g_critical - ("Unexpected message received of type %d, '%s', looking for %d: %s", - revent, gst_message_type_get_name (revent), tevent, descr); - } - -done: - fail_if (gst_element_set_state (pipe, GST_STATE_NULL) == - GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to NULL", descr); - gst_element_get_state (pipe, NULL, NULL, GST_CLOCK_TIME_NONE); - gst_object_unref (pipe); - - gst_bus_set_flushing (bus, TRUE); - gst_object_unref (bus); -} - -GST_START_TEST (test_something) -{ - gchar *s; - GstState target_state = GST_STATE_PLAYING; - - s = "fakesrc num-buffers=10 ! fakesink"; - run_pipeline (setup_pipeline (s), s, - GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING), - GST_MESSAGE_UNKNOWN, target_state); -} - -GST_END_TEST -#endif /* #ifndef GST_DISABLE_PARSE */ - Suite * simple_launch_lines_suite (void) -{ - Suite *s = suite_create ("Pipelines"); - TCase *tc_chain = tcase_create ("linear"); - - /* time out after 60s, not the default 3 */ - tcase_set_timeout (tc_chain, 60); - - suite_add_tcase (s, tc_chain); -#ifndef GST_DISABLE_PARSE - tcase_add_test (tc_chain, test_something); -#endif - return s; -} - -int -main (int argc, char **argv) -{ - int nf; - - Suite *s = simple_launch_lines_suite (); - SRunner *sr = srunner_create (s); - - gst_check_init (&argc, &argv); - - srunner_run_all (sr, CK_NORMAL); - nf = srunner_ntests_failed (sr); - srunner_free (sr); - - return nf; -} +/* GStreamer
+ * Copyright (C) 2005 Andy Wingo <wingo@pobox.com>
+ *
+ * simple_launch_lines.c: Unit test for simple pipelines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library 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.
+ */
+
+#include <gst/check/gstcheck.h>
+
+#ifndef GST_DISABLE_PARSE
+
+static GstElement *
+setup_pipeline (const gchar * pipe_descr)
+{
+ GstElement *pipeline;
+
+ pipeline = gst_parse_launch (pipe_descr, NULL);
+ g_return_val_if_fail (GST_IS_PIPELINE (pipeline), NULL);
+ return pipeline;
+}
+
+/*
+ * run_pipeline:
+ * @pipe: the pipeline to run
+ * @desc: the description for use in messages
+ * @events: is a mask of expected events
+ * @tevent: is the expected terminal event.
+ *
+ * the poll call will time out after half a second.
+ */
+static void
+run_pipeline (GstElement * pipe, const gchar * descr,
+ GstMessageType events, GstMessageType tevent, GstState target_state)
+{
+ GstBus *bus;
+ GstMessage *message;
+ GstMessageType revent;
+ GstStateChangeReturn ret;
+
+ g_assert (pipe);
+ bus = gst_element_get_bus (pipe);
+ g_assert (bus);
+
+ fail_if (gst_element_set_state (pipe, target_state) ==
+ GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to playing", descr);
+ ret = gst_element_get_state (pipe, NULL, NULL, 10 * GST_SECOND);
+ if (ret == GST_STATE_CHANGE_ASYNC) {
+ g_critical ("Pipeline '%s' failed to go to PAUSED fast enough", descr);
+ goto done;
+ } else if ((ret != GST_STATE_CHANGE_SUCCESS)
+ && (ret != GST_STATE_CHANGE_NO_PREROLL)) {
+ g_critical ("Pipeline '%s' failed to go into PAUSED state (%s)", descr,
+ gst_element_state_change_return_get_name (ret));
+ goto done;
+ }
+
+ while (1) {
+ message = gst_bus_poll (bus, GST_MESSAGE_ANY, GST_SECOND / 2);
+
+ /* always have to pop the message before getting back into poll */
+ if (message) {
+ revent = GST_MESSAGE_TYPE (message);
+ gst_message_unref (message);
+ } else {
+ revent = GST_MESSAGE_UNKNOWN;
+ }
+
+ if (revent == tevent) {
+ break;
+ } else if (revent == GST_MESSAGE_UNKNOWN) {
+ g_critical ("Unexpected timeout in gst_bus_poll, looking for %d: %s",
+ tevent, descr);
+ break;
+ } else if (revent & events) {
+ continue;
+ }
+ g_critical
+ ("Unexpected message received of type %d, '%s', looking for %d: %s",
+ revent, gst_message_type_get_name (revent), tevent, descr);
+ }
+
+done:
+ fail_if (gst_element_set_state (pipe, GST_STATE_NULL) ==
+ GST_STATE_CHANGE_FAILURE, "Could not set pipeline %s to NULL", descr);
+ gst_element_get_state (pipe, NULL, NULL, GST_CLOCK_TIME_NONE);
+ gst_object_unref (pipe);
+
+ gst_bus_set_flushing (bus, TRUE);
+ gst_object_unref (bus);
+}
+
+GST_START_TEST (test_something)
+{
+ gchar *s;
+ GstState target_state = GST_STATE_PLAYING;
+
+ s = "fakesrc num-buffers=10 ! fakesink";
+ run_pipeline (setup_pipeline (s), s,
+ GST_MESSAGE_ANY & ~(GST_MESSAGE_ERROR | GST_MESSAGE_WARNING),
+ GST_MESSAGE_UNKNOWN, target_state);
+}
+
+GST_END_TEST
+#endif /* #ifndef GST_DISABLE_PARSE */
+ Suite * simple_launch_lines_suite (void)
+{
+ Suite *s = suite_create ("Pipelines");
+ TCase *tc_chain = tcase_create ("linear");
+
+ /* time out after 60s, not the default 3 */
+ tcase_set_timeout (tc_chain, 60);
+
+ suite_add_tcase (s, tc_chain);
+#ifndef GST_DISABLE_PARSE
+ tcase_add_test (tc_chain, test_something);
+#endif
+ return s;
+}
+
+int
+main (int argc, char **argv)
+{
+ int nf;
+
+ Suite *s = simple_launch_lines_suite ();
+ SRunner *sr = srunner_create (s);
+
+ gst_check_init (&argc, &argv);
+
+ srunner_run_all (sr, CK_NORMAL);
+ nf = srunner_ntests_failed (sr);
+ srunner_free (sr);
+
+ return nf;
+}
|